# Offense count: 630
Metrics/AbcSize:
- Max: 271
+ Max: 280
# Offense count: 35
# Configuration parameters: CountComments.
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:
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'
//= require leaflet.share
//= require leaflet.polyline
//= require leaflet.query
+//= require leaflet.contextmenu
+//= require index/contextmenu
//= require index/search
//= require index/browse
//= require index/export
var map = new L.OSM.Map("map", {
zoomControl: false,
- layerControl: false
+ layerControl: false,
+ contextmenu: true,
+ contextmenuWidth: 140
});
map.attributionControl.setPrefix('');
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) {
--- /dev/null
+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();
+};
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?
}
}
page.pushstate = page.popstate = function (path) {
- OSM.loadSidebarContent(path, page.load);
+ OSM.loadSidebarContent(path, function () {
+ page.load(path);
+ });
};
function newHalo(loc, a) {
}
}
- page.load = function () {
+ page.load = function (path) {
if (addNoteButton.hasClass("disabled")) return;
if (addNoteButton.hasClass("active")) return;
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
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);
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)),
/*
*= require leaflet
*= require leaflet.locationfilter
+ *= require leaflet.contextmenu
*/
/* Override to serve images through the asset pipeline. */
# 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
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]
# 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
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.
<h2><%= t 'layouts.intro_header' %></h2>
<div class="close-wrap"><span class="icon close"></span></div>
<p><%= t 'layouts.intro_text' %></p>
+ <p><%= 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/") %>
+ </p>
<a class="button learn-more" href="<%= about_path %>"><%= t('layouts.learn_more') %></a>
<a class="button sign-up" href="<%= user_new_path %>"><%= t('layouts.start_mapping') %></a>
</div>
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}"
: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/") %>
</p>
</div>
</div>
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
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
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,
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}
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}
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
language: Език
message: Съобщение
node: Възел
+ notifier: Известител
old_node: Стар възел
relation: Релация
relation_member: Член на релация
new_note: Нова бележка
description: Описание
open_by: Създадено от %{user} <abbr title='%{exact_time}'>преди %{when}</abbr>
+ query:
+ title: Търсене на особености
changeset:
changeset_paging_nav:
showing_page: Страница %{page}
speed_camera: Камера за контрол на скоростта
steps: Стълбище
street_lamp: Улична лампа
+ track: Полски път
trunk: Скоростен път
trunk_link: Скоростен път
unsurfaced: Път без настилка
log_in: Влизане
log_in_tooltip: Вписване със съществуващ профил
sign_up: Регистриране
+ start_mapping: Картографиране
edit: Редактиране
history: История
export: Изнасяне
english_link: Оригиналът на английски
native:
title: За тази страница
+ mapping_link: картографиране
legal_babble:
title_html: Авторски права и лиценз
infringement_title_html: Нарушаване на авторските права
note_comment_notification:
greeting: Здравейте,
changeset_comment_notification:
+ hi: Здравейте %{to_user},
greeting: Здравейте,
message:
inbox:
trunk: Междуградски път
primary: Главен път
secondary: Второстепенен път
+ track: Полски път
bridleway: Конен път
cycleway: Велосипедна пътека
footway: Пътека
user:
login:
title: Вписване
+ heading: Вписване
email or username: 'Електронна поща или потребителско име:'
password: 'Парола:'
remember: Запомни ме
title: Вписване с Фейсбук
wikipedia:
title: Вписване с Уикипедия
+ alt: Вписване със сметка от Уикипедия
yahoo:
title: Вписване с Яху
+ wordpress:
+ title: Вписване с Уърдпрес
lost_password:
email address: 'Електронна поща:'
reset_password:
flash changed: Паролата е променена успешно.
new:
title: Регистриране
+ about:
+ header: Безплатна и достъпна за редактиране
email address: 'Електронна поща:'
confirm email address: 'Потвърждаване на електронната поща:'
+ display name: Видимо потребителско имеː
password: 'Парола:'
confirm password: 'Потвърждаване на паролата:'
continue: Регистриране
cancel: Отказ
image: Изображение
link: Препратка или код
+ long_link: Препратка
+ short_link: Кратка препратка
+ embed: Код
custom_dimensions: Размер по избор
format: 'Формат:'
scale: 'Мащаб:'
+ image_size: На изображението ще бъде обичайната карта с размер
download: Изтегляне
include_marker: Добавяне на маркер
key:
site:
edit_tooltip: Редактиране на картата
createnote_tooltip: Добавяне на бележка на картата
+ queryfeature_tooltip: Търсене на особености
+ queryfeature_disabled_tooltip: Увеличете, за да търсите особености
notes:
new:
add: Добавяне на бележка
destination_without_exit: Пристигнахте на местоназначението
unnamed: неименуван път
time: Време
+ context:
+ add_note: Добавете бележка тук
...
back: পিছনে
to: প্রাপক
sent_message_summary:
- delete_button: মà§\81à¦\9bà§\87 ফà§\87লà§\81ন
+ delete_button: à¦\85পসারণ
mark:
- as_read: বার্তা পঠিত হিসেবে চিহ্নিত
- as_unread: বার্তা অপঠিত হিসেবে চিহ্নিত
+ as_read: বার্তা পঠিত হিসেবে চিহ্নিত করুন
+ as_unread: বার্তা অপঠিত হিসেবে চিহ্নিত করুন
delete:
deleted: বার্তা মোছা হয়েছে
site:
key:
table:
entry:
- motorway: মà§\8bà¦\9fà§\8bরপথ
+ motorway: মোটরপথ
main_road: প্রধান সড়ক
trunk: মূল সড়ক
primary: প্রাথমিক সড়ক
description: 'বিবরণ:'
tags: 'ট্যাগসমূহ:'
save_button: পরিবর্তন সংরক্ষণ
- visibility: দৃষ্টিযোগ্যতা
+ visibility: 'দৃষ্টিযোগ্যতা:'
visibility_help: এটার মানে কি?
trace_form:
upload_gpx: 'জিপিএক্স ফাইল আপলোড:'
edit_track: এই অনুসরণটি সম্পাদনা করুন
delete_track: এই অনুসরণটি মুছে ফেলুন
trace_not_found: অনুসরণ পাওযা যায়নি।
- visibility: দৃষ্টিযোগ্যতা
+ visibility: 'দৃষ্টিযোগ্যতা:'
trace_paging_nav:
showing_page: '%{page} পাতা'
trace:
remember: আমাকে মনে রাখো
login_button: প্রবেশ
register now: এখনই নিবন্ধন করুন
- with username: 'ইতিমধ্যে একটি ওপেনস্ট্রিটম্যাপ অ্যাকাউন্ট আছে? দয়া করে ব্যবহারকারীনাম
- এবং পাসওয়ার্ড দিয়ে প্রবেশ করুন:'
+ with username: 'ইতিমধ্যে একটি ওপেনস্ট্রিটম্যাপ অ্যাকাউন্ট আছে? দয়া করে ব্যবহারকারী
+ নাম à¦\8fবà¦\82 পাসà¦\93য়ারà§\8dড দিয়à§\87 পà§\8dরবà§\87শ à¦\95রà§\81ন:'
new to osm: ওপেনস্ট্রিটম্যাপে নতুন?
no account: কোনও অ্যাকাউন্ট নেই?
auth_providers:
way: রাস্তা
relation: সম্পর্ক
nothing_found: বৈশিষ্ট্য খুঁজে পাওয়া যায়নি
+ context:
+ add_note: এখানে একটি টীকা যোগ করুন
+ show_address: ঠিকানা দেখান
redaction:
edit:
description: বিবরণ
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
more_1_html: Ma fell deoc'h kaout muioc'h a ditouroù diwar-benn adimplij hor
roadennoù, lennit <a href="http://osmfoundation.org/Licence"> Licence OSMF
Licence page</a> hag ar gumuniezh <a
- more_2_html: |-
- Daoust da OpenStreetMap bezañ un hollad roadennoù digor, n'omp ket evit pourchas
- un API digoust evit an diorroerien diavaez.
- Sellit ouzh hor <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">reolennoù evit implijout an API</a>,
- <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">reolennoù evit implijout ar gartenn</a>
- ha <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">reolennoù evit implijout Nominatim</a>.
+ 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
+ <a href=\"https://operations.osmfoundation.org/policies/api/\"></a> reolennoù
+ evit implijout an API</a>, \n Sellit ouzh hor <a href=\"https://operations.osmfoundation<a
+ href=\"https://operations.osmfoundation.org/policies/tiles/\">reolennoù evit
+ implijout an teolennoù</a>, ha\n<a href=\"https://operations.osmfoundation.org/policies/nominatim/\">reolennoù
+ evit implijout Nominatin</a>"
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
dizober</a>, mar plij, pe skrivit war-eeun war hor <a href="http://dmca.openstreetmap.org/">furmskrid
enlinenn</a>.
trademarks_title_html: <span id="merkoù"></span>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 <a href="http://wiki.osmfoundation.org/wiki/Licensing_Working_Group">Licence
+ Working Group</a>, mar plij.
welcome_page:
title: Deuet-mat oc'h !
introduction_html: Degemer mat en OpenStreetMap, ar gartenn digoust eus ar bed
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 <a href='http://wiki.openstreetmap.org/wiki/Import/Guidelines'></a>An
+ ezporzhiadurioù</> ha<a href='http://wiki.openstreetmap.org/wiki/Import/Guidelines'></a>
+ 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
legal_title: Lezennel
legal_html: "Al lec'hienn-mañ hag e-leizh a servijoù all kar zo korvoet ent furmel
gant an <a href=\"http://osmfoundation.org/\">Diazezaddur OpenStreetMap</a>
- (OSMF) \nen anv ar gumuniezh.\n<br>\nKit <a href=\"http://osmfoundation.org/Contact\">contacter
+ (OSMF) \nen anv ar gumuniezh.\nEvit implijout an holl servijoù kinniget gant
+ an OSMF e ranker doujañ d'hor \n<a href=\"http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">
+ Politikerezh war an implijoù degemeret</a> ha d'hor <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">Politikerzh
+ prevezded</a>.\n<br>\nKit <a href=\"http://osmfoundation.org/Contact\">contacter
l'OSMF</a> e darempred gant an OSMF</a>, 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<br>"
partners_title: Kevelerien
notifier:
diary_comment_notification:
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
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
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
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ñ
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
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.
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.
ar c'henlabourer</a>.
email address: 'Chomlec''h postel :'
confirm email address: 'Kadarnaat ar chomlec''h postel :'
- not displayed publicly: N'eo ket diskwelet d'an holl (gwelet <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
- title="wiki privacy policy including section on email addresses">hor c'harta
- prevezded</a>)
+ not displayed publicly: N'eo ket diskwelet ho chomlec'h d'an holl (gwelet <a
+ href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="wiki privacy
+ policy including section on email addresses">hor c'harta prevezded</a>) 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 !
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ñ
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
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}
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ñ
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: © <a href='%{copyright_url}'>Kenlabourerien OpenStreetMap</a>
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}
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
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
# Author: Micru
# Author: Mlforcada
# Author: Nemo bis
+# Author: Netol
# Author: PerroVerd
# Author: Pitort
# Author: Ruila
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
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
# Author: Nemo bis
# Author: Paxt
# Author: Reaperman
+# Author: StenSoft
# Author: Tchoř
# Author: Urbanecm
# Author: Veritaslibero
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
level6: Hranice okresu
level8: Hranice obce
level9: Hranice vesnice
- level10: Hranice čtvrti
+ level10: Hranice městské části
description:
title:
osm_nominatim: Poloha podle <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
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é
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
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
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
cinema: Biograf
clinic: Klinik
clock: Ur
- college: Videregående uddanelsesinstitution
+ college: Videregående uddannelsesinstitution
community_centre: Forsamlingshus / lokalcenter
courthouse: Retsbygning
crematorium: Krematorium
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
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.
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}
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
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
# Author: Stam.nikos
# Author: SucreRouge
# Author: Zserdx
+# Author: Ανώνυμος Βικιπαιδιστής
# Author: 아라
---
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 έχει τεθεί προσωρινά σε λειτουργία
details: Περισσότερες λεπτομέρειες σχετικά με τη σημείωση μπορούν να βρεθούν
στο %{url}.
changeset_comment_notification:
+ hi: Γεια σας, %{to_user},
greeting: Γεια,
commented:
subject_own: '[OpenStreetMap] {{GENDER:%{commenter}|Ο|Η}} %{commenter} σχολίασε
partial_changeset_without_comment: χωρίς σχόλιο
details: Περισσότερες λεπτομέρειες για την ομάδα αλλαγών μπορούν να βρεθούν
στο %{url}.
+ unsubscribe: Για να διαγραφείτε από τις ενημερώσεις αυτής της ομάδας αλλαγών,
+ επισκεφθείτε το %{url} και πατήστε "Διαγραφή".
message:
inbox:
title: Εισερχόμενα
not_a_moderator: Θα πρέπει να είστε συντονιστής για να εκτελέσετε αυτήν την
ενέργεια.
setup_user_auth:
+ blocked_zero_hour: Έχετε ένα επείγον μήνυμα στον ιστότοπο του OpenStreetMap.
+ Θα πρέπει να διαβάσετε το μήνυμα πριν να μπορείτε να αποθηκεύσετε τις αλλαγές
+ σας.
blocked: Η πρόσβασή σας στο API έχει αποκλειστεί. Παρακαλώ συνδεθείτε με τη
διεπαφή του ιστότοπου για να μάθετε περισσότερα.
+ need_to_see_terms: Η πρόσβασή σας στο API έχει ανασταλεί προσωρινά. Παρακαλούμε
+ συνδεθείτε στην ηλεκτρονική διεπαφή για να δείτε τους Όρους Συνεισφερόντων.
+ Δεν χρειάζεται να συμφωνήσετε, αλλά θα πρέπει να τους δείτε.
oauth:
oauthorize:
title: Επιτρέψτε την πρόσβαση στο λογαριασμό σας
nothing_found: Δεν βρέθηκαν χαρακτηριστικά
error: 'Σφάλμα επικοινωνίας με τον %{server}: %{error}'
timeout: Έληξε το χρονικό όριο επικοινωνίας με %{server}
+ context:
+ directions_from: Οδηγίες από εδώ
+ directions_to: Οδηγίες προς τα εδώ
+ add_note: Προσθέστε μια σημείωση εδώ
+ show_address: Εμφάνιση διεύθυνσης
+ query_features: Πληροφορίες χαρακτηριστικών
+ centre_map: Κεντράρισμα χάρτη εδώ
redaction:
edit:
description: Περιγραφή
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
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."
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:
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}"
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"
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 <a
href="http://osmfoundation.org/Licence">retpaĝo de OSMF permesilo</a> kaj je la <a
not_public_description: Vi ne povas plu redakti la mapon. Vi povas agordi ilin
kiel publikan ĉe via %{user_page}.
user_page_link: uzantpaĝo
- anon_edits_link_text: Tie ĉi vi sciigis kiel.
+ anon_edits_link_text: Tie ĉi vi sciiĝis kiel.
flash_player_required: Por uzi laOpenStreetMap-redaktilon 'Potlatch', vi bezonas
la kromprogramon Flash. Vi povas <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">elŝuti
Flash Player el Adobe.com retpaĝo</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Kelkaj
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.
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. <b>Ekde la versio 0.6
- de API, nur publikaj uzantoj povas redakti map-datumojn.</b> (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">sciigi
+ de API, nur publikaj uzantoj povas redakti map-datumojn.</b> (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">sciiĝi
kial</a>).<ul><li>Via retpoŝta adreso ne estos publikigita.</li><li>Ĉi tio
ago ne povos esti malfarita kaj ĉiuj novaj uzantoj estas publikaj implicite.</li></ul>
contributor terms:
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}
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
# Author: Carlosz22
# Author: Crazymadlover
# Author: Csbotero
+# Author: Dgstranz
# Author: Egofer
# Author: Fitoschido
# Author: Fortega
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
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,
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
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Alirezaaa
+# Author: Arash.pt
# Author: Armin1392
# Author: BMRG14
# Author: Baqeri
nothing_found: ویژگیای یافت نشد
error: 'خطار در ارتباط %{server}: %{error}'
timeout: اتمام زمان %{server}
+ context:
+ show_address: نمایش آدرس
redaction:
edit:
description: شرح
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'
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.
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
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
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:'
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
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
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} »
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
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.
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
diary_entry:
new:
title: Clàr ùr an leabhair-latha
+ publish_button: Foillsich
list:
title: Leabhraichean-latha
title_friends: Leabhraichean-latha do charaidean
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
loch no togalach.'
tag_html: '''S e beagan dàta mu nòd no slighe a tha ann an <strong>taga</strong>,
can ainm taighe-bhìdh no crìoch astair rathaid.'
+ rules:
+ title: Riaghailtean!
questions:
title: A bheil ceist sam bith agad?
paragraph_1_html: |-
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
open_data_html: |-
'S e <i>dàta fosgailte</i> 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 <a href='%{copyright_path}'>Duilleag na còrach-lethbhreac agus a' cheadachais</a> 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}'
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
table:
entry:
motorway: Mòr-rathad
+ main_road: Prìomh-rathad
trunk: Prìomh-rathad
primary: Prìomh-rathad
secondary: Rathad dàrnach
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
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
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:
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.
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
a' chom-pàirtiche</a>.
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 <a
- href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="poileasaidh
- na prìobhaideachd san uicidh a ghabhas a-steach earrann air seòlaidhean puist-d">poileasaidh
- na prìobhaideachd</a>)
+ not displayed publicly: Cha dèid do sheòladh shealltainn gu poblach, thoir sùil
+ air <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="poileasaidh
+ na prìobhaideachd OSMF a ghabhas a-steach earrann air seòlaidhean puist-d">poileasaidh
+ na prìobhaideachd</a> 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.
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
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
partners_ic: המכללה המלכותית של לונדון
partners_bytemark: אירוח בייטמארק
partners_partners: שותפים
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
osm_offline: מסד הנתונים של אתר OpenStreetMap אינו מקוון כעת בשל עבודות תחזוקה
המבוצעות בו.
osm_read_only: מסד הנתונים של אתר OpenStreetMap נתון כעת במצב קריאה בלבד בשל עבודות
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ž
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
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} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ open_by_anonymous: Búið til af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ commented_by: Umsögn frá %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ commented_by_anonymous: Umsögn frá nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ closed_by: Leyst af %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
+ closed_by_anonymous: Leyst af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ reopened_by: Endurvirkjað af %{user} <abbr title='%{exact_time}'>fyrir %{when}
+ síðan</abbr>
+ reopened_by_anonymous: Endurvirkjað af nafnlausum notanda <abbr title='{exact_time}'>fyrir
+ %{when} síðan</abbr>
+ hidden_by: Falið af %{user} <abbr title='%{exact_time}'>fyrir %{when} síðan</abbr>
query:
title: Rannsaka fitjur
introduction: Smelltu á kortið til að finna fitjur í nágrenninu.
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
location:
location: 'Staðsetning:'
view: kort
- edit: breyta
+ edit: Breyta
feed:
user:
title: OpenStreetMap bloggfærslur eftir %{user}
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:
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:
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öð
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
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
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
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
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
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:
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
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
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:
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
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!
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.
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
vegna framlaga</a>.
email address: 'Netfang:'
confirm email address: 'Staðfestu netfang:'
- not displayed publicly: Ekki sýnt opinberlega (sjá <a href="http://wiki.openstreetmap.org/index.php?uselang=is&title=Privacy_Policy"
- title="Meðferð persónuupplýsinga, þ.á.m. netfanga">meðferð persónuupplýsinga</a>)
+ not displayed publicly: Netfangið þitt er ekki birt opinberlega, sjá kaflann
+ <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy" title=Meðferð
+ OSMF á persónuupplýsingum, þar með töldum netföngum">um meðferð persónuupplýsinga</a>
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á
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
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
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.
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:'
header: Lög á korti
notes: Minnispunktar á korti
data: Gögn korts
+ gps: Opinberir GPS-ferlar
title: Lög
copyright: © <a href='%{copyright_url}'>OpenStreetMap þátttakendur</a>
donate_link_text: <a class='donate-attr' href='%{donate_url}'>Styrkja verkefnið</a>
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
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:
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
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
tag_line: თავისუფალი ვიკი-რუკა
intro_2_create_account: მომხმარებლის ანგარიშის შექმნა
partners_partners: პარტნიორები
- partners_url: http://wiki.openstreetmap.org/wiki/Partners
help: დახმარება
copyright: საავტორო უფლები
community: თანასაზოგადოება
show:
hide: დამალვა
comment: კომენტარი
+ context:
+ show_address: მისამართის ჩვენება
redaction:
edit:
description: აღწერა
acl: 접근 제어 목록
changeset: 바뀜집합
changeset_tag: 바뀜집합 태그
- country: 국가
+ country: 나라
diary_comment: 일기 댓글
diary_entry: 일기 항목
friend: 친구
user_preference: 사용자 환경 설정
user_token: 사용자 토큰
way: 길
- way_node: 길 노드
+ way_node: 길 교점
way_tag: 길 태그
attributes:
diary_comment:
user:
email: 이메일
active: 활성
- display_name: 표시할 이름
+ display_name: 표시 이름
description: 설명
languages: 언어
pass_crypt: 비밀번호
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}님이 <abbr title=''%{exact_time}''>%{when} 전</abbr>에
남긴 숨겨진 댓글'
commented_by: '%{user}님이 <abbr title=''%{exact_time}''>%{when} 전</abbr>에 댓글을
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} 길의 일부'
relation_member:
entry_role: '%{type}에서 %{role}의 %{name}'
type:
- node: 노드
+ node: 교점
way: 길
relation: 관계
containing_relation:
not_found:
sorry: '죄송하지만, %{type} #%{id}을(를) 찾지 못했습니다.'
type:
- node: 노드
+ node: 교점
way: 길
relation: 관계
changeset: 바뀜집합
timeout:
sorry: 죄송합니다, %{id} id인 %{type}에 대한 데이터를 얻는데 너무 오래 걸립니다.
type:
- node: 노드
+ node: 교점
way: 길
relation: 관계
changeset: 바뀜집합
message_html: 이 %{type}의 %{version}판은 비공개 처리되었기 때문에 볼 수 없습니다. 자세한 내용은 %{redaction_link}을(를)
참조하세요.
type:
- node: 노드
+ node: 교점
way: 길
relation: 관계
start_rjs:
no_such_entry:
title: 이러한 일기 항목이 없음
heading: 'id에 항목 없음: %{id}'
- body: ì£\84ì\86¡í\95©ë\8b\88ë\8b¤, %{id} id로 된 일기 항목이나 댓글이 없습니다. 맞춤법이나 클릭한 링크가 잘못됐는지 확인하세요.
+ body: ì£\84ì\86¡í\95\98ì§\80ë§\8c, %{id} id로 된 일기 항목이나 댓글이 없습니다. 맞춤법이나 클릭한 링크가 잘못됐는지 확인하세요.
diary_entry:
posted_by: '%{link_user}님이 %{language_link}로 %{created}에 게시함'
comment_link: 이 항목에 댓글 남기기
nothing_found: 지물을 찾을 수 없습니다
error: '%{server} 연결에 오류: %{error}'
timeout: '%{server} 연결에 시간 초과'
+ context:
+ add_note: 여기에 설명 추가
+ show_address: 주소 보기
+ query_features: 의문 지물
redaction:
edit:
description: 설명
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
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)
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
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:
Sužinokite daugiau apie mūsų duomenų naudojimą, kaip pažymėti prisidėjusius <a
href="http://osmfoundation.org/Licence">OSMF licencijavimo puslapyje</a> ir bendruomenės <a href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">DUK dėl legalumo</a>.
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ų <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API naudojimo politiką</a>, bei <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim naudojimo politika</a>.
+ Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti
+ nemokamos žemėlapių API trečiosioms šalims.
+ Peržiūrėkite mūsų <a href="https://operations.osmfoundation.org/policies/api/">API naudojimo politiką</a>,
+ <a href="https://operations.osmfoundation.org/policies/tiles/">Kaladėlių naudojimo politiką</a>,
+ bei <a href="https://operations.osmfoundation.org/policies/nominatim/">Nominatim naudojimo politiką</a>.
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ų,
title: Pagrindiniai žymėjimo terminai
paragraph_1_html: OpenStreetMap turi savo žodyną. Čia keli pagrindiniai naudojami
terminai/žodžiai.
- editor_html: <strong>Redaktorius</strong> - tai programa arba svetainė, kurios
- pagalba galite redaguoti žemėlapį.
+ editor_html: <strong>Rengyklė</strong> - tai programa arba svetainė su kuria
+ galite redaguoti žemėlapį.
node_html: <strong>node/taškas</strong> - taškas žemėlapyje, pavyzdžiui vienas
restoranas ar medis.
way_html: <strong>kelias/way</strong> - linija ar plotas, pavyzdžiui kelias,
legal_title: Teisės
legal_html: "Šis puslapis ir daugelis kitų susijusių paslaugų yra formaliai valdomi
\n<a href='http://osmfoundation.org/'>OpenStreetMap fondo</a> (OSMF) \nbendruomenės
- vardu.\n<br> \n<a href='http://osmfoundation.org/Contact'>Susisiekite su OSMF</a>,
- \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų ar problemų."
+ vardu. Visų OSMF valdomų paslaugų naudojimas yra\npriklausomas nuo <a href=\"http://wiki.openstreetmap.org/wiki/Acceptable_Use_Policy\">\nPriimtino
+ naudojimo politikos</a> ir mūsų <a href=\"http://wiki.osmfoundation.org/wiki/Privacy_Policy\">Privatumo
+ politikos</a>.\n<br> \n<a href='http://osmfoundation.org/Contact'>Susisiekite
+ su OSMF</a>, \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:
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ų'
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
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 <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">parsisiųsti
+ flash_player_required: Jums reikalingas Flash player norint redaguoti su Potlatch,
+ OpenStreetMap Flash rengykle. Jūs galite <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">parsisiųsti
Flash Player iš Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Taip
pat yra daugybė kitų būdų</a>, kuriais galėsite prisidėti prie OpenStreetMap
žemėlapio redagavimo.
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
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
sąlygomis</a>.
email address: 'E-pašto adresas:'
confirm email address: 'Patvirtinkite e-pašto adresą:'
- not displayed publicly: Viešai nerodoma (skaitykite <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
- title="wiki privatumo politika, įskaitant el. paštą">privatumo politiką</a>)
+ not displayed publicly: Jūsų adresas nėra viešai rodomas, daugiau informacijos
+ rasite <a href="http://wiki.osmfoundation.org/wiki/Privacy_Policy" title="OSMF
+ privatumo politika, įskaitant el. pašto adresus">privatumo politikoje</a>
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.
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.
- <b>Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duoemnis</b>.
- (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">dėl ko taip
- padaryta</a>).<ul><li>Jūsų el. pašto adresas nebus atskleistas kol ne taps
- viešas.</li><li>Šis veiksmas negalės būti atšauktas ir visi nauji naudotojai
- dabar yra vieši pagal nutylėjimą.</li></ul>
+ <b>Nuo 0.6 API pakeitimo, tik vieši naudotojai gali keisti duomenis</b>.
+ (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">sužinokite
+ kodėl</a>).<ul><li>Jūsų el. pašto adresas nebus viešai atskleistas.</li><li>Šis
+ veiksmas negalės būti atšauktas ir visi nauji naudotojai dabar yra automatiškai
+ vieši.</li></ul>
contributor terms:
heading: 'Talkininkų sąlygos:'
agreed: Jūs sutikote su naujomis talkininkų sąlygomis.
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ą
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
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: © <a href='%{copyright_url}'>OpenStreetMap talkininkai</a>
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
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
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ā,
partners_ic: Империјалниот колеџ - Лондон
partners_bytemark: вдомителот „Bytemark“
partners_partners: партнери
- partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=mk
osm_offline: Базата на податоци на OpenStreetMap моментално е исклучена додека
работиме на неопходни одржувања.
osm_read_only: Базата на податоци на OpenStreetMap моментално може само да се
<a\nhref=\"http://opendatacommons.org/licenses/odbl/1.0/\">правен текст</a>."
intro_3_html: |-
Картографијата во нашите полиња на картите и нашата документација
- се нудат под лиценцата <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.mk">Криејтив комонс НаведиИзвор-СподелиПодИстиУслови 2.0</a> (CC-BY-SA).
+ се нудат под лиценцата <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.mk">Криејтив комонс Наведи извор-Сподели под исти услови 2.0</a> (CC-BY-SA).
credit_title_html: Како да ја наведете OpenStreetMap
credit_1_html: |-
Задолжително наведувајте нè со “© Учесници на
require_moderator:
not_a_moderator: За да го изведете тоа, треба да сте модератор.
setup_user_auth:
+ blocked_zero_hour: Имате итна порака на OpenStreetMap. Ќе мора да ја прочитате
+ пораката пред да ги зачувате уредувањата.
blocked: Пристапот кон API ви е блокиран. Најавете се на посредникот за да дознаете
повеќе.
need_to_see_terms: Вашиот пристап до извршничкиот програм е привремено запрен.
helper:
time_future: Истекува за %{time}.
until_login: Активно додека не се најави корисникот.
+ time_future_and_until_login: Завршува во %{time} и откако корисникот ќе се најави.
time_past: Истечено пред %{time}.
blocks_on:
title: Блокови за %{name}
nothing_found: Не пронајдов ниеден елемент
error: 'Грешка при поврзувањето со %{server}: %{error}'
timeout: Истече времето за поврзување со %{server}
+ context:
+ directions_from: Насоки оттука
+ directions_to: Насоки дотука
+ add_note: Тука ставете белешка
+ show_address: Прикажи адреса
+ query_features: Можности за барања
+ centre_map: Тука сосредоточи ја картата
redaction:
edit:
description: Опис
# 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: परिवरà¥\8dतनहरà¥\81 सूची
+ changeset: परिवरà¥\8dतनहरà¥\82 सूची
changeset_tag: चेन्जसेट ट्याग
country: देश
diary_comment: डायरी टिप्पणी
active: सक्रिय
display_name: देखाउने नाम
description: वर्णन
- languages: à¤à¤¾à¤·à¤¾à¤¹à¤°à¥\81
+ languages: à¤à¤¾à¤·à¤¾à¤¹à¤°à¥\82
pass_crypt: पासवर्ड
+ printable_name:
+ with_version: '%{id}, v%{version}'
+ with_name_html: '%{name} (%{id})'
editor:
default: पूर्वस्थापित(अहिलेको %{name})
potlatch:
way_paginated: बाटोहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
relation: सम्बन्धहरू (%{count})
relation_paginated: सम्बन्धहरू (जम्मा %{count} मध्येबाट %{x}-%{y})
+ comment: टिप्पणीहरू (%{count})
+ hidden_commented_by: ' %{user} द्वारा गरिएको लुकाइएको टिप्पणी <abbr title=''%{exact_time}''>%{when}
+ पहिले</abbr>'
+ commented_by: '%{user}द्वारा <abbr title=''%{exact_time}''>%{when} अगाडि</abbr>
+ गरिएको टिप्पणी'
changesetxml: चेन्जसेट XML
osmchangexml: osmChange XML
feed:
title: 'परिवर्तनहरू: %{id}'
title_comment: परिवर्तनहरू %{id} - %{comment}
+ join_discussion: छलफलमा भाग लिन लग इन गर्नुहोस्
+ discussion: छलफल
node:
title: 'अंश: %{name}'
history_title: 'अंशको इतिहास: %{name}'
node: नोड
way: बाटो
relation: सम्बन्ध
- changeset: परिवर्तनसेट \
+ changeset: परिवर्तनसेट
+ note: टिपोट
timeout:
sorry: माफ गर्नुहोला, %{id} अाइडि भएको %{type}को लागि तथ्याङ्क प्राप्त गर्न
निक्कै समय लाग्यो ।
way: बाटो
relation: सम्बन्ध
changeset: चेन्जसेट
+ note: टिपोट
redacted:
redaction: सम्पादन %{id}
- message_html: '%{type}को संस्करण %{version} सम्पादित भएकाले देखाउन सकिएन । कृपया
- विसà¥\8dतà¥\83त à¤\9cानà¤\95ारà¥\80à¤\95à¥\8b लाà¤\97ि %{redaction_link} हà¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d ।'
+ message_html: संस्करण %{version} यस प्रकारको %{type} देखाउन सकिँदैन किनभने
+ यà¥\8b हà¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤\9b à¤\95à¥\83पया à¤\9cानà¤\95ारà¥\80à¤\96à¥\8b लाà¤\97ि %{redaction_link} हà¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d
type:
node: नोड
way: बाटो
load_data: डेटा लोडगर्ने
loading: लोड हुदैछ...
tag_details:
- tags: सà¤\82à¤\95à¥\87तहरू
+ tags: à¤\9fà¥\8dयाà¤\97हरू
wiki_link:
key: '%{key} संकेतको लागि विकि विवरण पृष्ठ'
tag: '%{key}=%{value} संकेतको लागि विकि विवरण पृष्ठ'
+ wikidata_link: '%{page} वस्तु Wikidata मा'
wikipedia_link: '%{page}को बारेमा विकिपीडियामा भएको लेख'
+ telephone_link: '%{phone_number} मा फोन गर्नुहोस्'
note:
title: 'टिप्पणी: %{id}'
new_note: नयाँ टिप्पणी
अगाडि</abbr> पुनःसक्रिय गरिएको
hidden_by: '%{user}द्वारा <abbr title=''%{exact_time}''>%{when} अगाडि</abbr>
लुकाइएको'
+ query:
+ title: क्वेरी गुणहरू
changeset:
changeset_paging_nav:
showing_page: पृष्ठ %{page}
diary_entry:
new:
title: नयाँ दैनिकी
+ publish_button: प्रकाशन गर्नुहोस्
list:
title: प्रयोगकर्ताका डायरीहरू
title_friends: साथीहरूका डायरीहरू
latitude: 'देशान्तर:'
longitude: 'अक्षांश:'
use_map_link: नक्सा प्रयोगर्ने
- save_button: सà¤\82à¤\97à¥\8dरह à¤\97रà¥\8dनà¥\87
+ save_button: सà¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
marker_text: दैनिकी प्रविष्ठी स्थान
view:
title: '%{user}को डायरी | %{title}'
leave_a_comment: टिप्पणी छोड्ने
login_to_leave_a_comment: '%{login_link} टिप्पणी छोड्नलाई'
login: प्रवेश
- save_button: सà¤\82à¤\97à¥\8dरह à¤\97रà¥\8dनà¥\87
+ save_button: सà¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d
no_such_entry:
title: त्यस्तो कुनै दैनिकी भेटिएन
heading: '%{id} आइडी भएको कुनै अभिलेख भेटिएन'
diary_comment:
comment_from: '%{link_user}द्वारा %{comment_created_at}मा गरिएको टिप्पणी'
hide_link: यो टिप्पणी लुकाउनुहोस्
- confirm: ' निश्चित गर्ने'
+ confirm: निश्चित गर्ने
location:
location: 'स्थान:'
view: अवलोकन गर्ने
other:
title: अन्य स्रोतहरू
description: ओपनस्ट्रीटम्याप विकिमा सूचीत थप स्रोतहरू
- options: विà¤\95लà¥\8dपहरà¥\81
+ options: विà¤\95लà¥\8dपहरà¥\82
format: ढाँचा
scale: स्केल
max: अधिकतम
search_osm_nominatim:
prefix:
aerialway:
+ cable_car: केबल कार
chair_lift: कुर्सी लिफ्ट
drag_lift: तान्ने लिफ्ट
+ gondola: गोन्डोला लिफ्ट
station: हवाई मार्ग स्टेशन
aeroway:
aerodrome: हवाईड्रोम
taxiway: ट्याक्सीको बाटो
terminal: टर्मिनल
amenity:
- airport: विमानस्थल
+ animal_shelter: पशु आश्रय
arts_centre: कला केन्द्र
- artwork: कला
atm: एटिएम् मेसिन
- auditorium: प्रेक्षालय
bank: बैँक
bar: बार
bbq: बारबिक्यू
bicycle_parking: साइकिल पार्किङ्
bicycle_rental: साइकिल भाडामा
biergarten: बियर पिउने ठाउँ
+ boat_rental: ढुङ्गा भाडा सेवा
brothel: वेश्यालय
bureau_de_change: परिवर्तन व्यूरो
bus_station: बस स्टेसन्
car_wash: कार धुने ठाउँ
casino: क्यासिनो
charging_station: चार्ज गर्ने स्टेसन
+ childcare: बालबालिका हेरचाह
cinema: सिनेमा घर
clinic: क्लिनिक
- club: क्लब
+ clock: घन्टाघर
college: कलेज
- community_centre: सामà¥\81दायà¥\80क केन्द्र
+ community_centre: सामà¥\81दायिक केन्द्र
courthouse: अदालत
crematorium: श्मशान
dentist: दाँतको डाक्टर
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}
edit: सम्पादन
owner: 'मालिक:'
description: विवरण
- tags: 'ट्यागहरु:'
+ tags: ट्यागहरूः
tags_help: अल्पविरामले छुट्याएको
- save_button: परिवरà¥\8dतनहरà¥\81 संग्रह गर्ने
+ save_button: परिवरà¥\8dतनहरà¥\82 संग्रह गर्ने
visibility: 'दृश्यक्षमता:'
visibility_help: यसको मतलब के हो ?
trace_form:
upload_gpx: 'GPX फाइल अपलोड गर्ने:'
description: 'विवरण:'
- tags: 'ट्यागहरु:'
+ tags: ट्यागहरूः
tags_help: अल्पविरामले छुट्याएको
visibility: 'दृश्यक्षमता:'
visibility_help: यसको मतलाब के हो ?
help: सहायता
trace_header:
see_all_traces: सबै ट्रेसहरु हेर्ने
- see_your_traces: तपाà¤\88à¤\95à¥\8b सबà¥\88 à¤\9fà¥\8dरà¥\87सहरà¥\81 हà¥\87रà¥\8dनà¥\81हà¥\8bस \
+ see_your_traces: तपाà¤\88à¤\82à¤\95à¥\8b सबà¥\88 à¤\9fà¥\8dरà¥\87सहरà¥\82 हà¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d
trace_optionals:
- tags: à¤\9fà¥\8dयाà¤\97हरà¥\81
+ tags: à¤\9fà¥\8dयाà¤\97हरà¥\82
view:
title: हेर्दै ट्रेस %{name}
heading: हेर्दै ट्रेस %{name}
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}
in: मा
map: नक्सा
list:
- public_traces: सारवजनिक GPS ट्रेसहरु \
- your_traces: तपाà¤\88à¤\95à¥\8b GPS à¤\9fà¥\8dरà¥\87सहरà¥\81
+ public_traces: सारवजनिक GPS ट्रेसहरु
+ your_traces: तपाà¤\88à¤\82à¤\95à¥\8b GPS à¤\9fà¥\8dरà¥\87सहरà¥\82
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: तपाà¤\88à¤\81à¤\95à¥\8b सà¥\8dथान
nearby mapper: नजिकको मानचित्रकर्मी
+ friend: साथी
account:
my settings: मेरो अनुकुलताहरु
openid:
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: तपाà¤\88à¤\95à¥\8b à¤\87मà¥\87ल निशà¥\8dà¤\9aित à¤\97रà¥\8dनà¥\81हà¥\8bस, ग्राह्याताको लागि धन्यवाद!
+ success: तपाà¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87ल निशà¥\8dà¤\9aित à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d, ग्राह्याताको लागि धन्यवाद!
failure: यो टोकन को साथम एक इमेल पहिले नै निश्चित गरिसकिएको छ।
go_public:
- flash success: तपाà¤\88à¤\95à¥\8b सबà¥\88 समà¥\8dपादनहरà¥\81 सारà¥\8dवाà¤\9cनिà¤\95 à¤\9bनà¥\8d ,तपाà¤\88 à¤\85ब समà¥\8dपान लायà¤\95 हà¥\81नà¥\81
- भयो ।
+ flash success: तपाà¤\88à¤\82à¤\95ा सबà¥\88 समà¥\8dपादनहरà¥\82 सारà¥\8dवाà¤\9cनिà¤\95 à¤\9bनà¥\8d , तपाà¤\88à¤\82 à¤\85ब समà¥\8dपादन लायà¤\95
+ हà¥\81नà¥\81 à¤à¤¯à¥\8b ।
make_friend:
- success: '%{name} अब तपाईको मित्र हुनुभएको छ!'
+ success: '%{name} à¤\85ब तपाà¤\88à¤\82à¤\95à¥\8b मितà¥\8dर हà¥\81नà¥\81à¤à¤\8fà¤\95à¥\8b à¤\9b!'
failed: माफ गर्नुहोला, %{name}लाई मित्रको रुपमा थप्न सकिएन।
- already_a_friend: ' %{name} सँग तपाई पहिले नै मित्रता गरिसक्नु भएको छ ।'
+ already_a_friend: '%{name} सँग तपाईंले पहिले नै मित्रता गरिसक्नु भएको छ ।'
filter:
- not_an_administrator: यो कार्य गर्न तपाई प्रवन्धक हुनुपर्छ .
+ not_an_administrator: यो कार्य गर्न तपाईं प्रवन्धक हुनुपर्छ .
user_role:
filter:
- not_an_administrator: पà¥\8dरवनà¥\8dधà¤\95हरà¥\81लà¥\87 à¤à¥\82मिà¤\95ा वà¥\8dयवसà¥\8dथापन à¤\97रà¥\8dन सà¤\95à¥\8dà¤\9bनà¥\8d र तपाà¤\88 प्रवन्धक
+ not_an_administrator: पà¥\8dरवनà¥\8dधà¤\95हरà¥\82लà¥\87 à¤à¥\82मिà¤\95ा वà¥\8dयवसà¥\8dथापन à¤\97रà¥\8dन सà¤\95à¥\8dà¤\9bनà¥\8d र तपाà¤\88à¤\82 प्रवन्धक
हैन ।
- 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: तपाà¤\88à¤\81 भूमिका `%{role}' , `%{name} प्रोगकर्ताबाट फिर्ता लिने कुरामा
+ are_you_sure: तपाà¤\88à¤\82 भूमिका `%{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: निश्चित हुनुहुन्छ ?
...
reef: Estèu
ridge: Cresta
rock: Ròca
+ saddle: Sèla
sand: Sabla
scree: Esbudèl
scrub: Boissa
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'
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:
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
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
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: © <a href='%{copyright_url}'>Contributors d'OpenStreetMap</a>
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
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
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
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ę
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}
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
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
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
# Author: Komzpa
# Author: Lockal
# Author: Macofe
+# Author: Mavl
# Author: MaxSem
# Author: Mechano
# Author: Mixaill
# Author: Yuri Nazarov
# Author: Zverik
# Author: Александр Сигачёв
+# Author: Владимир К
# Author: Дмитрий
# Author: Сrower
---
closed: Закрыто
created_html: Создано <abbr title='%{title}'>%{time} назад</abbr>
closed_html: Закрыто <abbr title='%{title}'>%{time} назад</abbr>
- created_by_html: Создано <abbr title='%{title}'>%{time} назад</abbr> пользовталем
+ created_by_html: Создано <abbr title='%{title}'>%{time} назад</abbr> пользователем
%{user}
deleted_by_html: Удалено <abbr title='%{title}'>%{time} назад</abbr> пользователем
%{user}
changeset: пакета правок
note: примечание
redacted:
- redaction: РедакÑ\86иÑ\8f %{id}
- message_html: Версия %{version} этого объекта вырезана и не может быть отображена.
- Смотрите %{redaction_link} для дополнительной информации.
+ redaction: Ð\98Ñ\81пÑ\80авление %{id}
+ message_html: Версия %{version} этого объекта (%{type}) скрыта и не может быть
+ оÑ\82обÑ\80ажена. Ð\9fожалÑ\83йÑ\81Ñ\82а, Ñ\81мотрите %{redaction_link} для дополнительной информации.
type:
node: точка
way: линия
Отметка недалеко от %{place}.'
details: Подробнее о заметке %{url}.
changeset_comment_notification:
+ hi: Привет, %{to_user},
greeting: Привет,
commented:
subject_own: '[OpenStreetMap] %{commenter} прокомментировал один из ваших
partial_changeset_with_comment: с комментарием '%{changeset_comment}'
partial_changeset_without_comment: без комментария
details: Дополнительные сведения о пакете правок можно найти на %{url}.
+ unsubscribe: Чтобы отписаться от обновлений этого пакета правок посетите %{url}
+ и нажмите кнопку "Отписаться".
message:
inbox:
title: Входящие
require_moderator:
not_a_moderator: Чтобы выполнить это действие, нужно быть модератором.
setup_user_auth:
+ blocked_zero_hour: У вас есть срочное сообщение на сайте OpenStreetMap. Вам
+ нужно прочитать сообщение, прежде чем вы сможете сохранить ваши изменения.
blocked: Ваш доступ к API заблокирован. Пожалуйста, войдите через веб-интерфейсе,
чтобы узнать подробности.
need_to_see_terms: Ваш доступ к API временно приостановлен. Пожалуйста войдите
allow_write_prefs: изменять ваши настройки на сайте
allow_write_diary: создавать дневниковые записи, комментарии, заводить друзей
allow_write_api: изменять данные
- allow_read_gpx: читать ваши <a herf="https://wiki.openstreetmap.org/wiki/RU:%D0%92%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C_GPS-%D1%82%D1%80%D0%B5%D0%BA%D0%BE%D0%B2">частные
- GPS-треки</a>
+ allow_read_gpx: читать ваши частные GPS-треки
allow_write_gpx: передавать GPS-треки на сервер
allow_write_notes: изменять заметки
grant_access: Предоставить доступ
revoke:
administrator: Отозвать права администратора
moderator: Отозвать права модератора
- block_history: Ð\90кÑ\82ивнÑ\8bе Ð\91локи
- moderator_history: созданные блокировки
+ block_history: Ð\90кÑ\82ивнÑ\8bе блокиÑ\80овки
+ moderator_history: Созданные блокировки
comments: Комментарии
- create_block: Ð\91локиÑ\80оваÑ\82Ñ\8c Ñ\83Ñ\87аÑ\81Ñ\82ника
- activate_user: акÑ\82ивиÑ\80оваÑ\82Ñ\8c пользователя
- deactivate_user: деакÑ\82ивиÑ\80оваÑ\82Ñ\8c пользователя
- confirm_user: подÑ\82веÑ\80диÑ\82Ñ\8c пользователя
- hide_user: скрыть пользователя
- unhide_user: оÑ\82обÑ\80азиÑ\82Ñ\8c пользователя
- delete_user: удалить пользователя
+ create_block: Ð\91локиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82ого полÑ\8cзоваÑ\82елÑ\8f
+ activate_user: Ð\90кÑ\82ивиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82ого пользователя
+ deactivate_user: Ð\94еакÑ\82ивиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82ого пользователя
+ confirm_user: Ð\9fодÑ\82веÑ\80диÑ\82Ñ\8c Ñ\8dÑ\82ого пользователя
+ hide_user: Скрыть этого пользователя
+ unhide_user: Ð\9eÑ\82обÑ\80азиÑ\82Ñ\8c Ñ\8dÑ\82ого пользователя
+ delete_user: Удалить этого пользователя
confirm: Подтвердить
friends_changesets: наборы правок друзей
friends_diaries: дневники друзей
проверьте, что пользователь и роль являются допустимыми.
user_block:
model:
- non_moderator_update: Ð\9dÑ\83жно бÑ\8bÑ\82Ñ\8c модеÑ\80аÑ\82оÑ\80ом, Ñ\87Ñ\82обÑ\8b Ñ\81оздаÑ\82Ñ\8c или измениÑ\82Ñ\8c блокиÑ\80ование.
- non_moderator_revoke: Ð\9dÑ\83жно бÑ\8bÑ\82Ñ\8c модеÑ\80аÑ\82оÑ\80ом, Ñ\87Ñ\82обÑ\8b Ñ\81нÑ\8fÑ\82Ñ\8c блокиÑ\80ование.
+ non_moderator_update: Ð\9dÑ\83жно бÑ\8bÑ\82Ñ\8c модеÑ\80аÑ\82оÑ\80ом, Ñ\87Ñ\82обÑ\8b Ñ\81оздаÑ\82Ñ\8c или измениÑ\82Ñ\8c блокиÑ\80овкÑ\83.
+ non_moderator_revoke: Ð\9dÑ\83жно бÑ\8bÑ\82Ñ\8c модеÑ\80аÑ\82оÑ\80ом, Ñ\87Ñ\82обÑ\8b Ñ\81нÑ\8fÑ\82Ñ\8c блокиÑ\80овкÑ\83.
not_found:
- sorry: Ð\98звиниÑ\82е, блокиÑ\80ование полÑ\8cзоваÑ\82елÑ\8f Ñ\81 ID %{id} не найдено.
+ sorry: Ð\98звиниÑ\82е, блокиÑ\80овка полÑ\8cзоваÑ\82елÑ\8f Ñ\81 ID %{id} не найдена.
back: Вернуться к индексу
new:
- title: Создание блокиÑ\80ованиÑ\8f для пользователя %{name}
- heading: Создание блокиÑ\80ованиÑ\8f для пользователя %{name}
- reason: Ð\9eбÑ\8aÑ\8fÑ\81ниÑ\82е, поÑ\87емÑ\83 %{name} бÑ\8bл заблокиÑ\80ован. Ð\9fожалÑ\83йÑ\81Ñ\82а, бÑ\83дÑ\8cÑ\82е Ñ\82еÑ\80пимÑ\8b
- и поступайте разумно, предоставляя пользователю, как можно больше информации
- о пÑ\80иÑ\87инаÑ\85 блокиÑ\80ованиÑ\8f, помнÑ\8f, Ñ\87Ñ\82о Ñ\81ообÑ\89ение бÑ\83деÑ\82 видно вÑ\81ем. Ð\9fомниÑ\82е, Ñ\87Ñ\82о
- не вÑ\81е полÑ\8cзоваÑ\82ели понимаÑ\8eÑ\82 жаÑ\80гон, поÑ\82омÑ\83 полÑ\8cзÑ\83йÑ\82еÑ\81Ñ\8c пÑ\80и обÑ\8aÑ\8fÑ\81нении дилеÑ\82анÑ\82Ñ\81ким
- языком.
+ title: Создание блокиÑ\80овки для пользователя %{name}
+ heading: Создание блокиÑ\80овки для пользователя %{name}
+ reason: Ð\9fÑ\80иÑ\87ина, по коÑ\82оÑ\80ой блокиÑ\80Ñ\83еÑ\82Ñ\81Ñ\8f полÑ\8cзоваÑ\82елÑ\8c %{name}. Ð\9fожалÑ\83йÑ\81Ñ\82а, бÑ\83дÑ\8cÑ\82е
+ спокойны и разумны насколько это возможно. Предоставьте пользователю как можно
+ болÑ\8cÑ\88е инÑ\84оÑ\80маÑ\86ии о пÑ\80иÑ\87инаÑ\85 блокиÑ\80овки, помнÑ\8f, Ñ\87Ñ\82о Ñ\81ообÑ\89ение бÑ\83деÑ\82 видно
+ вÑ\81ем. Ð\98мейÑ\82е в видÑ\83, Ñ\87Ñ\82о не вÑ\81е полÑ\8cзоваÑ\82ели понимаÑ\8eÑ\82 жаÑ\80гон Ñ\81ообÑ\89еÑ\81Ñ\82ва, поÑ\8dÑ\82омÑ\83
+ попробуйте использовать дилетантские понятия.
period: Как долго, начиная с этого момента, пользователь будет заблокирован
от API.
- submit: СоздаÑ\82Ñ\8c блокиÑ\80ование
+ submit: СоздаÑ\82Ñ\8c блокиÑ\80овкÑ\83
tried_contacting: Я связывался с пользователем и просил его остановиться.
tried_waiting: Я дал достаточно времени пользователю, чтобы он отреагировал
на те сообщения.
- needs_view: Ð\9fолÑ\8cзоваÑ\82елÑ\8e необÑ\85одимо войÑ\82и в Ñ\81иÑ\81Ñ\82емÑ\83 до Ñ\82ого, как Ñ\8dÑ\82о блокиÑ\80ование
- будет очищено
- back: Ð\9fоказаÑ\82Ñ\8c вÑ\81е блокиÑ\80ованиÑ\8f
+ needs_view: Ð\9fолÑ\8cзоваÑ\82елÑ\8e необÑ\85одимо войÑ\82и в Ñ\81иÑ\81Ñ\82емÑ\83 до Ñ\82ого, как Ñ\8dÑ\82а блокиÑ\80овка
+ будет снята
+ back: Ð\9fоказаÑ\82Ñ\8c вÑ\81е блокиÑ\80овки
edit:
- title: Ð\9fÑ\80авка блокиÑ\80ованиÑ\8f пользователя %{name}
- heading: Ð\9fÑ\80авка блокиÑ\80ованиÑ\8f пользователя %{name}
+ title: Ð\9fÑ\80авка блокиÑ\80овки пользователя %{name}
+ heading: Ð\9fÑ\80авка блокиÑ\80овки пользователя %{name}
reason: Объясните, почему %{name} был заблокирован. Пожалуйста, будьте терпимы
и поступайте разумно, предоставляя пользователю, как можно больше информации
о ситуации. Помните, что не все пользователи понимают жаргон, потому пользуйтесь
при объяснении дилетантским языком.
period: На какой срок, начиная с этого момента, заблокировать пользователя от
API.
- submit: Ð\9eбновиÑ\82Ñ\8c блокиÑ\80ование
+ submit: Ð\9eбновиÑ\82Ñ\8c блокиÑ\80овкÑ\83
show: Просмотреть эту блокировку
- back: Ð\9fÑ\80оÑ\81моÑ\82Ñ\80еÑ\82Ñ\8c вÑ\81е блокиÑ\80ованиÑ\8f
- needs_view: Ð\9fозволиÑ\82Ñ\8c ли полÑ\8cзоваÑ\82елÑ\8e вÑ\85одиÑ\82Ñ\8c в Ñ\81иÑ\81Ñ\82емÑ\83, пÑ\80ежде, Ñ\87ем блокиÑ\80ование
- бÑ\83деÑ\82 Ñ\81нÑ\8fÑ\82о?
+ back: Ð\9fÑ\80оÑ\81моÑ\82Ñ\80еÑ\82Ñ\8c вÑ\81е блокиÑ\80овки
+ needs_view: Ð\9fозволиÑ\82Ñ\8c ли полÑ\8cзоваÑ\82елÑ\8e вÑ\85одиÑ\82Ñ\8c в Ñ\81иÑ\81Ñ\82емÑ\83, пÑ\80ежде, Ñ\87ем блокиÑ\80овка
+ бÑ\83деÑ\82 Ñ\81нÑ\8fÑ\82а?
filter:
- block_expired: Ð\91локиÑ\80ование Ñ\83же законÑ\87илоÑ\81Ñ\8c и не можеÑ\82 бÑ\8bÑ\82Ñ\8c оÑ\82Ñ\80едакÑ\82иÑ\80овано.
- block_period: Ð\92Ñ\80емÑ\8f блокиÑ\80ованиÑ\8f должно бÑ\8bÑ\82Ñ\8c вÑ\8bбÑ\80ано из знаÑ\87ений, Ñ\80взвоÑ\80аÑ\87иваÑ\8eÑ\89егоÑ\81Ñ\8f
- списка.
+ block_expired: Ð\91локиÑ\80овка Ñ\83же законÑ\87илаÑ\81Ñ\8c и не можеÑ\82 бÑ\8bÑ\82Ñ\8c оÑ\82Ñ\80едакÑ\82иÑ\80ована.
+ block_period: Ð\9fеÑ\80иод блокиÑ\80овки должен бÑ\8bÑ\82Ñ\8c одним из знаÑ\87ений, вÑ\8bбиÑ\80аемÑ\8bÑ\85 из
+ выпадающего списка.
create:
try_contacting: Пожалуйста, перед блокировкой пользователя попробуйте связаться
с ним и дать ему разумное время для ответа.
- try_waiting: Пожалуйста, дайте пользователю разумное время для ответа, перед
+ try_waiting: Пожалуйста, дайте пользователю разумное время для ответа перед
тем, как блокировать его.
- flash: Ð\97аблокиÑ\80ован полÑ\8cзоваÑ\82елÑ\8c %{name}.
+ flash: Создана блокиÑ\80овка длÑ\8f полÑ\8cзоваÑ\82елÑ\8f %{name}.
update:
- only_creator_can_edit: Только модератор, который создал это блокирование, может
- править его.
- success: Ð\91локиÑ\80ование обновлено.
+ only_creator_can_edit: Только модератор, который создал эту блокировку, может
+ править её.
+ success: Ð\91локиÑ\80овка обновлена.
index:
- title: Блокировки участника
- heading: СпиÑ\81ок блокиÑ\80ований полÑ\8cзоваÑ\82елÑ\8f
- empty: Ð\91локиÑ\80ованиÑ\8f ещё не были созданы.
+ title: Блокировки пользователей
+ heading: СпиÑ\81ок блокиÑ\80овок полÑ\8cзоваÑ\82елей
+ empty: Ð\91локиÑ\80овки ещё не были созданы.
revoke:
- title: СнÑ\8fÑ\82Ñ\8c блокиÑ\80ование длÑ\8f %{block_on}
- heading: Ð\9eÑ\82мена блокиÑ\80ованиÑ\8f длÑ\8f полÑ\8cзоваÑ\82елÑ\8f %{block_on}, коÑ\82оÑ\80ое создал %{block_by}
- time_future: ÐÑ\82о блокиÑ\80ование законÑ\87иÑ\82Ñ\81Ñ\8f %{time}.
- past: ÐÑ\82о блокиÑ\80ование законÑ\87илоÑ\81Ñ\8c %{time} назад и Ñ\83же не можеÑ\82 бÑ\8bÑ\82Ñ\8c оÑ\82менено.
- confirm: Вы уверены, что хотите снять это блокирование?
- revoke: СнÑ\8fÑ\82Ñ\8c блокиÑ\80ование!
- flash: ÐÑ\82о блокиÑ\80ование бÑ\8bло Ñ\81нÑ\8fÑ\82о.
+ title: СнÑ\8fÑ\82Ñ\8c блокиÑ\80овкÑ\83 длÑ\8f %{block_on}
+ heading: Ð\9eÑ\82мена блокиÑ\80овки длÑ\8f полÑ\8cзоваÑ\82елÑ\8f %{block_on}, коÑ\82оÑ\80Ñ\83Ñ\8e создал %{block_by}
+ time_future: ÐÑ\82а блокиÑ\80овка законÑ\87иÑ\82Ñ\81Ñ\8f Ñ\87еÑ\80ез %{time}.
+ past: ÐÑ\82а блокиÑ\80овка законÑ\87илаÑ\81Ñ\8c %{time} назад и Ñ\83же не можеÑ\82 бÑ\8bÑ\82Ñ\8c оÑ\82менена.
+ confirm: Вы уверены, что хотите снять эту блокировку?
+ revoke: СнÑ\8fÑ\82Ñ\8c блокиÑ\80овкÑ\83!
+ flash: ÐÑ\82а блокиÑ\80овка бÑ\8bла Ñ\81нÑ\8fÑ\82а.
period:
one: 1 час
other: '%{count} час.'
confirm: Вы уверены?
display_name: Заблокированный пользователь
creator_name: Автор
- reason: Ð\9fÑ\80иÑ\87ина блокиÑ\80ованиÑ\8f
+ reason: Ð\9fÑ\80иÑ\87ина блокиÑ\80овки
status: Состояние
revoker_name: Разблокировал
not_revoked: (не разблокирован)
next: Следующая →
previous: ← Предыдущая
helper:
- time_future: Заканчивается в %{time}.
+ time_future: Заканчивается через %{time}.
until_login: Активно до тех пор, пока пользователь не войдёт в систему.
+ time_future_and_until_login: Заканчивается через %{time} и после того, как пользователь
+ вошел в систему.
time_past: Закончилось %{time} назад.
blocks_on:
- title: Ð\91локиÑ\80ованиÑ\8f для %{name}
- heading: СпиÑ\81ок блокиÑ\80ований пользователя %{name}
+ title: Ð\91локиÑ\80овки для %{name}
+ heading: СпиÑ\81ок блокиÑ\80овок пользователя %{name}
empty: ' %{name} ни разу не был заблокирован.'
blocks_by:
- title: Ð\91локиÑ\80ованиÑ\8f, коÑ\82оÑ\80Ñ\8bе Ñ\81делал
- heading: СпиÑ\81ок блокиÑ\80ований, коÑ\82оÑ\80Ñ\8bе Ñ\81делал
+ title: Ð\91локиÑ\80овки, коÑ\82оÑ\80Ñ\8bе Ñ\81оздал %{name}
+ heading: СпиÑ\81ок блокиÑ\80овок, коÑ\82оÑ\80Ñ\8bе Ñ\81оздал %{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} назад'
header: Слои карты
notes: Заметки
data: Просмотр данных карты
+ gps: Общедоступные GPS-треки
overlays: Дополнительные слои для устранения неисправностей карты
title: Слои
copyright: © <a href='%{copyright_url}'>Участники OpenStreetMap</a>
no_place: К сожалению, данное место не найдено.
instructions:
continue_without_exit: Продолжите по %{name}
- slight_right_without_exit: Слегка направо на %{name}
+ slight_right_without_exit: Ð\9fлавнÑ\8bй повоÑ\80оÑ\82 направо на %{name}
offramp_right_without_exit: Используйте съезд вправо на %{name}
onramp_right_without_exit: Поверните направо на съезде на %{name}
endofroad_right_without_exit: В конце дороги поверните направо на %{name}
endofroad_left_without_exit: В конце дороги поверните налево на %{name}
merge_left_without_exit: Перестройтесь налево на %{name}
fork_left_without_exit: На развилке поверните налево на %{name}
- slight_left_without_exit: Слегка влево на %{name}
+ slight_left_without_exit: Ð\9fлавнÑ\8bй повоÑ\80оÑ\82 налево на %{name}
via_point_without_exit: (через точку)
follow_without_exit: Следуйте %{name}
roundabout_without_exit: На развязке сверните к %{name}
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}
nothing_found: Объектов поблизости нет
error: 'Ошибка связи с %{server}: %{error}'
timeout: Тайм-аут обращения к %{server}
+ context:
+ directions_from: Маршрут отсюда
+ directions_to: Маршрут сюда
+ add_note: Добавить заметку сюда
+ show_address: Показать адрес
+ query_features: Информация об объектах
+ centre_map: Центрировать карту
redaction:
edit:
description: Описание
heading: Отображение исправления «%{title}»
title: Отображение исправления
user: 'Создано:'
- edit: РедакÑ\82иÑ\80овать это исправление
+ edit: Ð\9fÑ\80авить это исправление
destroy: Удалить это исправление
confirm: Вы уверены?
create:
- flash: РедакÑ\86иÑ\8f Ñ\81оздана.
+ flash: Ð\98Ñ\81пÑ\80авление Ñ\81оздано.
update:
flash: Изменения сохранены.
destroy:
- not_empty: РедакÑ\86иÑ\8f не пÑ\83Ñ\81Ñ\82а. Ð\9fожалÑ\83йÑ\81Ñ\82а, оÑ\82каÑ\82иÑ\82е вÑ\81е веÑ\80Ñ\81ии, пÑ\80инадлежаÑ\89ие
- к Ñ\8dÑ\82ой Ñ\80едакÑ\86ии перед удалением.
- flash: РедакÑ\86иÑ\8f Ñ\83ниÑ\87Ñ\82ожена.
- error: Ð\9fÑ\80оизоÑ\88ла оÑ\88ибка пÑ\80и Ñ\83ниÑ\87Ñ\82ожении Ñ\8dÑ\82ой Ñ\80едакÑ\86ии.
+ not_empty: Ð\98Ñ\81пÑ\80авление не пÑ\83Ñ\81Ñ\82о. Ð\9fожалÑ\83йÑ\81Ñ\82а, оÑ\82мениÑ\82е Ñ\81кÑ\80Ñ\8bÑ\82ие вÑ\81еÑ\85 веÑ\80Ñ\81ий обÑ\8aекÑ\82ов,
+ пÑ\80инадлежаÑ\89иÑ\85 к Ñ\8dÑ\82омÑ\83 иÑ\81пÑ\80авлениÑ\8e перед удалением.
+ flash: Ð\98Ñ\81пÑ\80авление Ñ\83ниÑ\87Ñ\82ожено.
+ error: Ð\9fÑ\80оизоÑ\88ла оÑ\88ибка пÑ\80и Ñ\83ниÑ\87Ñ\82ожении Ñ\8dÑ\82ого иÑ\81пÑ\80авлениÑ\8f.
...
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
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:
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}'
saved_at: Shranjen
user: Uporabnik
comment: Komentar
- area: Področje
+ area: Območje
list:
title: Paketi sprememb
title_user: Paketi sprememb uporabnika %{user}
Data Commons Open Database License</a> (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
ferry_terminal: Trajekt
fire_hydrant: Hidrant
fire_station: Gasilska postaja
+ food_court: Prehrambeni prostor
fountain: Vodomet
fuel: Bencinska črpalka
gambling: Igre na srečo
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
emergency:
ambulance_station: Reševalna postaja
defibrillator: Defibrilator
+ landing_site: Mesto za pristanek v sili
phone: Klic v sili
highway:
abandoned: Opuščena cesta
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
city_gate: Mestna vrata
citywalls: Mestno obzidje
fort: Trdnjava
+ heritage: Kulturna dediščina
house: Hiša
icon: Ikona
manor: Graščina
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
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
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
beach: Obala
cape: Rt
cave_entrance: Vhod v jamo
- cliff: Klif
+ cliff: Pečina
crater: Krater
dune: Peščina
fell: Planina
forest: Gozd
geyser: Gejzir
glacier: Ledenik
+ grassland: Pašnik
heath: Ravnina
hill: Hrib
island: Otok
"yes": Pisarne
place:
allotments: Vrtički
+ block: Blok
airport: Letališče
city: Mesto
country: Država
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:
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
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
node_html: <strong>Vozlišče</strong> je točka na zemljevidu, kot npr. restavracija
ali drevo.
way_html: <strong>Pot</strong> je črta ali področje, kot je npr. cesta, potok,
- jezero ali stavba.
+ jezero ali zgradba.
tag_html: <strong>Oznaka</strong> 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: |-
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:
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
- Mestna železnica
- tramvaj
cable:
- - Kabinska žičnica
+ - Nihalka
- sedežnica
runway:
- Vzletno-pristajalna steza
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
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.
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
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
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
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:
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}
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
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
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
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.
...
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
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'
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
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
discussion: చర్చ
node:
title: 'బిందువు: %{name}'
+ way:
+ title: 'దారి: %{name}'
+ history_title: 'దారి చరిత్ర: %{name}'
relation:
title: 'సంబంధం: %{name}'
history_title: 'సంబంధపు చరిత్ర: %{name}'
house: ఇల్లు
houses: ఇళ్ళు
island: దీవి
+ postcode: తపాలా సంకేతం
+ region: ప్రాంతం
sea: సముద్రం
state: రాష్ట్రం
subdivision: ఉపవిభాగం
title: ఈ పుట గురించి
legal_babble:
title_html: కాపీహక్కులు మరియు లైసెన్సు
+ attribution_example:
+ title: ఆపాదింపు ఉదాహరణ
+ more_title_html: మరింత తెలుసుకోవడం
infringement_title_html: కాపీహక్కుల ఉల్లంఘన
+ trademarks_title_html: <span id="trademarks"></span>ట్రేడుమార్కులు
welcome_page:
title: స్వాగతం!
whats_on_the_map:
title: పటంలో ఏముంది
+ rules:
+ title: నియమాలు!
questions:
title: సందేహాలున్నాయా?
add_a_note:
click_the_link: అది మీరే అయితే, మార్పుని నిర్ధారించడానికి ఈ క్రింది లంకెను నొక్కండి.
note_comment_notification:
anonymous: అజ్ఞాత వాడుకరి
+ changeset_comment_notification:
+ hi: '%{to_user} గారూ,'
message:
inbox:
my_inbox: నా ఇన్బాక్స్
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: వివరణ
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
# Export driver: phpyaml
# Author: Alerque
# Author: Alpkant
+# Author: Archaeodontosaurus
# Author: Captantrips
# Author: Emperyan
# Author: Erdemaslancan
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
title: Forumlar
irc:
title: IRC
+ switch2osm:
+ title: switch2osm
wiki:
url: http://wiki.openstreetmap.org/
title: wiki.openstreetmap.org
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
private: Özel giriş
destination: Hedef noktası
construction: yapım aşamasında yolu
+ toilets: Tuvaletler
richtext_area:
edit: Düzenle
preview: Ön izle
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
біля %{place}.'
details: Докладніше про нотатку %{url}.
changeset_comment_notification:
+ hi: Привіт %{to_user},
greeting: Привіт,
commented:
subject_own: '[OpenStreetMap] %{commenter} прокоментував один з ваших наборів
details: |2-
Більше деталей про зміни, які можуть бути знайдені в %{url}.
+ unsubscribe: Щоб відписатися від оновлень за цим набором змін, перейдіть за
+ посиланням %{url} й натисніть кнопку „Відписатись“.
message:
inbox:
title: Вхідні
require_moderator:
not_a_moderator: Ви повинні бути модератором для виконання цієї дії.
setup_user_auth:
+ blocked_zero_hour: У вас є нагальне повідомлення на веб-сайті OpenStreetMap.
+ Вам потрібно прочитати повідомлення, перш ніж ви зможете зберегти ваші зміни.
blocked: Ваш доступ до API заблоковано. Будь ласка, увійдіть через веб-інтерфейс,
щоб дізнатися подробиці.
need_to_see_terms: Ваш доступ до API тимчасово призупинено. Будь ласка, увійдіть
helper:
time_future: До закінчення %{time}.
until_login: Активне до тих пір, доки користувач не увійде в систему.
+ time_future_and_until_login: Закінчується через %{time} і після входу користувача
+ в систему.
time_past: Закінчилось %{time} тому.
blocks_on:
title: Блокування для %{name}
nothing_found: Об’єкти не знайдені
error: 'Помилка зв’язку %{server}: %{error}'
timeout: Сервер не відповідає %{server}
+ context:
+ directions_from: Маршрут звідси
+ directions_to: Маршрут сюди
+ add_note: Додати тут нотатку
+ show_address: Показати адресу
+ query_features: Отримати об’єкти
+ centre_map: Центрувати мапу тут
redaction:
edit:
description: Опис
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
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
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}
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ả
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。
require_moderator:
not_a_moderator: 必须为管理员才能执行该操作。
setup_user_auth:
+ blocked_zero_hour: 您在OpenStreetMap网站有一条紧急消息。在您可以保存您的编辑之前,您需要阅读这条消息。
blocked: 您对 API 的访问已经被阻挡了。请登录到网站以了解更多信息。
need_to_see_terms: 您对 API 的访问已暂时中止。请登录到网站以查看贡献者条款。您不需要同意,但必须查看它们。
oauth:
helper:
time_future: 结束于 %{time}。
until_login: 用户登录时激活。
+ time_future_and_until_login: 结束于%{time},并在用户登录之后。
time_past: 结束于 %{time} 前。
blocks_on:
title: 对 %{name} 的封禁
nothing_found: 没有找到特征
error: 连接 %{server} 时出错:%{error}
timeout: 连接 %{server} 超时
+ context:
+ directions_from: 从这里的指示
+ directions_to: 到这里的指示
+ add_note: 在此添加注释
+ show_address: 显示地址
+ query_features: 查询特征
+ centre_map: 中心地图在此
redaction:
edit:
description: 说明
require_moderator:
not_a_moderator: 您需要是管理人員,才可執行該動作。
setup_user_auth:
+ blocked_zero_hour: 您在OpenStreetMap網站有一個緊急訊息。在您儲存您的編輯內容前請先閱讀該訊息。
blocked: 您已經被封鎖使用 API。請登入網頁介面以瞭解更多資訊。
need_to_see_terms: 我們已暫時中止您使用 API 的權限,請登入網頁介面查閱貢獻者條款,您不需要同意有關條款,但必須查閱它們。
oauth:
helper:
time_future: 於 %{time} 結束。
until_login: 生效直至這個使用者登入為止。
+ time_future_and_until_login: 在用戶已登入後結束於%{time}。
time_past: 於 %{time} 之前結束。
blocks_on:
title: 對 %{name} 的封鎖
nothing_found: 找不到圖徵
error: '%{server} 連線錯誤:%{error}'
timeout: '%{server} 連線逾時'
+ context:
+ directions_from: 從這裡的路線
+ directions_to: 到這裡的路線
+ add_note: 在此添加註釋
+ show_address: 顯示地址
+ query_features: 查詢圖徵
+ centre_map: 中央地圖在此
redaction:
edit:
description: 說明
--- /dev/null
+class AddUserIndexes < ActiveRecord::Migration
+ def change
+ add_index :oauth_tokens, [:user_id]
+ add_index :client_applications, [:user_id]
+ end
+end
-- 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;
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: -
--
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: -
--
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');
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
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
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
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
require "test_helper"
class DiaryEntryControllerTest < ActionController::TestCase
- fixtures :users, :user_roles
-
include ActionView::Helpers::NumberHelper
def setup
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
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
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
# 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
# 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(" ")
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
# 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
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
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
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
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
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(" ")
# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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\?})
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
# 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
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
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
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
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
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)
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)
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)
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)
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
# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
# 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
# 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]
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))
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" }
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)
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)
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
# 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
# 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
# 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
# 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
# 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
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
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
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
# 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
# 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
# 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
# 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
# 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
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
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
# 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]
# 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]
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
# 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]
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
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
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
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
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
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
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
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
# FIXME: needs changeset factory
changeset_id 3
- # FIXME: needs user factory
- author_id 1
+ association :author, :factory => :user
end
end
sequence(:body) { |n| "This is diary comment #{n}" }
diary_entry
-
- # Fixme requires User Factory
- user_id 1
+ user
end
end
sequence(:title) { |n| "Diary entry #{n}" }
sequence(:body) { |n| "This is diary entry #{n}" }
- # Fixme requires User Factory
- user_id 1
+ user
end
end
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
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
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
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) }
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
sequence(:k) { |n| "Key #{n}" }
sequence(:v) { |n| "Value #{n}" }
- # FIXME: needs user factory
- user_id 1
+ user
end
end
--- /dev/null
+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 <span title=".*">about 1 hour</span> 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 <span title=".*">about 1 hour</span>\.$}, block_status(block)
+ end
+end
require "test_helper"
class DiaryCommentTest < ActiveSupport::TestCase
- fixtures :users
-
def setup
# Create the default language for diary entries
create(:language, :code => "en")
require "test_helper"
class DiaryEntryTest < ActiveSupport::TestCase
- fixtures :users
-
def setup
# Create the default language for diary entries
create(:language, :code => "en")
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
--- /dev/null
+.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;
+}
--- /dev/null
+/*
+ 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 = '<img class="' + L.Map.ContextMenu.BASE_CLS + '-icon" src="' + icon + '"/>';
+ } else if (iconCls) {
+ html = '<span class="' + L.Map.ContextMenu.BASE_CLS + '-icon ' + iconCls + '"></span>';
+ }
+
+ 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;
+});