From: Tom Hughes Date: Thu, 5 Jan 2012 20:15:53 +0000 (+0000) Subject: Merge branch 'master' into openstreetbugs X-Git-Tag: live~5148^2~126 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/52e5fa6ad78f375cec5a207a123a4aa3939c8ddf?hp=0030c7753740820fab12455dd841cd39c58b6475 Merge branch 'master' into openstreetbugs Conflicts: app/views/browse/_map.html.erb app/views/site/index.html.erb config/initializers/mime_types.rb config/routes.rb lib/map_boundary.rb lib/migrate.rb lib/osm.rb vendor/assets/openlayers/OpenLayers.js --- diff --git a/.gitignore b/.gitignore index 18e616bf6..2b8b7bd68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ log +public/assets tmp .DS_Store diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..08dafa0cc --- /dev/null +++ b/Gemfile @@ -0,0 +1,52 @@ +# Gem source to use +source 'http://rubygems.org' + +# Require rails +gem 'rails', '3.1.3' + +# Require the postgres database driver +gem 'pg' + +# Load jquery support +gem 'jquery-rails' + +# Load rails plugins +gem 'rails-i18n-updater' +gem 'dynamic_form' +gem 'rinku', '>= 1.2.2', :require => 'rails_rinku' +gem 'oauth-plugin', '>= 0.4.0.pre7' +gem 'open_id_authentication', '>= 1.1.0' +gem 'validates_email_format_of', '>= 1.5.1' +gem 'composite_primary_keys', '>= 4.1.1' + +# Load libxml support for XML parsing and generation +gem 'libxml-ruby', '>= 2.0.5', :require => 'libxml' + +# Load ImageMagick support for user picture resizing +gem 'rmagick', :require => 'RMagick' + +# Load HTML sanitizer +gem 'sanitize' + +# Load SystemTimer for implementing request timeouts +gem 'SystemTimer', '>= 1.1.3', :require => 'system_timer', :platforms => :ruby_18 + +# Load httpclient for SOAP support for Quova GeoIP queries +gem 'httpclient' + +# Load memcache in case we are using it +gem 'memcache-client' +gem 'memcached' + +# Gems needed for running tests +group :test do + gem 'timecop' +end + +# Gems needed for compiling assets +group :assets do + gem 'sass-rails', " ~> 3.1.0" + gem 'coffee-rails', "~> 3.1.0" + gem 'uglifier' + gem 'therubyracer' +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..3343161f9 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,173 @@ +GEM + remote: http://rubygems.org/ + specs: + SystemTimer (1.2.3) + actionmailer (3.1.3) + actionpack (= 3.1.3) + mail (~> 2.3.0) + actionpack (3.1.3) + activemodel (= 3.1.3) + activesupport (= 3.1.3) + builder (~> 3.0.0) + erubis (~> 2.7.0) + i18n (~> 0.6) + rack (~> 1.3.5) + rack-cache (~> 1.1) + rack-mount (~> 0.8.2) + rack-test (~> 0.6.1) + sprockets (~> 2.0.3) + activemodel (3.1.3) + activesupport (= 3.1.3) + builder (~> 3.0.0) + i18n (~> 0.6) + activerecord (3.1.3) + activemodel (= 3.1.3) + activesupport (= 3.1.3) + arel (~> 2.2.1) + tzinfo (~> 0.3.29) + activeresource (3.1.3) + activemodel (= 3.1.3) + activesupport (= 3.1.3) + activesupport (3.1.3) + multi_json (~> 1.0) + addressable (2.2.6) + arel (2.2.1) + builder (3.0.0) + coffee-rails (3.1.1) + coffee-script (>= 2.2.0) + railties (~> 3.1.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.1.3) + composite_primary_keys (4.1.1) + activerecord (~> 3.1) + dynamic_form (1.1.4) + erubis (2.7.0) + execjs (1.2.9) + multi_json (~> 1.0) + faraday (0.7.5) + addressable (~> 2.2.6) + multipart-post (~> 1.1.3) + rack (< 2, >= 1.1.0) + hike (1.2.1) + httpclient (2.2.3) + i18n (0.6.0) + jquery-rails (1.0.18) + railties (~> 3.0) + thor (~> 0.14) + json (1.6.1) + libv8 (3.3.10.4) + libxml-ruby (2.2.2) + mail (2.3.0) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + memcache-client (1.8.5) + memcached (1.3.5) + mime-types (1.17.2) + multi_json (1.0.3) + multipart-post (1.1.3) + nokogiri (1.5.0) + oauth (0.4.5) + oauth-plugin (0.4.0.rc2) + multi_json + oauth (~> 0.4.4) + oauth2 + rack + oauth2 (0.5.1) + faraday (~> 0.7.4) + multi_json (~> 1.0.3) + open_id_authentication (1.1.0) + rack-openid (~> 1.3) + pg (0.11.0) + polyglot (0.3.3) + rack (1.3.5) + rack-cache (1.1) + rack (>= 0.4) + rack-mount (0.8.3) + rack (>= 1.0.0) + rack-openid (1.3.1) + rack (>= 1.1.0) + ruby-openid (>= 2.1.8) + rack-ssl (1.3.2) + rack + rack-test (0.6.1) + rack (>= 1.0) + rails (3.1.3) + actionmailer (= 3.1.3) + actionpack (= 3.1.3) + activerecord (= 3.1.3) + activeresource (= 3.1.3) + activesupport (= 3.1.3) + bundler (~> 1.0) + railties (= 3.1.3) + rails-i18n-updater (1.0.1) + actionpack + activesupport + rails + railties (3.1.3) + actionpack (= 3.1.3) + activesupport (= 3.1.3) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (~> 0.14.6) + rake (0.9.2.2) + rdoc (3.11) + json (~> 1.4) + rinku (1.4.1) + rmagick (2.13.1) + ruby-openid (2.1.8) + sanitize (2.0.3) + nokogiri (< 1.6, >= 1.4.4) + sass (3.1.10) + sass-rails (3.1.5) + actionpack (~> 3.1.0) + railties (~> 3.1.0) + sass (~> 3.1.10) + tilt (~> 1.3.2) + sprockets (2.0.3) + hike (~> 1.2) + rack (~> 1.0) + tilt (!= 1.3.0, ~> 1.1) + therubyracer (0.9.9) + libv8 (~> 3.3.10) + thor (0.14.6) + tilt (1.3.3) + timecop (0.3.5) + treetop (1.4.10) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.31) + uglifier (1.1.0) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) + validates_email_format_of (1.5.3) + +PLATFORMS + ruby + +DEPENDENCIES + SystemTimer (>= 1.1.3) + coffee-rails (~> 3.1.0) + composite_primary_keys (>= 4.1.1) + dynamic_form + httpclient + jquery-rails + libxml-ruby (>= 2.0.5) + memcache-client + memcached + oauth-plugin (>= 0.4.0.pre7) + open_id_authentication (>= 1.1.0) + pg + rails (= 3.1.3) + rails-i18n-updater + rinku (>= 1.2.2) + rmagick + sanitize + sass-rails (~> 3.1.0) + therubyracer + timecop + uglifier + validates_email_format_of (>= 1.5.1) diff --git a/Rakefile b/Rakefile index 3bb0e8592..039e38f47 100644 --- a/Rakefile +++ b/Rakefile @@ -1,10 +1,7 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. -require(File.join(File.dirname(__FILE__), 'config', 'boot')) - +require File.expand_path('../config/application', __FILE__) require 'rake' -require 'rake/testtask' -require 'rake/rdoctask' -require 'tasks/rails' +OpenStreetMap::Application.load_tasks diff --git a/public/images/RSS.gif b/app/assets/images/RSS.gif similarity index 100% rename from public/images/RSS.gif rename to app/assets/images/RSS.gif diff --git a/public/images/anon_large.png b/app/assets/images/anon_large.png similarity index 100% rename from public/images/anon_large.png rename to app/assets/images/anon_large.png diff --git a/public/images/anon_small.png b/app/assets/images/anon_small.png similarity index 100% rename from public/images/anon_small.png rename to app/assets/images/anon_small.png diff --git a/public/images/aol.png b/app/assets/images/aol.png similarity index 100% rename from public/images/aol.png rename to app/assets/images/aol.png diff --git a/public/images/arrow.png b/app/assets/images/arrow.png similarity index 100% rename from public/images/arrow.png rename to app/assets/images/arrow.png diff --git a/public/images/browse/allotments.png b/app/assets/images/browse/allotments.png similarity index 100% rename from public/images/browse/allotments.png rename to app/assets/images/browse/allotments.png diff --git a/public/images/browse/alpinehut.p.16.png b/app/assets/images/browse/alpinehut.p.16.png similarity index 100% rename from public/images/browse/alpinehut.p.16.png rename to app/assets/images/browse/alpinehut.p.16.png diff --git a/public/images/browse/atm2.p.16.png b/app/assets/images/browse/atm2.p.16.png similarity index 100% rename from public/images/browse/atm2.p.16.png rename to app/assets/images/browse/atm2.p.16.png diff --git a/public/images/browse/bank2.p.16.png b/app/assets/images/browse/bank2.p.16.png similarity index 100% rename from public/images/browse/bank2.p.16.png rename to app/assets/images/browse/bank2.p.16.png diff --git a/public/images/browse/bar.p.16.png b/app/assets/images/browse/bar.p.16.png similarity index 100% rename from public/images/browse/bar.p.16.png rename to app/assets/images/browse/bar.p.16.png diff --git a/public/images/browse/bridge.20.png b/app/assets/images/browse/bridge.20.png similarity index 100% rename from public/images/browse/bridge.20.png rename to app/assets/images/browse/bridge.20.png diff --git a/public/images/browse/bridleway.20.png b/app/assets/images/browse/bridleway.20.png similarity index 100% rename from public/images/browse/bridleway.20.png rename to app/assets/images/browse/bridleway.20.png diff --git a/public/images/browse/brownfield.png b/app/assets/images/browse/brownfield.png similarity index 100% rename from public/images/browse/brownfield.png rename to app/assets/images/browse/brownfield.png diff --git a/public/images/browse/building.png b/app/assets/images/browse/building.png similarity index 100% rename from public/images/browse/building.png rename to app/assets/images/browse/building.png diff --git a/public/images/browse/bus_station.n.16.png b/app/assets/images/browse/bus_station.n.16.png similarity index 100% rename from public/images/browse/bus_station.n.16.png rename to app/assets/images/browse/bus_station.n.16.png diff --git a/public/images/browse/bus_stop.p.16.png b/app/assets/images/browse/bus_stop.p.16.png similarity index 100% rename from public/images/browse/bus_stop.p.16.png rename to app/assets/images/browse/bus_stop.p.16.png diff --git a/public/images/browse/byway.20.png b/app/assets/images/browse/byway.20.png similarity index 100% rename from public/images/browse/byway.20.png rename to app/assets/images/browse/byway.20.png diff --git a/public/images/browse/cafe.p.16.png b/app/assets/images/browse/cafe.p.16.png similarity index 100% rename from public/images/browse/cafe.p.16.png rename to app/assets/images/browse/cafe.p.16.png diff --git a/public/images/browse/camping.n.16.png b/app/assets/images/browse/camping.n.16.png similarity index 100% rename from public/images/browse/camping.n.16.png rename to app/assets/images/browse/camping.n.16.png diff --git a/public/images/browse/car_share.p.16.png b/app/assets/images/browse/car_share.p.16.png similarity index 100% rename from public/images/browse/car_share.p.16.png rename to app/assets/images/browse/car_share.p.16.png diff --git a/public/images/browse/caravan_park.p.24.png b/app/assets/images/browse/caravan_park.p.24.png similarity index 100% rename from public/images/browse/caravan_park.p.24.png rename to app/assets/images/browse/caravan_park.p.24.png diff --git a/public/images/browse/cemetery.png b/app/assets/images/browse/cemetery.png similarity index 100% rename from public/images/browse/cemetery.png rename to app/assets/images/browse/cemetery.png diff --git a/public/images/browse/centre.png b/app/assets/images/browse/centre.png similarity index 100% rename from public/images/browse/centre.png rename to app/assets/images/browse/centre.png diff --git a/public/images/browse/cinema.p.16.png b/app/assets/images/browse/cinema.p.16.png similarity index 100% rename from public/images/browse/cinema.p.16.png rename to app/assets/images/browse/cinema.p.16.png diff --git a/public/images/browse/commercial.png b/app/assets/images/browse/commercial.png similarity index 100% rename from public/images/browse/commercial.png rename to app/assets/images/browse/commercial.png diff --git a/public/images/browse/common.png b/app/assets/images/browse/common.png similarity index 100% rename from public/images/browse/common.png rename to app/assets/images/browse/common.png diff --git a/public/images/browse/cycleway.20.png b/app/assets/images/browse/cycleway.20.png similarity index 100% rename from public/images/browse/cycleway.20.png rename to app/assets/images/browse/cycleway.20.png diff --git a/public/images/browse/drinkingtap.p.16.png b/app/assets/images/browse/drinkingtap.p.16.png similarity index 100% rename from public/images/browse/drinkingtap.p.16.png rename to app/assets/images/browse/drinkingtap.p.16.png diff --git a/public/images/browse/education_nursery.p.16.png b/app/assets/images/browse/education_nursery.p.16.png similarity index 100% rename from public/images/browse/education_nursery.p.16.png rename to app/assets/images/browse/education_nursery.p.16.png diff --git a/public/images/browse/education_school.p.16.png b/app/assets/images/browse/education_school.p.16.png similarity index 100% rename from public/images/browse/education_school.p.16.png rename to app/assets/images/browse/education_school.p.16.png diff --git a/public/images/browse/education_university.p.16.png b/app/assets/images/browse/education_university.p.16.png similarity index 100% rename from public/images/browse/education_university.p.16.png rename to app/assets/images/browse/education_university.p.16.png diff --git a/public/images/browse/farm.png b/app/assets/images/browse/farm.png similarity index 100% rename from public/images/browse/farm.png rename to app/assets/images/browse/farm.png diff --git a/public/images/browse/fast_food.p.16.png b/app/assets/images/browse/fast_food.p.16.png similarity index 100% rename from public/images/browse/fast_food.p.16.png rename to app/assets/images/browse/fast_food.p.16.png diff --git a/public/images/browse/firestation.p.16.png b/app/assets/images/browse/firestation.p.16.png similarity index 100% rename from public/images/browse/firestation.p.16.png rename to app/assets/images/browse/firestation.p.16.png diff --git a/public/images/browse/footway.20.png b/app/assets/images/browse/footway.20.png similarity index 100% rename from public/images/browse/footway.20.png rename to app/assets/images/browse/footway.20.png diff --git a/public/images/browse/forest.png b/app/assets/images/browse/forest.png similarity index 100% rename from public/images/browse/forest.png rename to app/assets/images/browse/forest.png diff --git a/public/images/browse/fuel.p.16.png b/app/assets/images/browse/fuel.p.16.png similarity index 100% rename from public/images/browse/fuel.p.16.png rename to app/assets/images/browse/fuel.p.16.png diff --git a/public/images/browse/gate2.p.16.png b/app/assets/images/browse/gate2.p.16.png similarity index 100% rename from public/images/browse/gate2.p.16.png rename to app/assets/images/browse/gate2.p.16.png diff --git a/public/images/browse/golf.png b/app/assets/images/browse/golf.png similarity index 100% rename from public/images/browse/golf.png rename to app/assets/images/browse/golf.png diff --git a/public/images/browse/halt.p.16.png b/app/assets/images/browse/halt.p.16.png similarity index 100% rename from public/images/browse/halt.p.16.png rename to app/assets/images/browse/halt.p.16.png diff --git a/public/images/browse/health_dentist.p.16.png b/app/assets/images/browse/health_dentist.p.16.png similarity index 100% rename from public/images/browse/health_dentist.p.16.png rename to app/assets/images/browse/health_dentist.p.16.png diff --git a/public/images/browse/health_doctors.p.16.png b/app/assets/images/browse/health_doctors.p.16.png similarity index 100% rename from public/images/browse/health_doctors.p.16.png rename to app/assets/images/browse/health_doctors.p.16.png diff --git a/public/images/browse/health_opticians.p.16.png b/app/assets/images/browse/health_opticians.p.16.png similarity index 100% rename from public/images/browse/health_opticians.p.16.png rename to app/assets/images/browse/health_opticians.p.16.png diff --git a/public/images/browse/health_veterinary.p.16.png b/app/assets/images/browse/health_veterinary.p.16.png similarity index 100% rename from public/images/browse/health_veterinary.p.16.png rename to app/assets/images/browse/health_veterinary.p.16.png diff --git a/public/images/browse/heathland.png b/app/assets/images/browse/heathland.png similarity index 100% rename from public/images/browse/heathland.png rename to app/assets/images/browse/heathland.png diff --git a/public/images/browse/hospital.p.16.png b/app/assets/images/browse/hospital.p.16.png similarity index 100% rename from public/images/browse/hospital.p.16.png rename to app/assets/images/browse/hospital.p.16.png diff --git a/public/images/browse/hostel.p.16.png b/app/assets/images/browse/hostel.p.16.png similarity index 100% rename from public/images/browse/hostel.p.16.png rename to app/assets/images/browse/hostel.p.16.png diff --git a/public/images/browse/hotel.p.16.png b/app/assets/images/browse/hotel.p.16.png similarity index 100% rename from public/images/browse/hotel.p.16.png rename to app/assets/images/browse/hotel.p.16.png diff --git a/public/images/browse/industrial.png b/app/assets/images/browse/industrial.png similarity index 100% rename from public/images/browse/industrial.png rename to app/assets/images/browse/industrial.png diff --git a/public/images/browse/lake.png b/app/assets/images/browse/lake.png similarity index 100% rename from public/images/browse/lake.png rename to app/assets/images/browse/lake.png diff --git a/public/images/browse/level_crossing.p.16.png b/app/assets/images/browse/level_crossing.p.16.png similarity index 100% rename from public/images/browse/level_crossing.p.16.png rename to app/assets/images/browse/level_crossing.p.16.png diff --git a/public/images/browse/library.p.16.png b/app/assets/images/browse/library.p.16.png similarity index 100% rename from public/images/browse/library.p.16.png rename to app/assets/images/browse/library.p.16.png diff --git a/public/images/browse/light_rail.20.png b/app/assets/images/browse/light_rail.20.png similarity index 100% rename from public/images/browse/light_rail.20.png rename to app/assets/images/browse/light_rail.20.png diff --git a/public/images/browse/lighthouse.p.16.png b/app/assets/images/browse/lighthouse.p.16.png similarity index 100% rename from public/images/browse/lighthouse.p.16.png rename to app/assets/images/browse/lighthouse.p.16.png diff --git a/public/images/browse/military.png b/app/assets/images/browse/military.png similarity index 100% rename from public/images/browse/military.png rename to app/assets/images/browse/military.png diff --git a/public/images/browse/mini_round.p.16.png b/app/assets/images/browse/mini_round.p.16.png similarity index 100% rename from public/images/browse/mini_round.p.16.png rename to app/assets/images/browse/mini_round.p.16.png diff --git a/public/images/browse/motorway.20.png b/app/assets/images/browse/motorway.20.png similarity index 100% rename from public/images/browse/motorway.20.png rename to app/assets/images/browse/motorway.20.png diff --git a/public/images/browse/museum.p.16.png b/app/assets/images/browse/museum.p.16.png similarity index 100% rename from public/images/browse/museum.p.16.png rename to app/assets/images/browse/museum.p.16.png diff --git a/public/images/browse/park.png b/app/assets/images/browse/park.png similarity index 100% rename from public/images/browse/park.png rename to app/assets/images/browse/park.png diff --git a/public/images/browse/parking.p.16.png b/app/assets/images/browse/parking.p.16.png similarity index 100% rename from public/images/browse/parking.p.16.png rename to app/assets/images/browse/parking.p.16.png diff --git a/public/images/browse/pharmacy.p.16.png b/app/assets/images/browse/pharmacy.p.16.png similarity index 100% rename from public/images/browse/pharmacy.p.16.png rename to app/assets/images/browse/pharmacy.p.16.png diff --git a/public/images/browse/pitch.png b/app/assets/images/browse/pitch.png similarity index 100% rename from public/images/browse/pitch.png rename to app/assets/images/browse/pitch.png diff --git a/public/images/browse/place_of_worship.png b/app/assets/images/browse/place_of_worship.png similarity index 100% rename from public/images/browse/place_of_worship.png rename to app/assets/images/browse/place_of_worship.png diff --git a/public/images/browse/place_of_worship_unknown3.p.16.png b/app/assets/images/browse/place_of_worship_unknown3.p.16.png similarity index 100% rename from public/images/browse/place_of_worship_unknown3.p.16.png rename to app/assets/images/browse/place_of_worship_unknown3.p.16.png diff --git a/public/images/browse/police.p.16.png b/app/assets/images/browse/police.p.16.png similarity index 100% rename from public/images/browse/police.p.16.png rename to app/assets/images/browse/police.p.16.png diff --git a/public/images/browse/post_box.p.16.png b/app/assets/images/browse/post_box.p.16.png similarity index 100% rename from public/images/browse/post_box.p.16.png rename to app/assets/images/browse/post_box.p.16.png diff --git a/public/images/browse/post_office.p.16.png b/app/assets/images/browse/post_office.p.16.png similarity index 100% rename from public/images/browse/post_office.p.16.png rename to app/assets/images/browse/post_office.p.16.png diff --git a/public/images/browse/primary.20.png b/app/assets/images/browse/primary.20.png similarity index 100% rename from public/images/browse/primary.20.png rename to app/assets/images/browse/primary.20.png diff --git a/public/images/browse/prison.p.16.png b/app/assets/images/browse/prison.p.16.png similarity index 100% rename from public/images/browse/prison.p.16.png rename to app/assets/images/browse/prison.p.16.png diff --git a/public/images/browse/pub.p.16.png b/app/assets/images/browse/pub.p.16.png similarity index 100% rename from public/images/browse/pub.p.16.png rename to app/assets/images/browse/pub.p.16.png diff --git a/public/images/browse/rail.20.png b/app/assets/images/browse/rail.20.png similarity index 100% rename from public/images/browse/rail.20.png rename to app/assets/images/browse/rail.20.png diff --git a/public/images/browse/recycling.p.16.png b/app/assets/images/browse/recycling.p.16.png similarity index 100% rename from public/images/browse/recycling.p.16.png rename to app/assets/images/browse/recycling.p.16.png diff --git a/public/images/browse/reserve.png b/app/assets/images/browse/reserve.png similarity index 100% rename from public/images/browse/reserve.png rename to app/assets/images/browse/reserve.png diff --git a/public/images/browse/residential.png b/app/assets/images/browse/residential.png similarity index 100% rename from public/images/browse/residential.png rename to app/assets/images/browse/residential.png diff --git a/public/images/browse/restaurant.p.16.png b/app/assets/images/browse/restaurant.p.16.png similarity index 100% rename from public/images/browse/restaurant.p.16.png rename to app/assets/images/browse/restaurant.p.16.png diff --git a/public/images/browse/retail.png b/app/assets/images/browse/retail.png similarity index 100% rename from public/images/browse/retail.png rename to app/assets/images/browse/retail.png diff --git a/public/images/browse/runway.20.png b/app/assets/images/browse/runway.20.png similarity index 100% rename from public/images/browse/runway.20.png rename to app/assets/images/browse/runway.20.png diff --git a/public/images/browse/school.png b/app/assets/images/browse/school.png similarity index 100% rename from public/images/browse/school.png rename to app/assets/images/browse/school.png diff --git a/public/images/browse/secondary.20.png b/app/assets/images/browse/secondary.20.png similarity index 100% rename from public/images/browse/secondary.20.png rename to app/assets/images/browse/secondary.20.png diff --git a/public/images/browse/service.20.png b/app/assets/images/browse/service.20.png similarity index 100% rename from public/images/browse/service.20.png rename to app/assets/images/browse/service.20.png diff --git a/public/images/browse/shelter2.p.16.png b/app/assets/images/browse/shelter2.p.16.png similarity index 100% rename from public/images/browse/shelter2.p.16.png rename to app/assets/images/browse/shelter2.p.16.png diff --git a/public/images/browse/shop_bakery.p.16.png b/app/assets/images/browse/shop_bakery.p.16.png similarity index 100% rename from public/images/browse/shop_bakery.p.16.png rename to app/assets/images/browse/shop_bakery.p.16.png diff --git a/public/images/browse/shop_bicycle.p.16.png b/app/assets/images/browse/shop_bicycle.p.16.png similarity index 100% rename from public/images/browse/shop_bicycle.p.16.png rename to app/assets/images/browse/shop_bicycle.p.16.png diff --git a/public/images/browse/shop_books.p.16.png b/app/assets/images/browse/shop_books.p.16.png similarity index 100% rename from public/images/browse/shop_books.p.16.png rename to app/assets/images/browse/shop_books.p.16.png diff --git a/public/images/browse/shop_butcher.p.16.png b/app/assets/images/browse/shop_butcher.p.16.png similarity index 100% rename from public/images/browse/shop_butcher.p.16.png rename to app/assets/images/browse/shop_butcher.p.16.png diff --git a/public/images/browse/shop_clothes.p.16.png b/app/assets/images/browse/shop_clothes.p.16.png similarity index 100% rename from public/images/browse/shop_clothes.p.16.png rename to app/assets/images/browse/shop_clothes.p.16.png diff --git a/public/images/browse/shop_convenience.p.16.png b/app/assets/images/browse/shop_convenience.p.16.png similarity index 100% rename from public/images/browse/shop_convenience.p.16.png rename to app/assets/images/browse/shop_convenience.p.16.png diff --git a/public/images/browse/shop_diy.p.16.png b/app/assets/images/browse/shop_diy.p.16.png similarity index 100% rename from public/images/browse/shop_diy.p.16.png rename to app/assets/images/browse/shop_diy.p.16.png diff --git a/public/images/browse/shop_estateagent2.p.16.png b/app/assets/images/browse/shop_estateagent2.p.16.png similarity index 100% rename from public/images/browse/shop_estateagent2.p.16.png rename to app/assets/images/browse/shop_estateagent2.p.16.png diff --git a/public/images/browse/shop_fish.p.16.png b/app/assets/images/browse/shop_fish.p.16.png similarity index 100% rename from public/images/browse/shop_fish.p.16.png rename to app/assets/images/browse/shop_fish.p.16.png diff --git a/public/images/browse/shop_garden_centre.p.16.png b/app/assets/images/browse/shop_garden_centre.p.16.png similarity index 100% rename from public/images/browse/shop_garden_centre.p.16.png rename to app/assets/images/browse/shop_garden_centre.p.16.png diff --git a/public/images/browse/shop_gift.p.16.png b/app/assets/images/browse/shop_gift.p.16.png similarity index 100% rename from public/images/browse/shop_gift.p.16.png rename to app/assets/images/browse/shop_gift.p.16.png diff --git a/public/images/browse/shop_greengrocer.p.16.png b/app/assets/images/browse/shop_greengrocer.p.16.png similarity index 100% rename from public/images/browse/shop_greengrocer.p.16.png rename to app/assets/images/browse/shop_greengrocer.p.16.png diff --git a/public/images/browse/shop_hairdresser.p.16.png b/app/assets/images/browse/shop_hairdresser.p.16.png similarity index 100% rename from public/images/browse/shop_hairdresser.p.16.png rename to app/assets/images/browse/shop_hairdresser.p.16.png diff --git a/public/images/browse/shop_jewelry.p.16.png b/app/assets/images/browse/shop_jewelry.p.16.png similarity index 100% rename from public/images/browse/shop_jewelry.p.16.png rename to app/assets/images/browse/shop_jewelry.p.16.png diff --git a/public/images/browse/shop_supermarket.p.16.png b/app/assets/images/browse/shop_supermarket.p.16.png similarity index 100% rename from public/images/browse/shop_supermarket.p.16.png rename to app/assets/images/browse/shop_supermarket.p.16.png diff --git a/public/images/browse/station.p.16.png b/app/assets/images/browse/station.p.16.png similarity index 100% rename from public/images/browse/station.p.16.png rename to app/assets/images/browse/station.p.16.png diff --git a/public/images/browse/subway.20.png b/app/assets/images/browse/subway.20.png similarity index 100% rename from public/images/browse/subway.20.png rename to app/assets/images/browse/subway.20.png diff --git a/public/images/browse/taxiway.20.png b/app/assets/images/browse/taxiway.20.png similarity index 100% rename from public/images/browse/taxiway.20.png rename to app/assets/images/browse/taxiway.20.png diff --git a/public/images/browse/telephone.p.16.png b/app/assets/images/browse/telephone.p.16.png similarity index 100% rename from public/images/browse/telephone.p.16.png rename to app/assets/images/browse/telephone.p.16.png diff --git a/public/images/browse/theatre.p.16.png b/app/assets/images/browse/theatre.p.16.png similarity index 100% rename from public/images/browse/theatre.p.16.png rename to app/assets/images/browse/theatre.p.16.png diff --git a/public/images/browse/toilets.p.16.png b/app/assets/images/browse/toilets.p.16.png similarity index 100% rename from public/images/browse/toilets.p.16.png rename to app/assets/images/browse/toilets.p.16.png diff --git a/public/images/browse/tourist.png b/app/assets/images/browse/tourist.png similarity index 100% rename from public/images/browse/tourist.png rename to app/assets/images/browse/tourist.png diff --git a/public/images/browse/tourist_castle.p.16.png b/app/assets/images/browse/tourist_castle.p.16.png similarity index 100% rename from public/images/browse/tourist_castle.p.16.png rename to app/assets/images/browse/tourist_castle.p.16.png diff --git a/public/images/browse/tourist_memorial.p.16.png b/app/assets/images/browse/tourist_memorial.p.16.png similarity index 100% rename from public/images/browse/tourist_memorial.p.16.png rename to app/assets/images/browse/tourist_memorial.p.16.png diff --git a/public/images/browse/tourist_monument.p.16.png b/app/assets/images/browse/tourist_monument.p.16.png similarity index 100% rename from public/images/browse/tourist_monument.p.16.png rename to app/assets/images/browse/tourist_monument.p.16.png diff --git a/public/images/browse/tourist_picnic.p.16.png b/app/assets/images/browse/tourist_picnic.p.16.png similarity index 100% rename from public/images/browse/tourist_picnic.p.16.png rename to app/assets/images/browse/tourist_picnic.p.16.png diff --git a/public/images/browse/tourist_ruin.p.16.png b/app/assets/images/browse/tourist_ruin.p.16.png similarity index 100% rename from public/images/browse/tourist_ruin.p.16.png rename to app/assets/images/browse/tourist_ruin.p.16.png diff --git a/public/images/browse/tourist_windmill.p.16.png b/app/assets/images/browse/tourist_windmill.p.16.png similarity index 100% rename from public/images/browse/tourist_windmill.p.16.png rename to app/assets/images/browse/tourist_windmill.p.16.png diff --git a/public/images/browse/tourist_wreck.p.16.png b/app/assets/images/browse/tourist_wreck.p.16.png similarity index 100% rename from public/images/browse/tourist_wreck.p.16.png rename to app/assets/images/browse/tourist_wreck.p.16.png diff --git a/public/images/browse/traffic_light.png b/app/assets/images/browse/traffic_light.png similarity index 100% rename from public/images/browse/traffic_light.png rename to app/assets/images/browse/traffic_light.png diff --git a/public/images/browse/tram.20.png b/app/assets/images/browse/tram.20.png similarity index 100% rename from public/images/browse/tram.20.png rename to app/assets/images/browse/tram.20.png diff --git a/public/images/browse/transport_parking_bicycle.p.16.png b/app/assets/images/browse/transport_parking_bicycle.p.16.png similarity index 100% rename from public/images/browse/transport_parking_bicycle.p.16.png rename to app/assets/images/browse/transport_parking_bicycle.p.16.png diff --git a/public/images/browse/transport_rental_bicycle.p.16.png b/app/assets/images/browse/transport_rental_bicycle.p.16.png similarity index 100% rename from public/images/browse/transport_rental_bicycle.p.16.png rename to app/assets/images/browse/transport_rental_bicycle.p.16.png diff --git a/public/images/browse/transport_rental_car.p.16.png b/app/assets/images/browse/transport_rental_car.p.16.png similarity index 100% rename from public/images/browse/transport_rental_car.p.16.png rename to app/assets/images/browse/transport_rental_car.p.16.png diff --git a/public/images/browse/tree.p.16.png b/app/assets/images/browse/tree.p.16.png similarity index 100% rename from public/images/browse/tree.p.16.png rename to app/assets/images/browse/tree.p.16.png diff --git a/public/images/browse/trunk.20.png b/app/assets/images/browse/trunk.20.png similarity index 100% rename from public/images/browse/trunk.20.png rename to app/assets/images/browse/trunk.20.png diff --git a/public/images/browse/tunnel.20.png b/app/assets/images/browse/tunnel.20.png similarity index 100% rename from public/images/browse/tunnel.20.png rename to app/assets/images/browse/tunnel.20.png diff --git a/public/images/browse/turning_circle.p.16.png b/app/assets/images/browse/turning_circle.p.16.png similarity index 100% rename from public/images/browse/turning_circle.p.16.png rename to app/assets/images/browse/turning_circle.p.16.png diff --git a/public/images/browse/unclassified.20.png b/app/assets/images/browse/unclassified.20.png similarity index 100% rename from public/images/browse/unclassified.20.png rename to app/assets/images/browse/unclassified.20.png diff --git a/public/images/browse/view_point.p.16.png b/app/assets/images/browse/view_point.p.16.png similarity index 100% rename from public/images/browse/view_point.p.16.png rename to app/assets/images/browse/view_point.p.16.png diff --git a/public/images/browse/wood.png b/app/assets/images/browse/wood.png similarity index 100% rename from public/images/browse/wood.png rename to app/assets/images/browse/wood.png diff --git a/public/images/cc_button.png b/app/assets/images/cc_button.png similarity index 100% rename from public/images/cc_button.png rename to app/assets/images/cc_button.png diff --git a/public/favicon.ico b/app/assets/images/favicon.ico similarity index 100% rename from public/favicon.ico rename to app/assets/images/favicon.ico diff --git a/public/images/google.png b/app/assets/images/google.png similarity index 100% rename from public/images/google.png rename to app/assets/images/google.png diff --git a/public/images/key/mapnik/admin.png b/app/assets/images/key/mapnik/admin.png similarity index 100% rename from public/images/key/mapnik/admin.png rename to app/assets/images/key/mapnik/admin.png diff --git a/public/images/key/mapnik/allotments.png b/app/assets/images/key/mapnik/allotments.png similarity index 100% rename from public/images/key/mapnik/allotments.png rename to app/assets/images/key/mapnik/allotments.png diff --git a/public/images/key/mapnik/apron.png b/app/assets/images/key/mapnik/apron.png similarity index 100% rename from public/images/key/mapnik/apron.png rename to app/assets/images/key/mapnik/apron.png diff --git a/public/images/key/mapnik/bridge.png b/app/assets/images/key/mapnik/bridge.png similarity index 100% rename from public/images/key/mapnik/bridge.png rename to app/assets/images/key/mapnik/bridge.png diff --git a/public/images/key/mapnik/bridleway.png b/app/assets/images/key/mapnik/bridleway.png similarity index 100% rename from public/images/key/mapnik/bridleway.png rename to app/assets/images/key/mapnik/bridleway.png diff --git a/public/images/key/mapnik/brownfield.png b/app/assets/images/key/mapnik/brownfield.png similarity index 100% rename from public/images/key/mapnik/brownfield.png rename to app/assets/images/key/mapnik/brownfield.png diff --git a/public/images/key/mapnik/building.png b/app/assets/images/key/mapnik/building.png similarity index 100% rename from public/images/key/mapnik/building.png rename to app/assets/images/key/mapnik/building.png diff --git a/public/images/key/mapnik/byway.png b/app/assets/images/key/mapnik/byway.png similarity index 100% rename from public/images/key/mapnik/byway.png rename to app/assets/images/key/mapnik/byway.png diff --git a/public/images/key/mapnik/cable.png b/app/assets/images/key/mapnik/cable.png similarity index 100% rename from public/images/key/mapnik/cable.png rename to app/assets/images/key/mapnik/cable.png diff --git a/public/images/key/mapnik/cemetery.png b/app/assets/images/key/mapnik/cemetery.png similarity index 100% rename from public/images/key/mapnik/cemetery.png rename to app/assets/images/key/mapnik/cemetery.png diff --git a/public/images/key/mapnik/centre.png b/app/assets/images/key/mapnik/centre.png similarity index 100% rename from public/images/key/mapnik/centre.png rename to app/assets/images/key/mapnik/centre.png diff --git a/public/images/key/mapnik/commercial.png b/app/assets/images/key/mapnik/commercial.png similarity index 100% rename from public/images/key/mapnik/commercial.png rename to app/assets/images/key/mapnik/commercial.png diff --git a/public/images/key/mapnik/common.png b/app/assets/images/key/mapnik/common.png similarity index 100% rename from public/images/key/mapnik/common.png rename to app/assets/images/key/mapnik/common.png diff --git a/public/images/key/mapnik/construction.png b/app/assets/images/key/mapnik/construction.png similarity index 100% rename from public/images/key/mapnik/construction.png rename to app/assets/images/key/mapnik/construction.png diff --git a/public/images/key/mapnik/cycleway.png b/app/assets/images/key/mapnik/cycleway.png similarity index 100% rename from public/images/key/mapnik/cycleway.png rename to app/assets/images/key/mapnik/cycleway.png diff --git a/public/images/key/mapnik/destination.png b/app/assets/images/key/mapnik/destination.png similarity index 100% rename from public/images/key/mapnik/destination.png rename to app/assets/images/key/mapnik/destination.png diff --git a/public/images/key/mapnik/farm.png b/app/assets/images/key/mapnik/farm.png similarity index 100% rename from public/images/key/mapnik/farm.png rename to app/assets/images/key/mapnik/farm.png diff --git a/public/images/key/mapnik/footway.png b/app/assets/images/key/mapnik/footway.png similarity index 100% rename from public/images/key/mapnik/footway.png rename to app/assets/images/key/mapnik/footway.png diff --git a/public/images/key/mapnik/forest.png b/app/assets/images/key/mapnik/forest.png similarity index 100% rename from public/images/key/mapnik/forest.png rename to app/assets/images/key/mapnik/forest.png diff --git a/public/images/key/mapnik/golf.png b/app/assets/images/key/mapnik/golf.png similarity index 100% rename from public/images/key/mapnik/golf.png rename to app/assets/images/key/mapnik/golf.png diff --git a/public/images/key/mapnik/heathland.png b/app/assets/images/key/mapnik/heathland.png similarity index 100% rename from public/images/key/mapnik/heathland.png rename to app/assets/images/key/mapnik/heathland.png diff --git a/public/images/key/mapnik/industrial.png b/app/assets/images/key/mapnik/industrial.png similarity index 100% rename from public/images/key/mapnik/industrial.png rename to app/assets/images/key/mapnik/industrial.png diff --git a/public/images/key/mapnik/lake.png b/app/assets/images/key/mapnik/lake.png similarity index 100% rename from public/images/key/mapnik/lake.png rename to app/assets/images/key/mapnik/lake.png diff --git a/public/images/key/mapnik/military.png b/app/assets/images/key/mapnik/military.png similarity index 100% rename from public/images/key/mapnik/military.png rename to app/assets/images/key/mapnik/military.png diff --git a/public/images/key/mapnik/motorway.png b/app/assets/images/key/mapnik/motorway.png similarity index 100% rename from public/images/key/mapnik/motorway.png rename to app/assets/images/key/mapnik/motorway.png diff --git a/public/images/key/mapnik/park.png b/app/assets/images/key/mapnik/park.png similarity index 100% rename from public/images/key/mapnik/park.png rename to app/assets/images/key/mapnik/park.png diff --git a/public/images/key/mapnik/permissive.png b/app/assets/images/key/mapnik/permissive.png similarity index 100% rename from public/images/key/mapnik/permissive.png rename to app/assets/images/key/mapnik/permissive.png diff --git a/public/images/key/mapnik/pitch.png b/app/assets/images/key/mapnik/pitch.png similarity index 100% rename from public/images/key/mapnik/pitch.png rename to app/assets/images/key/mapnik/pitch.png diff --git a/public/images/key/mapnik/primary.png b/app/assets/images/key/mapnik/primary.png similarity index 100% rename from public/images/key/mapnik/primary.png rename to app/assets/images/key/mapnik/primary.png diff --git a/public/images/key/mapnik/primary12.png b/app/assets/images/key/mapnik/primary12.png similarity index 100% rename from public/images/key/mapnik/primary12.png rename to app/assets/images/key/mapnik/primary12.png diff --git a/public/images/key/mapnik/private.png b/app/assets/images/key/mapnik/private.png similarity index 100% rename from public/images/key/mapnik/private.png rename to app/assets/images/key/mapnik/private.png diff --git a/public/images/key/mapnik/rail.png b/app/assets/images/key/mapnik/rail.png similarity index 100% rename from public/images/key/mapnik/rail.png rename to app/assets/images/key/mapnik/rail.png diff --git a/public/images/key/mapnik/rail13.png b/app/assets/images/key/mapnik/rail13.png similarity index 100% rename from public/images/key/mapnik/rail13.png rename to app/assets/images/key/mapnik/rail13.png diff --git a/public/images/key/mapnik/reserve.png b/app/assets/images/key/mapnik/reserve.png similarity index 100% rename from public/images/key/mapnik/reserve.png rename to app/assets/images/key/mapnik/reserve.png diff --git a/public/images/key/mapnik/resident.png b/app/assets/images/key/mapnik/resident.png similarity index 100% rename from public/images/key/mapnik/resident.png rename to app/assets/images/key/mapnik/resident.png diff --git a/public/images/key/mapnik/retail.png b/app/assets/images/key/mapnik/retail.png similarity index 100% rename from public/images/key/mapnik/retail.png rename to app/assets/images/key/mapnik/retail.png diff --git a/public/images/key/mapnik/runway.png b/app/assets/images/key/mapnik/runway.png similarity index 100% rename from public/images/key/mapnik/runway.png rename to app/assets/images/key/mapnik/runway.png diff --git a/public/images/key/mapnik/school.png b/app/assets/images/key/mapnik/school.png similarity index 100% rename from public/images/key/mapnik/school.png rename to app/assets/images/key/mapnik/school.png diff --git a/public/images/key/mapnik/secondary.png b/app/assets/images/key/mapnik/secondary.png similarity index 100% rename from public/images/key/mapnik/secondary.png rename to app/assets/images/key/mapnik/secondary.png diff --git a/public/images/key/mapnik/secondary12.png b/app/assets/images/key/mapnik/secondary12.png similarity index 100% rename from public/images/key/mapnik/secondary12.png rename to app/assets/images/key/mapnik/secondary12.png diff --git a/public/images/key/mapnik/station.png b/app/assets/images/key/mapnik/station.png similarity index 100% rename from public/images/key/mapnik/station.png rename to app/assets/images/key/mapnik/station.png diff --git a/public/images/key/mapnik/subway.png b/app/assets/images/key/mapnik/subway.png similarity index 100% rename from public/images/key/mapnik/subway.png rename to app/assets/images/key/mapnik/subway.png diff --git a/public/images/key/mapnik/summit.png b/app/assets/images/key/mapnik/summit.png similarity index 100% rename from public/images/key/mapnik/summit.png rename to app/assets/images/key/mapnik/summit.png diff --git a/public/images/key/mapnik/tourist.png b/app/assets/images/key/mapnik/tourist.png similarity index 100% rename from public/images/key/mapnik/tourist.png rename to app/assets/images/key/mapnik/tourist.png diff --git a/public/images/key/mapnik/track.png b/app/assets/images/key/mapnik/track.png similarity index 100% rename from public/images/key/mapnik/track.png rename to app/assets/images/key/mapnik/track.png diff --git a/public/images/key/mapnik/tram.png b/app/assets/images/key/mapnik/tram.png similarity index 100% rename from public/images/key/mapnik/tram.png rename to app/assets/images/key/mapnik/tram.png diff --git a/public/images/key/mapnik/trunk.png b/app/assets/images/key/mapnik/trunk.png similarity index 100% rename from public/images/key/mapnik/trunk.png rename to app/assets/images/key/mapnik/trunk.png diff --git a/public/images/key/mapnik/trunk12.png b/app/assets/images/key/mapnik/trunk12.png similarity index 100% rename from public/images/key/mapnik/trunk12.png rename to app/assets/images/key/mapnik/trunk12.png diff --git a/public/images/key/mapnik/tunnel.png b/app/assets/images/key/mapnik/tunnel.png similarity index 100% rename from public/images/key/mapnik/tunnel.png rename to app/assets/images/key/mapnik/tunnel.png diff --git a/public/images/key/mapnik/unclassified.png b/app/assets/images/key/mapnik/unclassified.png similarity index 100% rename from public/images/key/mapnik/unclassified.png rename to app/assets/images/key/mapnik/unclassified.png diff --git a/public/images/key/mapnik/unclassified13.png b/app/assets/images/key/mapnik/unclassified13.png similarity index 100% rename from public/images/key/mapnik/unclassified13.png rename to app/assets/images/key/mapnik/unclassified13.png diff --git a/public/images/key/mapnik/unsurfaced.png b/app/assets/images/key/mapnik/unsurfaced.png similarity index 100% rename from public/images/key/mapnik/unsurfaced.png rename to app/assets/images/key/mapnik/unsurfaced.png diff --git a/public/images/key/mapnik/wood.png b/app/assets/images/key/mapnik/wood.png similarity index 100% rename from public/images/key/mapnik/wood.png rename to app/assets/images/key/mapnik/wood.png diff --git a/public/images/key/osmarender/admin.png b/app/assets/images/key/osmarender/admin.png similarity index 100% rename from public/images/key/osmarender/admin.png rename to app/assets/images/key/osmarender/admin.png diff --git a/public/images/key/osmarender/allotments.png b/app/assets/images/key/osmarender/allotments.png similarity index 100% rename from public/images/key/osmarender/allotments.png rename to app/assets/images/key/osmarender/allotments.png diff --git a/public/images/key/osmarender/bridleway.png b/app/assets/images/key/osmarender/bridleway.png similarity index 100% rename from public/images/key/osmarender/bridleway.png rename to app/assets/images/key/osmarender/bridleway.png diff --git a/public/images/key/osmarender/brownfield.png b/app/assets/images/key/osmarender/brownfield.png similarity index 100% rename from public/images/key/osmarender/brownfield.png rename to app/assets/images/key/osmarender/brownfield.png diff --git a/public/images/key/osmarender/building.png b/app/assets/images/key/osmarender/building.png similarity index 100% rename from public/images/key/osmarender/building.png rename to app/assets/images/key/osmarender/building.png diff --git a/public/images/key/osmarender/byway.png b/app/assets/images/key/osmarender/byway.png similarity index 100% rename from public/images/key/osmarender/byway.png rename to app/assets/images/key/osmarender/byway.png diff --git a/public/images/key/osmarender/cemetery.png b/app/assets/images/key/osmarender/cemetery.png similarity index 100% rename from public/images/key/osmarender/cemetery.png rename to app/assets/images/key/osmarender/cemetery.png diff --git a/public/images/key/osmarender/centre.png b/app/assets/images/key/osmarender/centre.png similarity index 100% rename from public/images/key/osmarender/centre.png rename to app/assets/images/key/osmarender/centre.png diff --git a/public/images/key/osmarender/commercial.png b/app/assets/images/key/osmarender/commercial.png similarity index 100% rename from public/images/key/osmarender/commercial.png rename to app/assets/images/key/osmarender/commercial.png diff --git a/public/images/key/osmarender/common.png b/app/assets/images/key/osmarender/common.png similarity index 100% rename from public/images/key/osmarender/common.png rename to app/assets/images/key/osmarender/common.png diff --git a/public/images/key/osmarender/cycleway.png b/app/assets/images/key/osmarender/cycleway.png similarity index 100% rename from public/images/key/osmarender/cycleway.png rename to app/assets/images/key/osmarender/cycleway.png diff --git a/public/images/key/osmarender/farm.png b/app/assets/images/key/osmarender/farm.png similarity index 100% rename from public/images/key/osmarender/farm.png rename to app/assets/images/key/osmarender/farm.png diff --git a/public/images/key/osmarender/footway.png b/app/assets/images/key/osmarender/footway.png similarity index 100% rename from public/images/key/osmarender/footway.png rename to app/assets/images/key/osmarender/footway.png diff --git a/public/images/key/osmarender/forest.png b/app/assets/images/key/osmarender/forest.png similarity index 100% rename from public/images/key/osmarender/forest.png rename to app/assets/images/key/osmarender/forest.png diff --git a/public/images/key/osmarender/heathland.png b/app/assets/images/key/osmarender/heathland.png similarity index 100% rename from public/images/key/osmarender/heathland.png rename to app/assets/images/key/osmarender/heathland.png diff --git a/public/images/key/osmarender/industrial.png b/app/assets/images/key/osmarender/industrial.png similarity index 100% rename from public/images/key/osmarender/industrial.png rename to app/assets/images/key/osmarender/industrial.png diff --git a/public/images/key/osmarender/lake.png b/app/assets/images/key/osmarender/lake.png similarity index 100% rename from public/images/key/osmarender/lake.png rename to app/assets/images/key/osmarender/lake.png diff --git a/public/images/key/osmarender/mapkey.png b/app/assets/images/key/osmarender/mapkey.png similarity index 100% rename from public/images/key/osmarender/mapkey.png rename to app/assets/images/key/osmarender/mapkey.png diff --git a/public/images/key/osmarender/military.png b/app/assets/images/key/osmarender/military.png similarity index 100% rename from public/images/key/osmarender/military.png rename to app/assets/images/key/osmarender/military.png diff --git a/public/images/key/osmarender/motorway.png b/app/assets/images/key/osmarender/motorway.png similarity index 100% rename from public/images/key/osmarender/motorway.png rename to app/assets/images/key/osmarender/motorway.png diff --git a/public/images/key/osmarender/park.png b/app/assets/images/key/osmarender/park.png similarity index 100% rename from public/images/key/osmarender/park.png rename to app/assets/images/key/osmarender/park.png diff --git a/public/images/key/osmarender/pitch.png b/app/assets/images/key/osmarender/pitch.png similarity index 100% rename from public/images/key/osmarender/pitch.png rename to app/assets/images/key/osmarender/pitch.png diff --git a/public/images/key/osmarender/primary.png b/app/assets/images/key/osmarender/primary.png similarity index 100% rename from public/images/key/osmarender/primary.png rename to app/assets/images/key/osmarender/primary.png diff --git a/public/images/key/osmarender/rail.png b/app/assets/images/key/osmarender/rail.png similarity index 100% rename from public/images/key/osmarender/rail.png rename to app/assets/images/key/osmarender/rail.png diff --git a/public/images/key/osmarender/reserve.png b/app/assets/images/key/osmarender/reserve.png similarity index 100% rename from public/images/key/osmarender/reserve.png rename to app/assets/images/key/osmarender/reserve.png diff --git a/public/images/key/osmarender/resident.png b/app/assets/images/key/osmarender/resident.png similarity index 100% rename from public/images/key/osmarender/resident.png rename to app/assets/images/key/osmarender/resident.png diff --git a/public/images/key/osmarender/retail.png b/app/assets/images/key/osmarender/retail.png similarity index 100% rename from public/images/key/osmarender/retail.png rename to app/assets/images/key/osmarender/retail.png diff --git a/public/images/key/osmarender/school.png b/app/assets/images/key/osmarender/school.png similarity index 100% rename from public/images/key/osmarender/school.png rename to app/assets/images/key/osmarender/school.png diff --git a/public/images/key/osmarender/secondary.png b/app/assets/images/key/osmarender/secondary.png similarity index 100% rename from public/images/key/osmarender/secondary.png rename to app/assets/images/key/osmarender/secondary.png diff --git a/public/images/key/osmarender/station.png b/app/assets/images/key/osmarender/station.png similarity index 100% rename from public/images/key/osmarender/station.png rename to app/assets/images/key/osmarender/station.png diff --git a/public/images/key/osmarender/subway.png b/app/assets/images/key/osmarender/subway.png similarity index 100% rename from public/images/key/osmarender/subway.png rename to app/assets/images/key/osmarender/subway.png diff --git a/public/images/key/osmarender/summit.png b/app/assets/images/key/osmarender/summit.png similarity index 100% rename from public/images/key/osmarender/summit.png rename to app/assets/images/key/osmarender/summit.png diff --git a/public/images/key/osmarender/tourist.png b/app/assets/images/key/osmarender/tourist.png similarity index 100% rename from public/images/key/osmarender/tourist.png rename to app/assets/images/key/osmarender/tourist.png diff --git a/public/images/key/osmarender/track.png b/app/assets/images/key/osmarender/track.png similarity index 100% rename from public/images/key/osmarender/track.png rename to app/assets/images/key/osmarender/track.png diff --git a/public/images/key/osmarender/tram.png b/app/assets/images/key/osmarender/tram.png similarity index 100% rename from public/images/key/osmarender/tram.png rename to app/assets/images/key/osmarender/tram.png diff --git a/public/images/key/osmarender/trunk.png b/app/assets/images/key/osmarender/trunk.png similarity index 100% rename from public/images/key/osmarender/trunk.png rename to app/assets/images/key/osmarender/trunk.png diff --git a/public/images/key/osmarender/unsurfaced.png b/app/assets/images/key/osmarender/unsurfaced.png similarity index 100% rename from public/images/key/osmarender/unsurfaced.png rename to app/assets/images/key/osmarender/unsurfaced.png diff --git a/public/images/key/osmarender/wood.png b/app/assets/images/key/osmarender/wood.png similarity index 100% rename from public/images/key/osmarender/wood.png rename to app/assets/images/key/osmarender/wood.png diff --git a/public/images/mag_map-rss2.0.png b/app/assets/images/mag_map-rss2.0.png similarity index 100% rename from public/images/mag_map-rss2.0.png rename to app/assets/images/mag_map-rss2.0.png diff --git a/public/images/map_zoomin.png b/app/assets/images/map_zoomin.png similarity index 100% rename from public/images/map_zoomin.png rename to app/assets/images/map_zoomin.png diff --git a/public/images/map_zoomout.png b/app/assets/images/map_zoomout.png similarity index 100% rename from public/images/map_zoomout.png rename to app/assets/images/map_zoomout.png diff --git a/public/images/myopenid.png b/app/assets/images/myopenid.png similarity index 100% rename from public/images/myopenid.png rename to app/assets/images/myopenid.png diff --git a/public/images/new.png b/app/assets/images/new.png similarity index 100% rename from public/images/new.png rename to app/assets/images/new.png diff --git a/public/images/openid.png b/app/assets/images/openid.png similarity index 100% rename from public/images/openid.png rename to app/assets/images/openid.png diff --git a/public/images/openid_input.png b/app/assets/images/openid_input.png similarity index 100% rename from public/images/openid_input.png rename to app/assets/images/openid_input.png diff --git a/public/images/openid_small.png b/app/assets/images/openid_small.png similarity index 100% rename from public/images/openid_small.png rename to app/assets/images/openid_small.png diff --git a/public/images/osm_logo.png b/app/assets/images/osm_logo.png similarity index 100% rename from public/images/osm_logo.png rename to app/assets/images/osm_logo.png diff --git a/public/images/osm_logo.svg b/app/assets/images/osm_logo.svg similarity index 100% rename from public/images/osm_logo.svg rename to app/assets/images/osm_logo.svg diff --git a/public/images/roles/administrator.png b/app/assets/images/roles/administrator.png similarity index 100% rename from public/images/roles/administrator.png rename to app/assets/images/roles/administrator.png diff --git a/public/images/roles/blank_administrator.png b/app/assets/images/roles/blank_administrator.png similarity index 100% rename from public/images/roles/blank_administrator.png rename to app/assets/images/roles/blank_administrator.png diff --git a/public/images/roles/blank_moderator.png b/app/assets/images/roles/blank_moderator.png similarity index 100% rename from public/images/roles/blank_moderator.png rename to app/assets/images/roles/blank_moderator.png diff --git a/public/images/roles/moderator.png b/app/assets/images/roles/moderator.png similarity index 100% rename from public/images/roles/moderator.png rename to app/assets/images/roles/moderator.png diff --git a/public/images/searching.gif b/app/assets/images/searching.gif similarity index 100% rename from public/images/searching.gif rename to app/assets/images/searching.gif diff --git a/public/images/sotm.png b/app/assets/images/sotm.png similarity index 100% rename from public/images/sotm.png rename to app/assets/images/sotm.png diff --git a/public/images/tab_bottom.gif b/app/assets/images/tab_bottom.gif similarity index 100% rename from public/images/tab_bottom.gif rename to app/assets/images/tab_bottom.gif diff --git a/public/images/wordpress.png b/app/assets/images/wordpress.png similarity index 100% rename from public/images/wordpress.png rename to app/assets/images/wordpress.png diff --git a/public/images/yahoo.png b/app/assets/images/yahoo.png similarity index 100% rename from public/images/yahoo.png rename to app/assets/images/yahoo.png diff --git a/public/javascripts/map.js b/app/assets/javascripts/map.js.erb similarity index 83% rename from public/javascripts/map.js rename to app/assets/javascripts/map.js.erb index 58950a1ff..acfa10822 100644 --- a/public/javascripts/map.js +++ b/app/assets/javascripts/map.js.erb @@ -4,15 +4,6 @@ var markers; var vectors; var popup; -var nonamekeys = { - 'openstreetmap.org': '2f59745a6b525b4ebdb100891d5b6711', - 'www.openstreetmap.org': 'fd093e52f0965d46bb1c6c6281022199', - 'openstreetmap.com': '4c60e7f5f31c576a9bb8da71c8d61152', - 'www.openstreetmap.com': '142f25a0770a51a9a400b3513834a199', - 'openstreetmap.net': '687c58fd1d715596bfc94abe653d8ac0', - 'www.openstreetmap.net': '0bd1654141c85d30b9c2ccdb5302f2e4' -}; - function createMap(divName, options) { options = options || {}; @@ -29,10 +20,12 @@ function createMap(divName, options) { units: "m", maxResolution: 156543.0339, numZoomLevels: 20, - displayProjection: new OpenLayers.Projection("EPSG:4326") + displayProjection: new OpenLayers.Projection("EPSG:4326"), + theme: "<%= asset_path 'theme/default/style.css' %>" }); var mapnik = new OpenLayers.Layer.OSM.Mapnik(i18n("javascripts.map.base.mapnik"), { + attribution: "", keyid: "mapnik", displayOutsideMaxExtent: true, wrapDateLine: true, @@ -41,6 +34,7 @@ function createMap(divName, options) { map.addLayer(mapnik); var osmarender = new OpenLayers.Layer.OSM.Osmarender(i18n("javascripts.map.base.osmarender"), { + attribution: "", keyid: "osmarender", displayOutsideMaxExtent: true, wrapDateLine: true, @@ -49,6 +43,7 @@ function createMap(divName, options) { map.addLayer(osmarender); var cyclemap = new OpenLayers.Layer.OSM.CycleMap(i18n("javascripts.map.base.cycle_map"), { + attribution: "Tiles courtesy of Andy Allan", keyid: "cyclemap", displayOutsideMaxExtent: true, wrapDateLine: true, @@ -56,18 +51,29 @@ function createMap(divName, options) { }); map.addLayer(cyclemap); - var nonamekey = nonamekeys[document.domain]; - var noname = new OpenLayers.Layer.OSM(i18n("javascripts.map.base.noname"), [ - "http://a.tile.cloudmade.com/" + nonamekey + "/3/256/${z}/${x}/${y}.png", - "http://b.tile.cloudmade.com/" + nonamekey + "/3/256/${z}/${x}/${y}.png", - "http://c.tile.cloudmade.com/" + nonamekey + "/3/256/${z}/${x}/${y}.png" + var transportmap = new OpenLayers.Layer.OSM.TransportMap(i18n("javascripts.map.base.transport_map"), { + attribution: "Tiles courtesy of Andy Allan", + keyid: "transportmap", + displayOutsideMaxExtent: true, + wrapDateLine: true, + layerCode: "T" + }); + map.addLayer(transportmap); + + var mapquest = new OpenLayers.Layer.OSM(i18n("javascripts.map.base.mapquest"), [ + "http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png", + "http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png", + "http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png", + "http://otile4.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png" ], { + attribution: "Tiles courtesy of MapQuest ", + keyid: "mapquest", displayOutsideMaxExtent: true, wrapDateLine: true, numZoomLevels: 19, - layerCode: "N" + layerCode: "Q" }); - map.addLayer(noname); + map.addLayer(mapquest); var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels); @@ -87,7 +93,7 @@ function createMap(divName, options) { function getArrowIcon() { var size = new OpenLayers.Size(25, 22); var offset = new OpenLayers.Pixel(-30, -27); - var icon = new OpenLayers.Icon("/images/arrow.png", size, offset); + var icon = new OpenLayers.Icon("<%= asset_path 'arrow.png' %>", size, offset); return icon; } @@ -99,7 +105,6 @@ function addMarkerToMap(position, icon, description) { if (description) { marker.events.register("mouseover", marker, function() { openMapPopup(marker, description) }); - marker.events.register("mouseout", marker, function() { closeMapPopup() }); } return marker; @@ -264,7 +269,7 @@ function setMapLayers(layerConfig) { } else { map.layers[i].setVisibility(true); } - } else { + } else if (!map.layers[i].isBaseLayer) { map.layers[i].setVisibility(false); } } diff --git a/public/javascripts/menu.js b/app/assets/javascripts/menu.js similarity index 53% rename from public/javascripts/menu.js rename to app/assets/javascripts/menu.js index 261517756..8db1be4b9 100644 --- a/public/javascripts/menu.js +++ b/app/assets/javascripts/menu.js @@ -2,20 +2,21 @@ * Open a menu. */ function openMenu(anchor, menu, align) { + var anchorPosition = anchor.offset(); var offset; if (align == "left") { offset = 0; } else if (align == "right") { - offset = anchor.getWidth() - menu.getWidth(); + offset = menu.outerWidth() - anchor.outerWidth(); } - menu.clonePosition(anchor, { - setLeft: true, setTop: true, setWidth: false, setHeight: false, - offsetLeft: offset, offsetTop: anchor.getHeight() - }); + menu.show(); - menu.style.display = "block"; + menu.offset({ + top: anchorPosition.top + anchor.outerHeight(), + left: anchorPosition.left - offset + }); } /* @@ -23,14 +24,14 @@ function openMenu(anchor, menu, align) { */ function closeMenu(menu) { clearTimeout(menu.timer); - menu.style.display = "none"; + menu.hide(); } /* * Callback called when the mouse enters a menu anchor. */ function enterMenuAnchor(event, anchor, menu, delay, align) { - if (!anchor.hasClassName("disabled")) { + if (!anchor.hasClass("disabled")) { clearTimeout(menu.timer); if (delay > 0) { @@ -47,8 +48,8 @@ function enterMenuAnchor(event, anchor, menu, delay, align) { function leaveMenuAnchor(event, anchor, menu) { var to = event.relatedTarget; - if (to != menu && !to.descendantOf(menu)) { - menu.style.display = "none"; + if (!menu.is(to) && menu.has(to).length == 0) { + menu.hide(); } clearTimeout(menu.timer); @@ -60,8 +61,8 @@ function leaveMenuAnchor(event, anchor, menu) { function leaveMenu(event, anchor, menu) { var to = event.relatedTarget; - if (to != anchor && !to.descendantOf(menu)) { - menu.style.display = "none"; + if (!anchor.is(to) && menu.has(to).length == 0) { + menu.hide(); } clearTimeout(menu.timer); @@ -71,12 +72,12 @@ function leaveMenu(event, anchor, menu) { * Setup a menu, triggered by hovering over an anchor for a given time. */ function createMenu(anchorid, menuid, delay, align) { - var anchor = $(anchorid); - var menu = $(menuid); + var anchor = $("#" + anchorid); + var menu = $("#" + menuid); - anchor.observe("mouseup", function (event) { closeMenu(menu) }); - anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay, align) }); - anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) }); - menu.observe("mouseup", function (event) { closeMenu(menu) }); - menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) }); + anchor.mouseup(function (event) { closeMenu(menu) }); + anchor.mouseover(function (event) { enterMenuAnchor(anchor, anchor, menu, delay, align) }); + anchor.mouseout(function (event) { leaveMenuAnchor(event, anchor, menu) }); + menu.mouseup(function (event) { closeMenu(menu) }); + menu.mouseout(function (event) { leaveMenu(event, anchor, menu) }); } diff --git a/app/assets/javascripts/openlayers.js.erb b/app/assets/javascripts/openlayers.js.erb new file mode 100644 index 000000000..c428da014 --- /dev/null +++ b/app/assets/javascripts/openlayers.js.erb @@ -0,0 +1,37 @@ +//= require OpenLayers +//= require OpenStreetMap + +OpenLayers.Util.imageURLs = { + "404.png": "<%= asset_path 'img/404.png' %>", + "blank.gif": "<%= asset_path 'img/blank.gif' %>", + "cloud-popup-relative.png": "<%= asset_path 'img/cloud-popup-relative.png' %>", + "drag-rectangle-off.png": "<%= asset_path 'img/drag-rectangle-off.png' %>", + "drag-rectangle-on.png": "<%= asset_path 'img/drag-rectangle-on.png' %>", + "east-mini.png": "<%= asset_path 'img/east-mini.png' %>", + "layer-switcher-maximize.png": "<%= asset_path 'img/layer-switcher-maximize.png' %>", + "layer-switcher-minimize.png": "<%= asset_path 'img/layer-switcher-minimize.png' %>", + "marker-blue.png": "<%= asset_path 'img/marker-blue.png' %>", + "marker-gold.png": "<%= asset_path 'img/marker-gold.png' %>", + "marker-green.png": "<%= asset_path 'img/marker-green.png' %>", + "marker.png": "<%= asset_path 'img/marker.png' %>", + "measuring-stick-off.png": "<%= asset_path 'img/measuring-stick-off.png' %>", + "measuring-stick-on.png": "<%= asset_path 'img/measuring-stick-on.png' %>", + "north-mini.png": "<%= asset_path 'img/north-mini.png' %>", + "panning-hand-off.png": "<%= asset_path 'img/panning-hand-off.png' %>", + "panning-hand-on.png": "<%= asset_path 'img/panning-hand-on.png' %>", + "slider.png": "<%= asset_path 'img/slider.png' %>", + "south-mini.png": "<%= asset_path 'img/south-mini.png' %>", + "west-mini.png": "<%= asset_path 'img/west-mini.png' %>", + "zoombar.png": "<%= asset_path 'img/zoombar.png' %>", + "zoom-minus-mini.png": "<%= asset_path 'img/zoom-minus-mini.png' %>", + "zoom-plus-mini.png": "<%= asset_path 'img/zoom-plus-mini.png' %>", + "zoom-world-mini.png": "<%= asset_path 'img/zoom-world-mini.png' %>" +}; + +OpenLayers.Util.OSM.MISSING_TILE_URL = "<%= asset_path 'img/404.png' %>"; + +OpenLayers.Util.origGetImageLocation = OpenLayers.Util.getImageLocation; + +OpenLayers.Util.getImageLocation = function(image) { + return OpenLayers.Util.imageURLs[image] || OpenLayers.Util.origGetImageLocation(image); +}; diff --git a/public/javascripts/pngfix.js b/app/assets/javascripts/pngfix.js similarity index 100% rename from public/javascripts/pngfix.js rename to app/assets/javascripts/pngfix.js diff --git a/public/javascripts/site.js b/app/assets/javascripts/site.js similarity index 81% rename from public/javascripts/site.js rename to app/assets/javascripts/site.js index 813b3ae92..ea7585a44 100644 --- a/public/javascripts/site.js +++ b/app/assets/javascripts/site.js @@ -1,3 +1,6 @@ +//= require jquery +//= require jquery_ujs + /* * Called as the user scrolls/zooms around to aniplate hrefs of the * view tab and various other links @@ -16,50 +19,49 @@ function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat,objtype,obj maxlat = Math.round(maxlat * decimals) / decimals; } - $$(".geolink").each(function (link) { + $(".geolink").each(function (index, link) { var args = getArgs(link.href); - if (link.hasClassName("llz")) { + if ($(link).hasClass("llz")) { args.lat = lat; args.lon = lon; args.zoom = zoom; - } else if (minlon && link.hasClassName("bbox")) { + } else if (minlon && $(link).hasClass("bbox")) { args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat; } - if (layers && link.hasClassName("layers")) { + if (layers && $(link).hasClass("layers")) { args.layers = layers; } - if (objtype && link.hasClassName("object")) { + if (objtype && $(link).hasClass("object")) { args[objtype] = objid; } - if (link.hasClassName("minzoom[0-9]+")) { - $w(link.className).each(function (classname) { - if (match = classname.match(/^minzoom([0-9]+)$/)) { - var minzoom = match[1]; - var name = link.id.replace(/anchor$/, ""); - - if (zoom >= minzoom) { - link.onclick = null; - link.title = i18n("javascripts.site." + name + "_tooltip"); - link.removeClassName("disabled"); - } else { - link.onclick = function () { alert(i18n("javascripts.site." + name + "_zoom_alert")); return false; }; - link.title = i18n("javascripts.site." + name + "_disabled_tooltip"); - link.addClassName("disabled"); - } + var classes = $(link).attr("class").split(" "); + + $(classes).each(function (index, classname) { + if (match = classname.match(/^minzoom([0-9]+)$/)) { + var minzoom = match[1]; + var name = link.id.replace(/anchor$/, ""); + + if (zoom >= minzoom) { + $(link).off("click"); + $(link).attr("title", i18n("javascripts.site." + name + "_tooltip")); + $(link).removeClass("disabled"); + } else { + $(link).click(function () { alert(i18n("javascripts.site." + name + "_zoom_alert")); return false; }); + $(link).attr("title", i18n("javascripts.site." + name + "_disabled_tooltip")); + $(link).addClass("disabled"); } - }); - } + } + }); link.href = setArgs(link.href, args); }); - node = $("shortlinkanchor"); - if (node) { - var args = getArgs(node.href); + $("#shortlinkanchor").each(function () { + var args = getArgs(this.href); var code = makeShortCode(lat, lon, zoom); var prefix = shortlinkPrefix(); @@ -81,11 +83,11 @@ function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat,objtype,obj // which encodes lat/lon/zoom. If new URL parameters are added to // the main slippy map this needs to be changed. if (args["layers"] || args[objtype]) { - node.href = setArgs(prefix + "/go/" + code, args); + this.href = setArgs(prefix + "/go/" + code, args); } else { - node.href = prefix + "/go/" + code; + this.href = prefix + "/go/" + code; } - } + }); } /* @@ -198,7 +200,7 @@ function interlace(x, y) { * Called to create a short code for the short link. */ function makeShortCode(lat, lon, zoom) { - char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@"; + char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_~"; var x = Math.round((lon + 180.0) * ((1 << 30) / 90.0)); var y = Math.round((lat + 90.0) * ((1 << 30) / 45.0)); // JavaScript only has to keep 32 bits of bitwise operators, so this has to be diff --git a/app/assets/openlayers/theme/default/style.css.scss b/app/assets/openlayers/theme/default/style.css.scss new file mode 100644 index 000000000..3dbc047b0 --- /dev/null +++ b/app/assets/openlayers/theme/default/style.css.scss @@ -0,0 +1,433 @@ +div.olMap { + z-index: 0; + padding: 0 !important; + margin: 0 !important; + cursor: default; +} + +div.olMapViewport { + text-align: left; +} + +div.olLayerDiv { + -moz-user-select: none; + -khtml-user-select: none; +} + +.olLayerGoogleCopyright { + left: 2px; + bottom: 2px; +} +.olLayerGoogleV3.olLayerGoogleCopyright { + right: auto !important; +} +.olLayerGooglePoweredBy { + left: 2px; + bottom: 15px; +} +.olLayerGoogleV3.olLayerGooglePoweredBy { + bottom: 15px !important; +} +.olControlAttribution { + font-size: smaller; + right: 3px; + bottom: 4.5em; + position: absolute; + display: block; +} +.olControlScale { + right: 3px; + bottom: 3em; + display: block; + position: absolute; + font-size: smaller; +} +.olControlScaleLine { + display: block; + position: absolute; + left: 10px; + bottom: 15px; + font-size: xx-small; +} +.olControlScaleLineBottom { + border: solid 2px black; + border-bottom: none; + margin-top:-2px; + text-align: center; +} +.olControlScaleLineTop { + border: solid 2px black; + border-top: none; + text-align: center; +} + +.olControlPermalink { + right: 3px; + bottom: 1.5em; + display: block; + position: absolute; + font-size: smaller; +} + +div.olControlMousePosition { + bottom: 0em; + right: 3px; + display: block; + position: absolute; + font-family: Arial; + font-size: smaller; +} + +.olControlOverviewMapContainer { + position: absolute; + bottom: 0; + right: 0; +} + +.olControlOverviewMapElement { + padding: 10px 18px 10px 10px; + background-color: #00008B; + -moz-border-radius: 1em 0 0 0; +} + +.olControlOverviewMapMinimizeButton { + right: 0; + bottom: 80px; + cursor: pointer; +} + +.olControlOverviewMapMaximizeButton { + right: 0; + bottom: 80px; + cursor: pointer; +} + +.olControlOverviewMapExtentRectangle { + overflow: hidden; + background-image: image-url("theme/default/img/blank.gif"); + cursor: move; + border: 2px dotted red; +} +.olControlOverviewMapRectReplacement { + overflow: hidden; + cursor: move; + background-image: image-url("theme/default/img/overview_replacement.gif"); + background-repeat: no-repeat; + background-position: center; +} + +.olLayerGeoRSSDescription { + float:left; + width:100%; + overflow:auto; + font-size:1.0em; +} +.olLayerGeoRSSClose { + float:right; + color:gray; + font-size:1.2em; + margin-right:6px; + font-family:sans-serif; +} +.olLayerGeoRSSTitle { + float:left;font-size:1.2em; +} + +.olPopupContent { + padding:5px; + overflow: auto; +} + +.olControlNavigationHistory { + background-image: image-url("theme/default/img/navigation_history.png"); + background-repeat: no-repeat; + width: 24px; + height: 24px; + +} +.olControlNavigationHistoryPreviousItemActive { + background-position: 0 0; +} +.olControlNavigationHistoryPreviousItemInactive { + background-position: 0 -24px; +} +.olControlNavigationHistoryNextItemActive { + background-position: -24px 0; +} +.olControlNavigationHistoryNextItemInactive { + background-position: -24px -24px; +} + +div.olControlSaveFeaturesItemActive { + background-image: image-url("theme/default/img/save_features_on.png"); + background-repeat: no-repeat; + background-position: 0 1px; +} +div.olControlSaveFeaturesItemInactive { + background-image: image-url("theme/default/img/save_features_off.png"); + background-repeat: no-repeat; + background-position: 0 1px; +} + +.olHandlerBoxZoomBox { + border: 2px solid red; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity=50); +} +.olHandlerBoxSelectFeature { + border: 2px solid blue; + position: absolute; + background-color: white; + opacity: 0.50; + font-size: 1px; + filter: alpha(opacity=50); +} + +.olControlPanPanel { + top: 10px; + left: 5px; +} + +.olControlPanPanel div { + background-image: image-url("theme/default/img/pan-panel.png"); + height: 18px; + width: 18px; + cursor: pointer; + position: absolute; +} + +.olControlPanPanel .olControlPanNorthItemInactive { + top: 0; + left: 9px; + background-position: 0 0; +} +.olControlPanPanel .olControlPanSouthItemInactive { + top: 36px; + left: 9px; + background-position: 18px 0; +} +.olControlPanPanel .olControlPanWestItemInactive { + position: absolute; + top: 18px; + left: 0; + background-position: 0 18px; +} +.olControlPanPanel .olControlPanEastItemInactive { + top: 18px; + left: 18px; + background-position: 18px 18px; +} + +.olControlZoomPanel { + top: 71px; + left: 14px; +} + +.olControlZoomPanel div { + background-image: image-url("theme/default/img/zoom-panel.png"); + position: absolute; + height: 18px; + width: 18px; + cursor: pointer; +} + +.olControlZoomPanel .olControlZoomInItemInactive { + top: 0; + left: 0; + background-position: 0 0; +} + +.olControlZoomPanel .olControlZoomToMaxExtentItemInactive { + top: 18px; + left: 0; + background-position: 0 -18px; +} + +.olControlZoomPanel .olControlZoomOutItemInactive { + top: 36px; + left: 0; + background-position: 0 18px; +} + +/* + * When a potential text is bigger than the image it move the image + * with some headers (closes #3154) + */ +.olControlPanZoomBar div { + font-size: 1px; +} + +.olPopupCloseBox { + background: image-url("theme/default/img/close.gif") no-repeat; + cursor: pointer; +} + +.olFramedCloudPopupContent { + padding: 5px; + overflow: auto; +} + +.olControlNoSelect { + -moz-user-select: none; + -khtml-user-select: none; +} + +.olImageLoadError { + background-color: pink; + opacity: 0.5; + filter: alpha(opacity=50); /* IE */ +} + +/** + * Cursor styles + */ + +.olCursorWait { + cursor: wait; +} +.olDragDown { + cursor: move; +} +.olDrawBox { + cursor: crosshair; +} +.olControlDragFeatureOver { + cursor: move; +} +.olControlDragFeatureActive.olControlDragFeatureOver.olDragDown { + cursor: -moz-grabbing; +} + +/** + * Layer switcher + */ +.olControlLayerSwitcher { + position: absolute; + top: 25px; + right: 0; + width: 20em; + font-family: sans-serif; + font-weight: bold; + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; + font-size: smaller; + color: white; + background-color: transparent; +} + +.olControlLayerSwitcher .layersDiv { + padding-top: 5px; + padding-left: 10px; + padding-bottom: 5px; + padding-right: 75px; + background-color: darkblue; + width: 100%; + height: 100%; +} + +.olControlLayerSwitcher .layersDiv .baseLbl, +.olControlLayerSwitcher .layersDiv .dataLbl { + margin-top: 3px; + margin-left: 3px; + margin-bottom: 3px; +} + +.olControlLayerSwitcher .layersDiv .baseLayersDiv, +.olControlLayerSwitcher .layersDiv .dataLayersDiv { + padding-left: 10px; +} + +.olControlLayerSwitcher .maximizeDiv, +.olControlLayerSwitcher .minimizeDiv { + top: 5px; + right: 0; + cursor: pointer; +} + +.olBingAttribution { + color: #DDD; +} +.olBingAttribution.road { + color: #333; +} + +.olGoogleAttribution.hybrid, .olGoogleAttribution.satellite { + color: #EEE; +} +.olGoogleAttribution { + color: #333; +} +span.olGoogleAttribution a { + color: #77C; +} +span.olGoogleAttribution.hybrid a, span.olGoogleAttribution.satellite a { + color: #EEE; +} + +/** + * Editing and navigation icons. + * (using the editing_tool_bar.png sprint image) + */ +.olControlNavToolbar , +.olControlEditingToolbar { + margin: 5px 5px 0 0; +} +.olControlNavToolbar div, +.olControlEditingToolbar div { + background-image: image-url("theme/default/img/editing_tool_bar.png"); + background-repeat: no-repeat; + margin: 0 0 5px 5px; + width: 24px; + height: 22px; + cursor: pointer +} +/* positions */ +.olControlEditingToolbar { + right: 0; + top: 0; +} +.olControlNavToolbar { + top: 295px; + left: 9px; +} +/* layouts */ +.olControlEditingToolbar div { + float: right; +} +/* individual controls */ +.olControlNavToolbar .olControlNavigationItemInactive, +.olControlEditingToolbar .olControlNavigationItemInactive { + background-position: -103px -1px; +} +.olControlNavToolbar .olControlNavigationItemActive , +.olControlEditingToolbar .olControlNavigationItemActive { + background-position: -103px -24px; +} +.olControlNavToolbar .olControlZoomBoxItemInactive { + background-position: -128px -1px; +} +.olControlNavToolbar .olControlZoomBoxItemActive { + background-position: -128px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePointItemInactive { + background-position: -77px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePointItemActive { + background-position: -77px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePathItemInactive { + background-position: -51px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePathItemActive { + background-position: -51px -24px; +} +.olControlEditingToolbar .olControlDrawFeaturePolygonItemInactive{ + background-position: -26px -1px; +} +.olControlEditingToolbar .olControlDrawFeaturePolygonItemActive { + background-position: -26px -24px; +} diff --git a/public/opensearch/osm.xml b/app/assets/opensearch/osm.xml similarity index 100% rename from public/opensearch/osm.xml rename to app/assets/opensearch/osm.xml diff --git a/app/assets/stylesheets/browse.css.scss b/app/assets/stylesheets/browse.css.scss new file mode 100644 index 000000000..dd1bf30c2 --- /dev/null +++ b/app/assets/stylesheets/browse.css.scss @@ -0,0 +1,143 @@ +.node { padding-left: 25px; } +.way { padding-left: 25px; } +.relation { padding-left: 25px; } + +.deleted { text-decoration: line-through; } + +/* Nodes (and ways as areas) */ + +.aeroway.aerodrome { background: image-url('browse/aerodrome.p.16.png') no-repeat center left; } + +.amenity.atm { background: image-url('browse/atm2.p.16.png') no-repeat center left; } +.amenity.bank { background: image-url('browse/bank2.p.16.png') no-repeat center left; } +.amenity.bar { background: image-url('browse/bar.p.16.png') no-repeat center left; } +.amenity.bicycle_parking { background: image-url('browse/transport_parking_bicycle.p.16.png') no-repeat center left; } +.amenity.bicycle_rental { background: image-url('browse/transport_rental_bicycle.p.16.png') no-repeat center left; } +.amenity.bus_station { background: image-url('browse/bus_station.n.16.png') no-repeat center left; } +.amenity.cafe { background: image-url('browse/cafe.p.16.png') no-repeat center left; } +.amenity.car_rental { background: image-url('browse/transport_rental_car.p.16.png') no-repeat center left; } +.amenity.car_sharing { background: image-url('browse/car_share.p.16.png') no-repeat center left; } +.amenity.cinema { background: image-url('browse/cinema.p.16.png') no-repeat center left; } +.amenity.dentist { background: image-url('browse/health_dentist.p.16.png') no-repeat center left; } +.amenity.doctors { background: image-url('browse/health_doctors.p.16.png') no-repeat center left; } +.amenity.drinking_water { background: image-url('browse/drinkingtap.p.16.png') no-repeat center left; } +.amenity.fast_food { background: image-url('browse/fast_food.p.16.png') no-repeat center left; } +.amenity.fire_station { background: image-url('browse/firestation.p.16.png') no-repeat center left; } +.amenity.fuel { background: image-url('browse/fuel.p.16.png') no-repeat center left; } +.amenity.hospital { background: image-url('browse/hospital.p.16.png') no-repeat center left; } +.amenity.library { background: image-url('browse/library.p.16.png') no-repeat center left; } +.amenity.nursery { background: image-url('browse/education_nursery.p.16.png') no-repeat center left; } +.amenity.parking { background: image-url('browse/parking.p.16.png') no-repeat center left; } +.amenity.pharmacy { background: image-url('browse/pharmacy.p.16.png') no-repeat center left; } +.amenity.place_of_worship { background: image-url('browse/place_of_worship_unknown3.p.16.png') no-repeat center left; } +.amenity.police { background: image-url('browse/police.p.16.png') no-repeat center left; } +.amenity.post_box { background: image-url('browse/post_box.p.16.png') no-repeat center left; } +.amenity.post_office { background: image-url('browse/post_office.p.16.png') no-repeat center left; } +.amenity.prison { background: image-url('browse/prison.p.16.png') no-repeat center left; } +.amenity.pub { background: image-url('browse/pub.p.16.png') no-repeat center left; } +.amenity.restaurant { background: image-url('browse/restaurant.p.16.png') no-repeat center left; } +.amenity.recycling { background: image-url('browse/recycling.p.16.png') no-repeat center left; } +.amenity.school { background: image-url('browse/education_school.p.16.png') no-repeat center left; } +.amenity.shelter { background: image-url('browse/shelter2.p.16.png') no-repeat center left; } +.amenity.telephone { background: image-url('browse/telephone.p.16.png') no-repeat center left; } +.amenity.theatre { background: image-url('browse/theatre.p.16.png') no-repeat center left; } +.amenity.toilets { background: image-url('browse/toilets.p.16.png') no-repeat center left; } +.amenity.university { background: image-url('browse/education_university.p.16.png') no-repeat center left; } +.amenity.veterinary { background: image-url('browse/health_veterinary.p.16.png') no-repeat center left; } + +.barrier.gate { background: image-url('browse/gate2.p.16.png') no-repeat center left; } + +.highway.bus_stop { background: image-url('browse/bus_stop.p.16.png') no-repeat center left; } +.highway.mini_roundabout { background: image-url('browse/mini_round.p.16.png') no-repeat center left; } +.highway.traffic_signals { background: image-url('browse/traffic_light.png') no-repeat center left; } +.highway.turning_circle { background: image-url('browse/turning_circle.p.16.png') no-repeat center left; } + +.historic.castle { background: image-url('browse/tourist_castle.p.16.png') no-repeat center left; } +.historic.memorial { background: image-url('browse/tourist_memorial.p.16.png') no-repeat center left; } +.historic.monument { background: image-url('browse/tourist_monument.p.16.png') no-repeat center left; } +.historic.ruins { background: image-url('browse/tourist_ruins.p.16.png') no-repeat center left; } +.historic.wreck { background: image-url('browse/tourist_wreck.p.16.png') no-repeat center left; } + +.man_made.lighthouse { background: image-url('browse/lighthouse.p.16.png') no-repeat center left; } +.man_made.windmill { background: image-url('browse/tourist_windmill.p.16.png') no-repeat center left; } + +.natural.tree { background: image-url('browse/tree.p.16.png') no-repeat center left; } + +.railway.halt { background: image-url('browse/halt.p.16.png') no-repeat center left; } +.railway.station { background: image-url('browse/station.p.16.png') no-repeat center left; } +.railway.level_crossing { background: image-url('browse/level_crossing.p.16.png') no-repeat center left; } + +.shop { background: image-url('browse/shop_convenience.p.16.png') no-repeat center left; } +.shop.bakery { background: image-url('browse/shop_bakery.p.16.png') no-repeat center left; } +.shop.bicycle { background: image-url('browse/shop_bicycle.p.16.png') no-repeat center left; } +.shop.books { background: image-url('browse/shop_books.p.16.png') no-repeat center left; } +.shop.butcher { background: image-url('browse/shop_butcher.p.16.png') no-repeat center left; } +.shop.clothes { background: image-url('browse/shop_clothes.p.16.png') no-repeat center left; } +.shop.convenience { background: image-url('browse/shop_convenience.p.16.png') no-repeat center left; } +.shop.diy { background: image-url('browse/shop_diy.p.16.png') no-repeat center left; } +.shop.estate_agent { background: image-url('browse/shop_estateagent2.p.16.png') no-repeat center left; } +.shop.fish { background: image-url('browse/shop_fish.p.16.png') no-repeat center left; } +.shop.garden_centre { background: image-url('browse/shop_garden_centre.p.16.png') no-repeat center left; } +.shop.gift { background: image-url('browse/shop_gift.p.16.png') no-repeat center left; } +.shop.greengrocer { background: image-url('browse/shop_greengrocer.p.16.png') no-repeat center left; } +.shop.hairdresser { background: image-url('browse/shop_hairdresser.p.16.png') no-repeat center left; } +.shop.jewelry { background: image-url('browse/shop_jewelry.p.16.png') no-repeat center left; } +.shop.supermarket { background: image-url('browse/shop_supermarket.p.16.png') no-repeat center left; } + +.tourism.alpine_hut { background: image-url('browse/alpinehut.p.16.png') no-repeat center left; } +.tourism.camp_site { background: image-url('browse/camping.n.16.png') no-repeat center left; } +.tourism.caravan_site { background: image-url('browse/caravan_park.n.16.png') no-repeat center left; } +.tourism.hostel { background: image-url('browse/hostel.p.16.png') no-repeat center left; } +.tourism.hotel { background: image-url('browse/hotel.p.16.png') no-repeat center left; } +.tourism.museum { background: image-url('browse/museum.p.16.png') no-repeat center left; } +.tourism.picnic_site { background: image-url('browse/tourist_picnic.p.16.png') no-repeat center left; } +.tourism.viewpoint { background: image-url('browse/view_point.p.16.png') no-repeat center left; } + +/* Ways */ + +.aeroway.runway { background: image-url('browse/runway.20.png') no-repeat center left; } +.aeroway.taxiway { background: image-url('browse/taxiway.20.png') no-repeat center left; } + +.building { background: image-url('browse/building.png') no-repeat center left; } + +.highway.bridleway { background: image-url('browse/bridleway.20.png') no-repeat center left; } +.highway.byway { background: image-url('browse/byway.20.png') no-repeat center left; } +.highway.cycleway { background: image-url('browse/cycleway.20.png') no-repeat center left; } +.highway.footway { background: image-url('browse/footway.20.png') no-repeat center left; } +.highway.motorway { background: image-url('browse/motorway.20.png') no-repeat center left; } +.highway.motorway_link { background: image-url('browse/motorway.20.png') no-repeat center left; } +.highway.pedestrian { background: image-url('browse/service.20.png') no-repeat center left; } +.highway.primary { background: image-url('browse/primary.20.png') no-repeat center left; } +.highway.primary_link { background: image-url('browse/primary.20.png') no-repeat center left; } +.highway.residential { background: image-url('browse/unclassified.20.png') no-repeat center left; } +.highway.secondary { background: image-url('browse/secondary.20.png') no-repeat center left; } +.highway.secondary_link { background: image-url('browse/secondary.20.png') no-repeat center left; } +.highway.service { background: image-url('browse/service.20.png') no-repeat center left; } +.highway.trunk { background: image-url('browse/trunk.20.png') no-repeat center left; } +.highway.trunk_link { background: image-url('browse/trunk.20.png') no-repeat center left; } +.highway.unclassified { background: image-url('browse/unclassified.20.png') no-repeat center left; } + +.landuse.brownfield { background: image-url('browse/brownfield.png') no-repeat center left; } +.landuse.cemetery { background: image-url('browse/cemetery.png') no-repeat center left; } +.landuse.commercial { background: image-url('browse/commercial.png') no-repeat center left; } +.landuse.farm { background: image-url('browse/farm.png') no-repeat center left; } +.landuse.forest { background: image-url('browse/forest.png') no-repeat center left; } +.landuse.industrial { background: image-url('browse/industrial.png') no-repeat center left; } +.landuse.military { background: image-url('browse/military.png') no-repeat center left; } +.landuse.residential { background: image-url('browse/residential.png') no-repeat center left; } +.landuse.retail { background: image-url('browse/retail.png') no-repeat center left; } +.landuse.tourism { background: image-url('browse/tourism.png') no-repeat center left; } +.landuse.wood { background: image-url('browse/wood.png') no-repeat center left; } + +.leisure.golf_course { background: image-url('browse/golf.png') no-repeat center left; } +.leisure.park { background: image-url('browse/park.png') no-repeat center left; } +.leisure.pitch { background: image-url('browse/pitch.png') no-repeat center left; } +.leisure.nature_reserve { background: image-url('browse/reserve.png') no-repeat center left; } + +.natural.heath { background: image-url('browse/heathland.png') no-repeat center left; } +.natural.water { background: image-url('browse/lake.png') no-repeat center left; } + +.railway.light_rail { background: image-url('browse/light_rail.20.png') no-repeat center left; } +.railway.rail { background: image-url('browse/rail.20.png') no-repeat center left; } +.railway.subway { background: image-url('browse/subway.20.png') no-repeat center left; } +.railway.tram { background: image-url('browse/tram.20.png') no-repeat center left; } diff --git a/public/stylesheets/common.css b/app/assets/stylesheets/common.css.scss similarity index 97% rename from public/stylesheets/common.css rename to app/assets/stylesheets/common.css.scss index 9b68bd03e..a0846e96e 100644 --- a/public/stylesheets/common.css +++ b/app/assets/stylesheets/common.css.scss @@ -266,7 +266,7 @@ hr { height: 20px; margin: 0px; padding-top: 5px; - background: url('../images/tab_bottom.gif') repeat-x bottom; + background: image-url('tab_bottom.gif') repeat-x bottom; } #tabnav li @@ -320,7 +320,7 @@ hr { padding-top: 5px; font-size: 13px; line-height: 14px; - background: url('../images/tab_bottom.gif') repeat-x bottom; + background: image-url('tab_bottom.gif') repeat-x bottom; } .greeting-bar-unread { @@ -344,7 +344,10 @@ hr { } .olControlAttribution { - display: none !important; + bottom: 15px !important; + left: 0px !important; + right: 0px !important; + text-align: center; } #permalink { @@ -949,7 +952,7 @@ p#contributorGuidance { /* Rules for highlighting fields with rails validation errors */ -.fieldWithErrors { +.field_with_errors { padding: 2px; background-color: red; display: table; @@ -996,7 +999,7 @@ p#contributorGuidance { font-size: 0.8em; } -input[type="text"], input[type="password"], textarea { +input[type="text"], input[type="email"], input[type="url"], input[type="password"], textarea { border: 1px solid black; } diff --git a/app/assets/stylesheets/large-ltr.css b/app/assets/stylesheets/large-ltr.css new file mode 100644 index 000000000..00ce0910b --- /dev/null +++ b/app/assets/stylesheets/large-ltr.css @@ -0,0 +1,5 @@ +/* + *= require common + *= require ltr + *= require large + */ diff --git a/app/assets/stylesheets/large-rtl.css b/app/assets/stylesheets/large-rtl.css new file mode 100644 index 000000000..5919290ed --- /dev/null +++ b/app/assets/stylesheets/large-rtl.css @@ -0,0 +1,5 @@ +/* + *= require common + *= require rtl + *= require large + */ diff --git a/public/stylesheets/large.css b/app/assets/stylesheets/large.css similarity index 100% rename from public/stylesheets/large.css rename to app/assets/stylesheets/large.css diff --git a/public/stylesheets/ltr.css b/app/assets/stylesheets/ltr.css.scss similarity index 97% rename from public/stylesheets/ltr.css rename to app/assets/stylesheets/ltr.css.scss index fc7c04226..817404a79 100644 --- a/public/stylesheets/ltr.css +++ b/app/assets/stylesheets/ltr.css.scss @@ -106,6 +106,7 @@ html body { #sidebar { left: 0px; + margin-right: 3px; } #sidebar #sidebar_title { @@ -230,6 +231,6 @@ form#termsForm input#agree { } input.openid_url { - background: url('../images/openid_input.png') repeat-y left white; + background: image-url('openid_input.png') repeat-y left white; padding-left: 16px; } diff --git a/app/assets/stylesheets/print-ltr.css b/app/assets/stylesheets/print-ltr.css new file mode 100644 index 000000000..5f3ae8f7c --- /dev/null +++ b/app/assets/stylesheets/print-ltr.css @@ -0,0 +1,4 @@ +/* + *= require print + *= require ltr + */ diff --git a/app/assets/stylesheets/print-rtl.css b/app/assets/stylesheets/print-rtl.css new file mode 100644 index 000000000..5ef840645 --- /dev/null +++ b/app/assets/stylesheets/print-rtl.css @@ -0,0 +1,4 @@ +/* + *= require print + *= require rtl + */ diff --git a/public/stylesheets/print.css b/app/assets/stylesheets/print.css similarity index 91% rename from public/stylesheets/print.css rename to app/assets/stylesheets/print.css index 98d74d99a..a349ccfde 100644 --- a/public/stylesheets/print.css +++ b/app/assets/stylesheets/print.css @@ -48,8 +48,10 @@ #map { border: 1px solid black; + margin: auto !important; } #attribution { font-size: 12px; + text-align: center; } diff --git a/public/stylesheets/rtl.css b/app/assets/stylesheets/rtl.css.scss similarity index 97% rename from public/stylesheets/rtl.css rename to app/assets/stylesheets/rtl.css.scss index d95600419..953efd7a6 100644 --- a/public/stylesheets/rtl.css +++ b/app/assets/stylesheets/rtl.css.scss @@ -107,6 +107,7 @@ html body { #sidebar { right: 0px; + margin-left: 3px; } #sidebar #sidebar_title { @@ -231,6 +232,6 @@ form#termsForm input#agree { } input.openid_url { - background: url('../images/openid_input.png') repeat-y right white; + background: image-url('openid_input.png') repeat-y right white; padding-right: 16px; } diff --git a/app/assets/stylesheets/small-ltr.css b/app/assets/stylesheets/small-ltr.css new file mode 100644 index 000000000..2526d2585 --- /dev/null +++ b/app/assets/stylesheets/small-ltr.css @@ -0,0 +1,5 @@ +/* + *= require common + *= require ltr + *= require small + */ diff --git a/app/assets/stylesheets/small-rtl.css b/app/assets/stylesheets/small-rtl.css new file mode 100644 index 000000000..4d3a5e1fc --- /dev/null +++ b/app/assets/stylesheets/small-rtl.css @@ -0,0 +1,5 @@ +/* + *= require common + *= require rtl + *= require small + */ diff --git a/public/stylesheets/small.css b/app/assets/stylesheets/small.css.scss similarity index 88% rename from public/stylesheets/small.css rename to app/assets/stylesheets/small.css.scss index d0067a618..07b5d7b10 100644 --- a/public/stylesheets/small.css +++ b/app/assets/stylesheets/small.css.scss @@ -25,7 +25,7 @@ h1 { padding-left: 3px; padding-top: 5px; margin-top: 18px; - background: url('../images/tab_bottom.gif') repeat-x bottom; + background: image-url('tab_bottom.gif') repeat-x bottom; font-size: 10px; line-height: 10px; } @@ -87,6 +87,10 @@ h1 { /* Rules for OpenLayers maps */ +#map { + border: 0; +} + .olControlPanZoomBar { display: none; } @@ -101,6 +105,30 @@ h1 { margin-right: 0px; } +#content.site_index { + left: 0px; + right: 0px; + top: 38px; + bottom: 0px; + padding-bottom: 0px; +} + +/* Rules for search sidebar when shown */ + +#sidebar { + border: 0px; + border-right: 1px solid #ccccdd; + margin: 0px; +} + +.sidebar_title, #sidebar_content { + font-size: 10px !important; +} + +p.search_results_entry { + padding: 2px 0px; +} + /* Rules for the signup form */ #signupForm input[type="text"], #signupForm input[type="password"] { diff --git a/app/assets/swfobject/expressInstall.swf b/app/assets/swfobject/expressInstall.swf new file mode 100644 index 000000000..0fbf8fca9 Binary files /dev/null and b/app/assets/swfobject/expressInstall.swf differ diff --git a/app/assets/swfobject/swfobject.js b/app/assets/swfobject/swfobject.js new file mode 100644 index 000000000..8eafe9dd8 --- /dev/null +++ b/app/assets/swfobject/swfobject.js @@ -0,0 +1,4 @@ +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab "application/x-amf", :text => proc { |response, output| - a,b=bodies.divmod(256) - output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr - bodies.times do # Read each body - message=AMF.getstring(req) # | get message name - index=AMF.getstring(req) # | get index in response sequence - bytes=AMF.getlong(req) # | get total size in bytes - args=AMF.getvalue(req) # | get response (probably an array) - result='' - logger.info("Executing AMF #{message}(#{args.join(',')}):#{index}") - - case message - when 'getpresets'; result=AMF.putdata(index,getpresets(*args)) - when 'whichways'; result=AMF.putdata(index,whichways(*args)) - when 'whichways_deleted'; result=AMF.putdata(index,whichways_deleted(*args)) - when 'getway'; result=AMF.putdata(index,getway(args[0].to_i)) - when 'getrelation'; result=AMF.putdata(index,getrelation(args[0].to_i)) - when 'getway_old'; result=AMF.putdata(index,getway_old(args[0].to_i,args[1])) - when 'getway_history'; result=AMF.putdata(index,getway_history(args[0].to_i)) - when 'getnode_history'; result=AMF.putdata(index,getnode_history(args[0].to_i)) - when 'findgpx'; result=AMF.putdata(index,findgpx(*args)) - when 'findrelations'; result=AMF.putdata(index,findrelations(*args)) - when 'getpoi'; result=AMF.putdata(index,getpoi(*args)) - end - output.write(result) + self.status = :ok + self.content_type = Mime::AMF + self.response_body = Dispatcher.new(request.raw_post) do |message,*args| + logger.info("Executing AMF #{message}(#{args.join(',')})") + + case message + when 'getpresets'; result = getpresets(*args) + when 'whichways'; result = whichways(*args) + when 'whichways_deleted'; result = whichways_deleted(*args) + when 'getway'; result = getway(args[0].to_i) + when 'getrelation'; result = getrelation(args[0].to_i) + when 'getway_old'; result = getway_old(args[0].to_i,args[1]) + when 'getway_history'; result = getway_history(args[0].to_i) + when 'getnode_history'; result = getnode_history(args[0].to_i) + when 'findgpx'; result = findgpx(*args) + when 'findrelations'; result = findrelations(*args) + when 'getpoi'; result = getpoi(*args) end - } + + result + end else render :nothing => true, :status => :method_not_allowed end @@ -100,53 +74,35 @@ class AmfController < ApplicationController def amf_write if request.post? - req=StringIO.new(request.raw_post+0.chr) - req.read(2) - renumberednodes={} # Shared across repeated putways - renumberedways={} # Shared across repeated putways - - headers=AMF.getint(req) # Read number of headers - headers.times do # Read each header - name=AMF.getstring(req) # | - req.getc # | skip boolean - value=AMF.getvalue(req) # | - header["name"]=value # | - end + renumberednodes = {} # Shared across repeated putways + renumberedways = {} # Shared across repeated putways + err = false # Abort batch on error - bodies=AMF.getint(req) # Read number of bodies - render :content_type => "application/x-amf", :text => proc { |response, output| - a,b=bodies.divmod(256) - output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr - bodies.times do # Read each body - message=AMF.getstring(req) # | get message name - index=AMF.getstring(req) # | get index in response sequence - bytes=AMF.getlong(req) # | get total size in bytes - args=AMF.getvalue(req) # | get response (probably an array) - err=false # Abort batch on error - - logger.info("Executing AMF #{message}:#{index}") - result='' - if err - result=[-5,nil] - else - case message - when 'putway'; orn=renumberednodes.dup - r=putway(renumberednodes,*args) - r[4]=renumberednodes.reject { |k,v| orn.has_key?(k) } - if r[0]==0 and r[2] != r[3] then renumberedways[r[2]] = r[3] end - result=AMF.putdata(index,r) - when 'putrelation'; result=AMF.putdata(index,putrelation(renumberednodes, renumberedways, *args)) - when 'deleteway'; result=AMF.putdata(index,deleteway(*args)) - when 'putpoi'; r=putpoi(*args) - if r[0]==0 and r[2] != r[3] then renumberednodes[r[2]] = r[3] end - result=AMF.putdata(index,r) - when 'startchangeset'; result=AMF.putdata(index,startchangeset(*args)) - end - if result[0]==-3 then err=true end # If a conflict is detected, don't execute any more writes + self.status = :ok + self.content_type = Mime::AMF + self.response_body = Dispatcher.new(request.raw_post) do |message,*args| + logger.info("Executing AMF #{message}") + + if err + result = [-5, nil] + else + case message + when 'putway'; orn = renumberednodes.dup + result = putway(renumberednodes, *args) + result[4] = renumberednodes.reject { |k,v| orn.has_key?(k) } + if result[0] == 0 and result[2] != result[3] then renumberedways[result[2]] = result[3] end + when 'putrelation'; result = putrelation(renumberednodes, renumberedways, *args) + when 'deleteway'; result = deleteway(*args) + when 'putpoi'; result = putpoi(*args) + if result[0] == 0 and result[2] != result[3] then renumberednodes[result[2]] = result[3] end + when 'startchangeset'; result = startchangeset(*args) end - output.write(result) + + err = true if result[0] == -3 # If a conflict is detected, don't execute any more writes end - } + + result + end else render :nothing => true, :status => :method_not_allowed end @@ -265,14 +221,14 @@ class AmfController < ApplicationController loaded_lang = 'en' # Load English defaults - en = YAML::load(File.open("#{RAILS_ROOT}/config/potlatch/locales/en.yml"))["en"] + en = YAML::load(File.open("#{Rails.root}/config/potlatch/locales/en.yml"))["en"] if lang == 'en' return [loaded_lang, en] else # Use English as a fallback begin - other = YAML::load(File.open("#{RAILS_ROOT}/config/potlatch/locales/#{lang}.yml"))[lang] + other = YAML::load(File.open("#{Rails.root}/config/potlatch/locales/#{lang}.yml"))[lang] loaded_lang = lang rescue other = en @@ -306,15 +262,17 @@ class AmfController < ApplicationController # check boundary is sane and area within defined # see /config/application.yml - check_boundaries(xmin, ymin, xmax, ymax) + bbox = BoundingBox.new(xmin, ymin, xmax, ymax) + bbox.check_boundaries + bbox.check_size if POTLATCH_USE_SQL then - ways = sql_find_ways_in_area(xmin, ymin, xmax, ymax) - points = sql_find_pois_in_area(xmin, ymin, xmax, ymax) - relations = sql_find_relations_in_area_and_ways(xmin, ymin, xmax, ymax, ways.collect {|x| x[0]}) + ways = sql_find_ways_in_area(bbox) + points = sql_find_pois_in_area(bbox) + relations = sql_find_relations_in_area_and_ways(bbox, ways.collect {|x| x[0]}) else # find the way ids in an area - nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => ["current_nodes.visible = ?", true], :include => :ways) + nodes_in_area = Node.bbox(bbox).visible.includes(:ways) ways = nodes_in_area.inject([]) { |sum, node| visible_ways = node.ways.select { |w| w.visible? } sum + visible_ways.collect { |w| [w.id,w.version] } @@ -326,8 +284,8 @@ class AmfController < ApplicationController points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags, n.version] }.uniq # find the relations used by those nodes and ways - relations = Relation.find_for_nodes(nodes_in_area.collect { |n| n.id }, :conditions => {:visible => true}) + - Relation.find_for_ways(ways.collect { |w| w[0] }, :conditions => {:visible => true}) + relations = Relation.nodes(nodes_in_area.collect { |n| n.id }).visible + + Relation.ways(ways.collect { |w| w[0] }).visible relations = relations.collect { |relation| [relation.id,relation.version] }.uniq end @@ -346,10 +304,12 @@ class AmfController < ApplicationController # check boundary is sane and area within defined # see /config/application.yml - check_boundaries(xmin, ymin, xmax, ymax) + bbox = BoundingBox.new(xmin, ymin, xmax, ymax) + bbox.check_boundaries + bbox.check_size - nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => ["current_ways.visible = ?", false], :include => :ways_via_history) - way_ids = nodes_in_area.collect { |node| node.ways_via_history_ids }.flatten.uniq + nodes_in_area = Node.bbox(bbox).joins(:ways_via_history).where(:current_ways => { :visible => false }) + way_ids = nodes_in_area.collect { |node| node.ways_via_history.invisible.collect { |way| way.id } }.flatten.uniq [0,'',way_ids] end @@ -369,7 +329,7 @@ class AmfController < ApplicationController # Ideally we would do ":include => :nodes" here but if we do that # then rails only seems to return the first copy of a node when a # way includes a node more than once - way = Way.find(:first, :conditions => { :id => wayid }, :include => { :nodes => :node_tags }) + way = Way.where(:id => wayid).preload(:nodes => :node_tags).first # check case where way has been deleted or doesn't exist return [-4, 'way', wayid] if way.nil? or !way.visible @@ -407,13 +367,13 @@ class AmfController < ApplicationController amf_handle_error_with_timeout("'getway_old' #{id}, #{timestamp}", 'way',id) do if timestamp == '' # undelete - old_way = OldWay.find(:first, :conditions => ['visible = ? AND id = ?', true, id], :order => 'version DESC') + old_way = OldWay.where(:visible => true, :way_id => id).order("version DESC").first points = old_way.get_nodes_undelete unless old_way.nil? else begin # revert timestamp = DateTime.strptime(timestamp.to_s, "%d %b %Y, %H:%M:%S") - old_way = OldWay.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC') + old_way = OldWay.where("way_id = ? AND timestamp <= ?", id, timestamp).order("timestamp DESC").first unless old_way.nil? points = old_way.get_nodes_revert(timestamp) if !old_way.visible @@ -509,16 +469,14 @@ class AmfController < ApplicationController if !user then return -1,"You must be logged in to search for GPX traces." end unless user.active_blocks.empty? then return -1,t('application.setup_user_auth.blocked') end - gpxs = [] - if searchterm.to_i>0 then - gpx = Trace.find(searchterm.to_i, :conditions => ["visible=? AND (public=? OR user_id=?)",true,true,user.id] ) - if gpx then - gpxs.push([gpx.id, gpx.name, gpx.description]) - end + query = Trace.visible_to(user) + if searchterm.to_i > 0 then + query = query.where(:id => searchterm.to_i) else - Trace.find(:all, :limit => 21, :conditions => ["visible=? AND (public=? OR user_id=?) AND MATCH(name) AGAINST (?)",true,true,user.id,searchterm] ).each do |gpx| - gpxs.push([gpx.id, gpx.name, gpx.description]) - end + query = query.where("MATCH(name) AGAINST (?)", searchterm).limit(21) + end + gpxs = query.collect do |gpx| + [gpx.id, gpx.name, gpx.description] end [0,'',gpxs] end @@ -535,7 +493,7 @@ class AmfController < ApplicationController def getrelation(relid) #:doc: amf_handle_error("'getrelation' #{relid}" ,'relation',relid) do - rel = Relation.find(:first, :conditions => { :id => relid }) + rel = Relation.where(:id => relid).first return [-4, 'relation', relid] if rel.nil? or !rel.visible [0, '', relid, rel.tags, rel.members, rel.version] @@ -548,12 +506,12 @@ class AmfController < ApplicationController def findrelations(searchterm) rels = [] if searchterm.to_i>0 then - rel = Relation.find(searchterm.to_i) + rel = Relation.where(:id => searchterm.to_i).first if rel and rel.visible then rels.push([rel.id, rel.tags, rel.members, rel.version]) end else - RelationTag.find(:all, :limit => 11, :conditions => ["v like ?", "%#{searchterm}%"] ).each do |t| + RelationTag.where("v like ?", "%#{searchterm}%").limit(11).each do |t| if t.relation.visible then rels.push([t.relation.id, t.relation.tags, t.relation.members, t.relation.version]) end @@ -832,7 +790,7 @@ class AmfController < ApplicationController n = Node.find(id) v = n.version unless timestamp == '' - n = OldNode.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC') + n = OldNode.where("id = ? AND timestamp <= ?", id, timestamp).order("timestamp DESC").first end if n @@ -916,7 +874,7 @@ class AmfController < ApplicationController end def getlocales - Dir.glob("#{RAILS_ROOT}/config/potlatch/locales/*").collect { |f| File.basename(f, ".yml") } + Dir.glob("#{Rails.root}/config/potlatch/locales/*").collect { |f| File.basename(f, ".yml") } end ## @@ -947,7 +905,7 @@ class AmfController < ApplicationController # ==================================================================== # Alternative SQL queries for getway/whichways - def sql_find_ways_in_area(xmin,ymin,xmax,ymax) + def sql_find_ways_in_area(bbox) sql=<<-EOF SELECT DISTINCT current_ways.id AS wayid,current_ways.version AS version FROM current_way_nodes @@ -955,12 +913,12 @@ class AmfController < ApplicationController INNER JOIN current_ways ON current_ways.id =current_way_nodes.id WHERE current_nodes.visible=TRUE AND current_ways.visible=TRUE - AND #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")} + AND #{OSM.sql_for_area(bbox, "current_nodes.")} EOF return ActiveRecord::Base.connection.select_all(sql).collect { |a| [a['wayid'].to_i,a['version'].to_i] } end - def sql_find_pois_in_area(xmin,ymin,xmax,ymax) + def sql_find_pois_in_area(bbox) pois=[] sql=<<-EOF SELECT current_nodes.id,current_nodes.latitude*0.0000001 AS lat,current_nodes.longitude*0.0000001 AS lon,current_nodes.version @@ -968,7 +926,7 @@ class AmfController < ApplicationController LEFT OUTER JOIN current_way_nodes cwn ON cwn.node_id=current_nodes.id WHERE current_nodes.visible=TRUE AND cwn.id IS NULL - AND #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")} + AND #{OSM.sql_for_area(bbox, "current_nodes.")} EOF ActiveRecord::Base.connection.select_all(sql).each do |row| poitags={} @@ -980,7 +938,7 @@ class AmfController < ApplicationController pois end - def sql_find_relations_in_area_and_ways(xmin,ymin,xmax,ymax,way_ids) + def sql_find_relations_in_area_and_ways(bbox,way_ids) # ** It would be more Potlatchy to get relations for nodes within ways # during 'getway', not here sql=<<-EOF @@ -988,7 +946,7 @@ class AmfController < ApplicationController FROM current_relations cr INNER JOIN current_relation_members crm ON crm.id=cr.id INNER JOIN current_nodes cn ON crm.member_id=cn.id AND crm.member_type='Node' - WHERE #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "cn.")} + WHERE #{OSM.sql_for_area(bbox, "cn.")} EOF unless way_ids.empty? sql+=<<-EOF diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 95cc88869..53e14202c 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -1,12 +1,10 @@ class ApiController < ApplicationController + skip_before_filter :verify_authenticity_token before_filter :check_api_readable, :except => [:capabilities] after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout - # Help methods for checking boundary sanity and area size - include MapBoundary - # Get an XML response containing a list of tracepoints that have been uploaded # within the specified bounding box, and in the specified page. def trackpoints @@ -21,25 +19,19 @@ class ApiController < ApplicationController offset = page * TRACEPOINTS_PER_PAGE # Figure out the bbox - bbox = params['bbox'] - unless bbox and bbox.count(',') == 3 - report_error("The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat") - return - end - - bbox = bbox.split(',') - min_lon, min_lat, max_lon, max_lat = sanitise_boundaries(bbox) # check boundary is sane and area within defined # see /config/application.yml begin - check_boundaries(min_lon, min_lat, max_lon, max_lat) + bbox = BoundingBox.from_bbox_params(params) + bbox.check_boundaries + bbox.check_size rescue Exception => err report_error(err.message) return end # get all the points - points = Tracepoint.find_by_area(min_lat, min_lon, max_lat, max_lon, :offset => offset, :limit => TRACEPOINTS_PER_PAGE, :order => "gpx_id DESC, trackid ASC, timestamp ASC" ) + points = Tracepoint.bbox(bbox).offset(offset).limit(TRACEPOINTS_PER_PAGE).order("gpx_id DESC, trackid ASC, timestamp ASC") doc = XML::Document.new doc.encoding = XML::Encoding::UTF_8 @@ -123,29 +115,18 @@ class ApiController < ApplicationController # fetched. Finally all the xml is returned. def map # Figure out the bbox - bbox = params['bbox'] - - unless bbox and bbox.count(',') == 3 - # alternatively: report_error(TEXT['boundary_parameter_required'] - report_error("The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat") - return - end - - bbox = bbox.split(',') - - min_lon, min_lat, max_lon, max_lat = sanitise_boundaries(bbox) - # check boundary is sane and area within defined # see /config/application.yml begin - check_boundaries(min_lon, min_lat, max_lon, max_lat) + bbox = BoundingBox.from_bbox_params(params) + bbox.check_boundaries + bbox.check_size rescue Exception => err report_error(err.message) return end - # FIXME um why is this area using a different order for the lat/lon from above??? - @nodes = Node.find_by_area(min_lat, min_lon, max_lat, max_lon, :conditions => {:visible => true}, :include => :node_tags, :limit => MAX_NUMBER_OF_NODES+1) + @nodes = Node.bbox(bbox).where(:visible => true).includes(:node_tags).limit(MAX_NUMBER_OF_NODES+1) # get all the nodes, by tag not yet working, waiting for change from NickB # need to be @nodes (instance var) so tests in /spec can be performed #@nodes = Node.search(bbox, params[:tag]) @@ -163,12 +144,7 @@ class ApiController < ApplicationController doc = OSM::API.new.get_xml_doc # add bounds - bounds = XML::Node.new 'bounds' - bounds['minlat'] = min_lat.to_s - bounds['minlon'] = min_lon.to_s - bounds['maxlat'] = max_lat.to_s - bounds['maxlon'] = max_lon.to_s - doc.root << bounds + doc.root << bbox.add_bounds_to(XML::Node.new 'bounds') # get ways # find which ways are needed @@ -191,7 +167,7 @@ class ApiController < ApplicationController nodes_to_fetch = (list_of_way_nodes.uniq - node_ids) - [0] if nodes_to_fetch.length > 0 - @nodes += Node.find(nodes_to_fetch, :include => :node_tags) + @nodes += Node.includes(:node_tags).find(nodes_to_fetch) end visible_nodes = {} @@ -213,15 +189,15 @@ class ApiController < ApplicationController end end - relations = Relation.find_for_nodes(visible_nodes.keys, :conditions => {:visible => true}) + - Relation.find_for_ways(way_ids, :conditions => {:visible => true}) + relations = Relation.nodes(visible_nodes.keys).visible + + Relation.ways(way_ids).visible # we do not normally return the "other" partners referenced by an relation, # e.g. if we return a way A that is referenced by relation X, and there's # another way B also referenced, that is not returned. But we do make # an exception for cases where an relation references another *relation*; # in that case we return that as well (but we don't go recursive here) - relations += Relation.find_for_relations(relations.collect { |r| r.id }, :conditions => {:visible => true}) + relations += Relation.relations(relations.collect { |r| r.id }).visible # this "uniq" may be slightly inefficient; it may be better to first collect and output # all node-related relations, then find the *not yet covered* way-related ones etc. @@ -252,8 +228,7 @@ class ApiController < ApplicationController endtime > starttime and endtime - starttime <= 24.hours mask = (1 << zoom) - 1 - tiles = Node.count(:conditions => ["timestamp BETWEEN ? AND ?", starttime, endtime], - :group => "maptile_for_point(latitude, longitude, #{zoom})") + tiles = Node.where(:timestamp => starttime .. endtime).group("maptile_for_point(latitude, longitude, #{zoom})").count doc = OSM::API.new.get_xml_doc changes = XML::Node.new 'changes' diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 655017847..96bf915c0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,9 +1,14 @@ -# Filters added to this controller will be run for all controllers in the application. -# Likewise, all the methods added will be available for all controllers. class ApplicationController < ActionController::Base + protect_from_forgery + if STATUS == :database_readonly or STATUS == :database_offline - session :off + after_filter :clear_session + wrap_parameters false + + def clear_session + session.clear + end def self.cache_sweeper(*sweepers) end @@ -11,9 +16,13 @@ class ApplicationController < ActionController::Base def authorize_web if session[:user] - @user = User.find(session[:user], :conditions => {:status => ["active", "confirmed", "suspended"]}) + @user = User.where(:id => session[:user]).where("status IN ('active', 'confirmed', 'suspended')").first - if @user.status == "suspended" + if @user.display_name != cookies["_osm_username"] + logger.info "Session user '#{@user.display_name}' does not match cookie user '#{cookies['_osm_username']}'" + reset_session + @user = nil + elsif @user.status == "suspended" session.delete(:user) session_expires_automatically @@ -26,20 +35,22 @@ class ApplicationController < ActionController::Base if params[:referer] redirect_to :controller => "user", :action => "terms", :referer => params[:referer] else - redirect_to :controller => "user", :action => "terms", :referer => request.request_uri + redirect_to :controller => "user", :action => "terms", :referer => request.fullpath end end elsif session[:token] - @user = User.authenticate(:token => session[:token]) - session[:user] = @user.id + if @user = User.authenticate(:token => session[:token]) + session[:user] = @user.id + end end rescue Exception => ex logger.info("Exception authorizing user: #{ex.to_s}") + reset_session @user = nil end def require_user - redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri unless @user + redirect_to :controller => 'user', :action => 'login', :referer => request.fullpath unless @user end ## @@ -106,9 +117,7 @@ class ApplicationController < ActionController::Base # is optional. def setup_user_auth # try and setup using OAuth - if oauthenticate - @user = current_token.user - else + if not Authenticator.new(self, [:token]).allow? username, passwd = get_auth_data # parse from headers # authenticate per-scheme if username.nil? @@ -199,7 +208,7 @@ class ApplicationController < ActionController::Base request.headers['X-Error-Format'].downcase == "xml" result = OSM::API.new.get_xml_doc result.root.name = "osmError" - result.root << (XML::Node.new("status") << interpret_status(status)) + result.root << (XML::Node.new("status") << "#{Rack::Utils.status_code(status)} #{Rack::Utils::HTTP_STATUS_CODES[status]}") result.root << (XML::Node.new("message") << message) render :text => result.to_s, :content_type => "text/xml" @@ -239,7 +248,7 @@ class ApplicationController < ActionController::Base end end - I18n.locale = request.compatible_language_from(I18n.available_locales) + I18n.locale = request.compatible_language_from(I18n.available_locales) || I18n.default_locale response.headers['Content-Language'] = I18n.locale.to_s end @@ -358,4 +367,18 @@ private return [user, pass] end + # used by oauth plugin to get the current user + def current_user + @user + end + + # used by oauth plugin to set the current user + def current_user=(user) + @user=user + end + + # override to stop oauth plugin sending errors + def invalid_oauth_response + end + end diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index 2036e4f10..33bdd6630 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -12,8 +12,8 @@ class BrowseController < ApplicationController def relation @type = "relation" @relation = Relation.find(params[:id]) - @next = Relation.find(:first, :order => "id ASC", :conditions => [ "visible = true AND id > :id", { :id => @relation.id }] ) - @prev = Relation.find(:first, :order => "id DESC", :conditions => [ "visible = true AND id < :id", { :id => @relation.id }] ) + @next = Relation.visible.where("id > ?", @relation.id).order("id ASC").first + @prev = Relation.visible.where("id < ?", @relation.id).order("id DESC").first rescue ActiveRecord::RecordNotFound render :action => "not_found", :status => :not_found end @@ -28,8 +28,8 @@ class BrowseController < ApplicationController def way @type = "way" @way = Way.find(params[:id], :include => [:way_tags, {:changeset => :user}, {:nodes => [:node_tags, {:ways => :way_tags}]}, :containing_relation_members]) - @next = Way.find(:first, :order => "id ASC", :conditions => [ "visible = true AND id > :id", { :id => @way.id }] ) - @prev = Way.find(:first, :order => "id DESC", :conditions => [ "visible = true AND id < :id", { :id => @way.id }] ) + @next = Way.visible.where("id > ?", @way.id).order("id ASC").first + @prev = Way.visible.where("id < ?", @way.id).order("id DESC").first # Used for edit link, takes approx middle node of way @midnode = @way.nodes[@way.nodes.length/2] @@ -47,8 +47,8 @@ class BrowseController < ApplicationController def node @type = "node" @node = Node.find(params[:id]) - @next = Node.find(:first, :order => "id ASC", :conditions => [ "visible = true AND id > :id", { :id => @node.id }] ) - @prev = Node.find(:first, :order => "id DESC", :conditions => [ "visible = true AND id < :id", { :id => @node.id }] ) + @next = Node.visible.where("id > ?", @node.id).order("id ASC").first + @prev = Node.visible.where("id < ?", @node.id).order("id DESC").first rescue ActiveRecord::RecordNotFound render :action => "not_found", :status => :not_found end @@ -69,12 +69,12 @@ class BrowseController < ApplicationController @relation_pages, @relations = paginate(:old_relations, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'relation_page') @title = "#{I18n.t('browse.changeset.title')} | #{@changeset.id}" - @next = Changeset.find(:first, :order => "id ASC", :conditions => [ "id > :id", { :id => @changeset.id }] ) - @prev = Changeset.find(:first, :order => "id DESC", :conditions => [ "id < :id", { :id => @changeset.id }] ) + @next = Changeset.where("id > ?", @changeset.id).order("id ASC").first + @prev = Changeset.where("id < ?", @changeset.id).order("id DESC").first if @changeset.user.data_public? - @next_by_user = Changeset.find(:first, :order => "id ASC", :conditions => [ "id > :id AND user_id = :user_id", { :id => @changeset.id, :user_id => @changeset.user_id }] ) - @prev_by_user = Changeset.find(:first, :order => "id DESC", :conditions => [ "id < :id AND user_id = :user_id", { :id => @changeset.id, :user_id => @changeset.user_id }] ) + @next_by_user = Changeset.where("user_id = ? AND id > ?", @changeset.user_id, @changeset.id).order("id ASC").first + @prev_by_user = Changeset.where("user_id = ? AND id < ?", @changeset.user_id, @changeset.id).order("id DESC").first end rescue ActiveRecord::RecordNotFound render :action => "not_found", :status => :not_found diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 45b5f80f9..b736e332b 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -4,22 +4,18 @@ class ChangesetController < ApplicationController layout 'site' require 'xml/libxml' - before_filter :authorize_web, :only => [:list] - before_filter :set_locale, :only => [:list] + skip_before_filter :verify_authenticity_token, :except => [:list] + before_filter :authorize_web, :only => [:list, :feed] + before_filter :set_locale, :only => [:list, :feed] before_filter :authorize, :only => [:create, :update, :delete, :upload, :include, :close] before_filter :require_allow_write_api, :only => [:create, :update, :delete, :upload, :include, :close] before_filter :require_public_data, :only => [:create, :update, :delete, :upload, :include, :close] before_filter :check_api_writable, :only => [:create, :update, :delete, :upload, :include] - before_filter :check_api_readable, :except => [:create, :update, :delete, :upload, :download, :query, :list] - before_filter(:only => [:list]) { |c| c.check_database_readable(true) } + before_filter :check_api_readable, :except => [:create, :update, :delete, :upload, :download, :query, :list, :feed] + before_filter(:only => [:list, :feed]) { |c| c.check_database_readable(true) } after_filter :compress_output - around_filter :api_call_handle_error, :except => [:list] - around_filter :web_timeout, :only => [:list] - - filter_parameter_logging " [:list, :feed] + around_filter :web_timeout, :only => [:list, :feed] # Helper methods for checking consistency include ConsistencyValidations @@ -178,18 +174,12 @@ class ChangesetController < ApplicationController created = XML::Node.new "create" created << elt.to_xml_node else - # get the previous version from the element history - prev_elt = elt.class.find(:first, :conditions => - ['id = ? and version = ?', - elt.id, elt.version]) unless elt.visible - # if the element isn't visible then it must have been deleted, so - # output the *previous* XML + # if the element isn't visible then it must have been deleted deleted = XML::Node.new "delete" - deleted << prev_elt.to_xml_node + deleted << elt.to_xml_node else - # must be a modify, for which we don't need the previous version - # yet... + # must be a modify modified = XML::Node.new "modify" modified << elt.to_xml_node end @@ -202,22 +192,25 @@ class ChangesetController < ApplicationController ## # query changesets by bounding box, time, user or open/closed status. def query + # find any bounding box + if params['bbox'] + bbox = BoundingBox.from_bbox_params(params) + end + # create the conditions that the user asked for. some or all of # these may be nil. - conditions = conditions_bbox(params['bbox']) - conditions = cond_merge conditions, conditions_user(params['user'], params['display_name']) - conditions = cond_merge conditions, conditions_time(params['time']) - conditions = cond_merge conditions, conditions_open(params['open']) - conditions = cond_merge conditions, conditions_closed(params['closed']) + changesets = Changeset.scoped + changesets = conditions_bbox(changesets, bbox) + changesets = conditions_user(changesets, params['user'], params['display_name']) + changesets = conditions_time(changesets, params['time']) + changesets = conditions_open(changesets, params['open']) + changesets = conditions_closed(changesets, params['closed']) # create the results document results = OSM::API.new.get_xml_doc # add all matching changesets to the XML results document - Changeset.find(:all, - :conditions => conditions, - :limit => 100, - :order => 'created_at desc').each do |cs| + changesets.order("created_at DESC").limit(100).each do |cs| results.root << cs.to_xml_node end @@ -249,41 +242,48 @@ class ChangesetController < ApplicationController end end - - ## # list edits (open changesets) in reverse chronological order def list if request.format == :atom and params[:page] redirect_to params.merge({ :page => nil }), :status => :moved_permanently else - conditions = conditions_nonempty + changesets = conditions_nonempty(Changeset.scoped) if params[:display_name] - user = User.find_by_display_name(params[:display_name], :conditions => { :status => ["active", "confirmed"] }) + user = User.find_by_display_name(params[:display_name]) - if user + if user and user.active? if user.data_public? or user == @user - conditions = cond_merge conditions, ['user_id = ?', user.id] + changesets = changesets.where(:user_id => user.id) else - conditions = cond_merge conditions, ['false'] + changesets = changesets.where("false") end elsif request.format == :html @title = t 'user.no_such_user.title' @not_found_user = params[:display_name] render :template => 'user/no_such_user', :status => :not_found + return end end + if params[:friends] + if @user + changesets = changesets.where(:user_id => @user.friend_users.public) + elsif request.format == :html + require_user + return + end + end + if params[:bbox] - bbox = params[:bbox] + bbox = BoundingBox.from_bbox_params(params) elsif params[:minlon] and params[:minlat] and params[:maxlon] and params[:maxlat] - bbox = params[:minlon] + ',' + params[:minlat] + ',' + params[:maxlon] + ',' + params[:maxlat] + bbox = BoundingBox.from_lon_lat_params(params) end - + if bbox - conditions = cond_merge conditions, conditions_bbox(bbox) - bbox = BoundingBox.from_s(bbox) + changesets = conditions_bbox(changesets, bbox) bbox_link = render_to_string :partial => "bbox", :object => bbox end @@ -291,7 +291,11 @@ class ChangesetController < ApplicationController user_link = render_to_string :partial => "user", :object => user end - if user and bbox + if params[:friends] and @user + @title = t 'changeset.list.title_friend' + @heading = t 'changeset.list.heading_friend' + @description = t 'changeset.list.description_friend' + elsif user and bbox @title = t 'changeset.list.title_user_bbox', :user => user.display_name, :bbox => bbox.to_s @heading = t 'changeset.list.heading_user_bbox', :user => user.display_name, :bbox => bbox.to_s @description = t 'changeset.list.description_user_bbox', :user => user_link, :bbox => bbox_link @@ -314,13 +318,16 @@ class ChangesetController < ApplicationController @bbox = bbox - @edits = Changeset.find(:all, - :include => [:user, :changeset_tags], - :conditions => conditions, - :order => "changesets.created_at DESC", - :offset => (@page - 1) * @page_size, - :limit => @page_size) + @edits = changesets.order("changesets.created_at DESC").offset((@page - 1) * @page_size).limit(@page_size).preload(:user, :changeset_tags) end + + render :action => :list + end + + ## + # list edits as an atom feed + def feed + list end private @@ -329,42 +336,24 @@ private #------------------------------------------------------------ ## - # merge two conditions - def cond_merge(a, b) - if a and b - a_str = a.shift - b_str = b.shift - return [ a_str + " AND " + b_str ] + a + b - elsif a - return a - else b - return b - end - end - - ## - # if a bounding box was specified then parse it and do some sanity - # checks. this is mostly the same as the map call, but without the - # area restriction. - def conditions_bbox(bbox) - unless bbox.nil? - raise OSM::APIBadUserInput.new("Bounding box should be min_lon,min_lat,max_lon,max_lat") unless bbox.count(',') == 3 - bbox = sanitise_boundaries(bbox.split(/,/)) - raise OSM::APIBadUserInput.new("Minimum longitude should be less than maximum.") unless bbox[0] <= bbox[2] - raise OSM::APIBadUserInput.new("Minimum latitude should be less than maximum.") unless bbox[1] <= bbox[3] - return ['min_lon < ? and max_lon > ? and min_lat < ? and max_lat > ?', - (bbox[2] * GeoRecord::SCALE).to_i, - (bbox[0] * GeoRecord::SCALE).to_i, - (bbox[3] * GeoRecord::SCALE).to_i, - (bbox[1] * GeoRecord::SCALE).to_i] + # if a bounding box was specified do some sanity checks. + # restrict changesets to those enclosed by a bounding box + # we need to return both the changesets and the bounding box + def conditions_bbox(changesets, bbox) + if bbox + bbox.check_boundaries + bbox = bbox.to_scaled + return changesets.where("min_lon < ? and max_lon > ? and min_lat < ? and max_lat > ?", + bbox.max_lon.to_i, bbox.min_lon.to_i, + bbox.max_lat.to_i, bbox.min_lat.to_i) else - return nil + return changesets end end ## # restrict changesets to those by a particular user - def conditions_user(user, name) + def conditions_user(changesets, user, name) unless user.nil? and name.nil? # shouldn't provide both name and UID raise OSM::APIBadUserInput.new("provide either the user ID or display name, but not both") if user and name @@ -390,15 +379,15 @@ private raise OSM::APINotFoundError if @user.nil? or @user.id != u.id end - return ['user_id = ?', u.id] + return changesets.where(:user_id => u.id) else - return nil + return changesets end end ## # restrict changes to those closed during a particular time period - def conditions_time(time) + def conditions_time(changesets, time) unless time.nil? # if there is a range, i.e: comma separated, then the first is # low, second is high - same as with bounding boxes. @@ -408,13 +397,13 @@ private raise OSM::APIBadUserInput.new("bad time range") if times.size != 2 from, to = times.collect { |t| DateTime.parse(t) } - return ['closed_at >= ? and created_at <= ?', from, to] + return changesets.where("closed_at >= ? and created_at <= ?", from, to) else # if there is no comma, assume its a lower limit on time - return ['closed_at >= ?', DateTime.parse(time)] + return changesets.where("closed_at >= ?", DateTime.parse(time)) end else - return nil + return changesets end # stupid DateTime seems to throw both of these for bad parsing, so # we have to catch both and ensure the correct code path is taken. @@ -428,25 +417,33 @@ private # return changesets which are open (haven't been closed yet) # we do this by seeing if the 'closed at' time is in the future. Also if we've # hit the maximum number of changes then it counts as no longer open. - # if parameter 'open' is nill then open and closed changsets are returned - def conditions_open(open) - return open.nil? ? nil : ['closed_at >= ? and num_changes <= ?', - Time.now.getutc, Changeset::MAX_ELEMENTS] + # if parameter 'open' is nill then open and closed changesets are returned + def conditions_open(changesets, open) + if open.nil? + return changesets + else + return changesets.where("closed_at >= ? and num_changes <= ?", + Time.now.getutc, Changeset::MAX_ELEMENTS) + end end ## # query changesets which are closed # ('closed at' time has passed or changes limit is hit) - def conditions_closed(closed) - return closed.nil? ? nil : ['(closed_at < ? or num_changes > ?)', - Time.now.getutc, Changeset::MAX_ELEMENTS] + def conditions_closed(changesets, closed) + if closed.nil? + return changesets + else + return changesets.where("closed_at < ? or num_changes > ?", + Time.now.getutc, Changeset::MAX_ELEMENTS) + end end ## # eliminate empty changesets (where the bbox has not been set) # this should be applied to all changeset list displays - def conditions_nonempty() - return ['num_changes > 0'] + def conditions_nonempty(changesets) + return changesets.where("num_changes > 0") end end diff --git a/app/controllers/diary_entry_controller.rb b/app/controllers/diary_entry_controller.rb index 52ce742bf..0444f5a89 100644 --- a/app/controllers/diary_entry_controller.rb +++ b/app/controllers/diary_entry_controller.rb @@ -20,7 +20,7 @@ class DiaryEntryController < ApplicationController @diary_entry.user = @user if @diary_entry.save - default_lang = @user.preferences.find(:first, :conditions => {:k => "diary.default_language"}) + default_lang = @user.preferences.where(:k => "diary.default_language").first if default_lang default_lang.v = @diary_entry.language_code default_lang.save! @@ -32,7 +32,7 @@ class DiaryEntryController < ApplicationController render :action => 'edit' end else - default_lang = @user.preferences.find(:first, :conditions => {:k => "diary.default_language"}) + default_lang = @user.preferences.where(:k => "diary.default_language").first lang_code = default_lang ? default_lang.v : @user.preferred_language @diary_entry = DiaryEntry.new(:language_code => lang_code) render :action => 'edit' @@ -60,7 +60,7 @@ class DiaryEntryController < ApplicationController @diary_comment.user = @user if @diary_comment.save if @diary_comment.user != @entry.user - Notifier::deliver_diary_comment_notification(@diary_comment) + Notifier.diary_comment_notification(@diary_comment).deliver end redirect_to :controller => 'diary_entry', :action => 'view', :display_name => @entry.user.display_name, :id => @entry.id @@ -71,7 +71,7 @@ class DiaryEntryController < ApplicationController def list if params[:display_name] - @this_user = User.find_by_display_name(params[:display_name], :conditions => { :status => ["active", "confirmed"] }) + @this_user = User.active.find_by_display_name(params[:display_name]) if @this_user @title = t 'diary_entry.list.user_title', :user => @this_user.display_name @@ -111,19 +111,13 @@ class DiaryEntryController < ApplicationController end def rss - request.format = :rss + @entries = DiaryEntry.includes(:user).order("created_at DESC").limit(20) if params[:display_name] - user = User.find_by_display_name(params[:display_name], :conditions => { :status => ["active", "confirmed"] }) + user = User.active.find_by_display_name(params[:display_name]) if user - @entries = DiaryEntry.find(:all, - :conditions => { - :user_id => user.id, - :visible => true - }, - :order => 'created_at DESC', - :limit => 20) + @entries = user.diary_entries.visible @title = I18n.t('diary_entry.feed.user.title', :user => user.display_name) @description = I18n.t('diary_entry.feed.user.description', :user => user.display_name) @link = "http://#{SERVER_URL}/user/#{user.display_name}/diary" @@ -131,25 +125,12 @@ class DiaryEntryController < ApplicationController render :nothing => true, :status => :not_found end elsif params[:language] - @entries = DiaryEntry.find(:all, :include => :user, - :conditions => { - :users => { :status => ["active", "confirmed"] }, - :visible => true, - :language_code => params[:language] - }, - :order => 'created_at DESC', - :limit => 20) + @entries = @entries.visible.where(:language_code => params[:language]).joins(:user).where(:users => { :status => ["active", "confirmed"] }) @title = I18n.t('diary_entry.feed.language.title', :language_name => Language.find(params[:language]).english_name) @description = I18n.t('diary_entry.feed.language.description', :language_name => Language.find(params[:language]).english_name) @link = "http://#{SERVER_URL}/diary/#{params[:language]}" else - @entries = DiaryEntry.find(:all, :include => :user, - :conditions => { - :users => { :status => ["active", "confirmed"] }, - :visible => true - }, - :order => 'created_at DESC', - :limit => 20) + @entries = @entries.visible.joins(:user).where(:users => { :status => ["active", "confirmed"] }) @title = I18n.t('diary_entry.feed.all.title') @description = I18n.t('diary_entry.feed.all.description') @link = "http://#{SERVER_URL}/diary" @@ -157,14 +138,10 @@ class DiaryEntryController < ApplicationController end def view - user = User.find_by_display_name(params[:display_name], :conditions => { :status => ["active", "confirmed"] }) + user = User.active.find_by_display_name(params[:display_name]) if user - @entry = DiaryEntry.find(:first, :conditions => { - :id => params[:id], - :user_id => user.id, - :visible => true - }) + @entry = user.diary_entries.visible.where(:id => params[:id]).first if @entry @title = t 'diary_entry.view.title', :user => params[:display_name], :title => @entry.title else diff --git a/app/controllers/export_controller.rb b/app/controllers/export_controller.rb index 225ddf86b..cc3ed70c5 100644 --- a/app/controllers/export_controller.rb +++ b/app/controllers/export_controller.rb @@ -8,7 +8,7 @@ class ExportController < ApplicationController #When the user clicks 'Export' we redirect to a URL which generates the export download def finish - bbox = BoundingBox.new(params[:minlon], params[:minlat], params[:maxlon], params[:maxlat]) + bbox = BoundingBox.from_lon_lat_params(params) format = params[:format] if format == "osm" diff --git a/app/controllers/geocoder_controller.rb b/app/controllers/geocoder_controller.rb index 29e7648af..c55c85833 100644 --- a/app/controllers/geocoder_controller.rb +++ b/app/controllers/geocoder_controller.rb @@ -28,11 +28,6 @@ class GeocoderController < ApplicationController @sources.push "osm_nominatim" @sources.push "geonames" end - - render :update do |page| - page.replace_html :sidebar_content, :partial => "search" - page.call "openSidebar" - end end def search_latlon @@ -264,9 +259,9 @@ class GeocoderController < ApplicationController end render :action => "results" - rescue Exception => ex - @error = "Error contacting nominatim.openstreetmap.org: #{ex.to_s}" - render :action => "error" +# rescue Exception => ex +# @error = "Error contacting nominatim.openstreetmap.org: #{ex.to_s}" +# render :action => "error" end def search_geonames @@ -302,11 +297,6 @@ class GeocoderController < ApplicationController @sources.push({ :name => "osm_nominatim" }) @sources.push({ :name => "geonames" }) - - render :update do |page| - page.replace_html :sidebar_content, :partial => "description" - page.call "openSidebar" - end end def description_osm_namefinder diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index 82e3f30f2..ec183fc3e 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -15,7 +15,7 @@ class MessageController < ApplicationController @to_user = User.find_by_display_name(params[:display_name]) if @to_user if params[:message] - if @user.sent_messages.count(:conditions => ["sent_on >= ?", Time.now.getutc - 1.hour]) >= MAX_MESSAGES_PER_HOUR + if @user.sent_messages.where("sent_on >= ?", Time.now.getutc - 1.hour).count >= MAX_MESSAGES_PER_HOUR flash[:error] = t 'message.new.limit_exceeded' else @message = Message.new(params[:message]) @@ -25,7 +25,7 @@ class MessageController < ApplicationController if @message.save flash[:notice] = t 'message.new.message_sent' - Notifier::deliver_message_notification(@message) + Notifier.message_notification(@message).deliver redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name end end @@ -57,7 +57,7 @@ class MessageController < ApplicationController render :action => 'new' else flash[:notice] = t 'message.reply.wrong_user', :user => @user.display_name - redirect_to :controller => "user", :action => "login", :referer => request.request_uri + redirect_to :controller => "user", :action => "login", :referer => request.fullpath end rescue ActiveRecord::RecordNotFound @title = t'message.no_such_message.title' @@ -74,7 +74,7 @@ class MessageController < ApplicationController @message.save else flash[:notice] = t 'message.read.wrong_user', :user => @user.display_name - redirect_to :controller => "user", :action => "login", :referer => request.request_uri + redirect_to :controller => "user", :action => "login", :referer => request.fullpath end rescue ActiveRecord::RecordNotFound @title = t'message.no_such_message.title' @@ -103,7 +103,7 @@ class MessageController < ApplicationController def mark if params[:message_id] id = params[:message_id] - message = Message.find_by_id(id, :conditions => ["to_user_id = ? or from_user_id = ?", @user.id, @user.id]) + @message = Message.where(:id => id).where("to_user_id = ? OR from_user_id = ?", @user.id, @user.id).first if params[:mark] == 'unread' message_read = false notice = t 'message.mark.as_unread' @@ -111,15 +111,9 @@ class MessageController < ApplicationController message_read = true notice = t 'message.mark.as_read' end - message.message_read = message_read - if message.save - if request.xhr? - render :update do |page| - page.replace "inboxanchor", :partial => "layouts/inbox" - page.replace "inbox-count", :partial => "message_count" - page.replace "inbox-#{message.id}", :partial => "message_summary", :object => message - end - else + @message.message_read = message_read + if @message.save + if not request.xhr? flash[:notice] = notice redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name end @@ -134,7 +128,7 @@ class MessageController < ApplicationController def delete if params[:message_id] id = params[:message_id] - message = Message.find_by_id(id, :conditions => ["to_user_id = ? or from_user_id = ?", @user.id, @user.id]) + message = Message.where(:id => id).where("to_user_id = ? OR from_user_id = ?", @user.id, @user.id).first message.from_user_visible = false if message.sender == @user message.to_user_visible = false if message.recipient == @user if message.save diff --git a/app/controllers/node_controller.rb b/app/controllers/node_controller.rb index 33e0ed3ee..5064a3c0b 100644 --- a/app/controllers/node_controller.rb +++ b/app/controllers/node_controller.rb @@ -3,6 +3,7 @@ class NodeController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_allow_write_api, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] @@ -26,7 +27,7 @@ class NodeController < ApplicationController def read node = Node.find(params[:id]) if node.visible? - response.headers['Last-Modified'] = node.timestamp.rfc822 + response.last_modified = node.timestamp render :text => node.to_xml.to_s, :content_type => "text/xml" else render :text => "", :status => :gone diff --git a/app/controllers/note_controller.rb b/app/controllers/note_controller.rb index 9c41497d0..1ee529c79 100644 --- a/app/controllers/note_controller.rb +++ b/app/controllers/note_controller.rb @@ -18,33 +18,30 @@ class NoteController < ApplicationController # Figure out the bbox - we prefer a bbox argument but also # support the old, deprecated, method with four arguments if params[:bbox] - raise OSM::APIBadUserInput.new("Invalid bbox") unless params[:bbox].count(",") == 3 - - bbox = params[:bbox].split(",") + bbox = BoundingBox.from_bbox_params(params) else raise OSM::APIBadUserInput.new("No l was given") unless params[:l] raise OSM::APIBadUserInput.new("No r was given") unless params[:r] raise OSM::APIBadUserInput.new("No b was given") unless params[:b] raise OSM::APIBadUserInput.new("No t was given") unless params[:t] - bbox = [ params[:l], params[:b], params[:r], params[:t] ] + bbox = BoundingBox.from_lrbt_params(params) end # Get the sanitised boundaries @min_lon, @min_lat, @max_lon, @max_lat = sanitise_boundaries(bbox) # Get any conditions that need to be applied - conditions = closed_condition + notes = closed_condition(Note.scoped) # Check that the boundaries are valid - check_boundaries(@min_lon, @min_lat, @max_lon, @max_lat, MAX_NOTE_REQUEST_AREA) + bbox.check_boundaries + + # Check the the bounding box is not too big + bbox.check_size(MAX_NOTE_REQUEST_AREA) # Find the notes we want to return - @notes = Note.find_by_area(@min_lat, @min_lon, @max_lat, @max_lon, - :include => :comments, - :conditions => conditions, - :order => "updated_at DESC", - :limit => result_limit) + @notes = notes.bbox(bbox).order("updated_at DESC").limit(result_limit).preload(:comments) # Render the result respond_to do |format| @@ -156,26 +153,20 @@ class NoteController < ApplicationController # Get a feed of recent notes and comments def rss # Get any conditions that need to be applied - conditions = closed_condition + notes = closed_condition(Note.scoped) # Process any bbox if params[:bbox] - raise OSM::APIBadUserInput.new("Invalid bbox") unless params[:bbox].count(",") == 3 + bbox = BoundingBox.from_bbox_params(params) - @min_lon, @min_lat, @max_lon, @max_lat = sanitise_boundaries(params[:bbox].split(',')) + bbox.check_boundaries + bbox.check_size(MAX_NOTE_REQUEST_AREA) - check_boundaries(@min_lon, @min_lat, @max_lon, @max_lat, MAX_NOTE_REQUEST_AREA) - - conditions = cond_merge conditions, [OSM.sql_for_area(@min_lat, @min_lon, @max_lat, @max_lon, "notes.")] + notes = notes.bbox(bbox) end # Find the comments we want to return - @comments = NoteComment.find(:all, - :conditions => conditions, - :order => "created_at DESC", - :limit => result_limit, - :joins => :note, - :include => :note) + @comments = NoteComment.where(:note => notes).order("created_at DESC").limit(result_limit).include(:note) # Render the result respond_to do |format| @@ -302,21 +293,6 @@ private # utility functions below. #------------------------------------------------------------ - ## - # merge two conditions - # TODO: this is a copy from changeset_controler.rb and should be factored out to share - def cond_merge(a, b) - if a and b - a_str = a.shift - b_str = b.shift - return [ a_str + " AND " + b_str ] + a + b - elsif a - return a - else b - return b - end - end - ## # Render an OK response def render_ok @@ -341,7 +317,7 @@ private ## # Generate a condition to choose which bugs we want based # on their status and the user's request parameters - def closed_condition + def closed_condition(notes) if params[:closed] closed_since = params[:closed].to_i else @@ -349,14 +325,14 @@ private end if closed_since < 0 - conditions = ["status != 'hidden'"] + notes = notes.where("status != 'hidden'") elsif closed_since > 0 - conditions = ["(status = 'open' OR (status = 'closed' AND closed_at > '#{Time.now - closed_since.days}'))"] + notes = notes.where("(status = 'open' OR (status = 'closed' AND closed_at > '#{Time.now - closed_since.days}'))") else - conditions = ["status = 'open'"] + notes = notes.where("status = 'open'") end - return conditions + return notes end ## diff --git a/app/controllers/oauth_clients_controller.rb b/app/controllers/oauth_clients_controller.rb index f90302894..56f19dbda 100644 --- a/app/controllers/oauth_clients_controller.rb +++ b/app/controllers/oauth_clients_controller.rb @@ -7,7 +7,7 @@ class OauthClientsController < ApplicationController def index @client_applications = @user.client_applications - @tokens = @user.oauth_tokens.find :all, :conditions => 'oauth_tokens.invalidated_at is null and oauth_tokens.authorized_at is not null' + @tokens = @user.oauth_tokens.authorized end def new diff --git a/app/controllers/oauth_controller.rb b/app/controllers/oauth_controller.rb index 5c84be0cf..d4d1bd888 100644 --- a/app/controllers/oauth_controller.rb +++ b/app/controllers/oauth_controller.rb @@ -1,68 +1,67 @@ +require 'oauth/controllers/provider_controller' + class OauthController < ApplicationController + include OAuth::Controllers::ProviderController + layout 'slim' - before_filter :authorize_web, :only => [:oauthorize, :revoke] - before_filter :set_locale, :only => [:oauthorize, :revoke] - before_filter :require_user, :only => [:oauthorize] - before_filter :verify_oauth_consumer_signature, :only => [:request_token] - before_filter :verify_oauth_request_token, :only => [:access_token] - # Uncomment the following if you are using restful_open_id_authentication - # skip_before_filter :verify_authenticity_token + def login_required + authorize_web + set_locale + require_user + end - def request_token - @token = current_client_application.create_request_token + def user_authorizes_token? + any_auth = false - if @token - logger.info "request token params: #{params.inspect}" - # request tokens indicate what permissions the client *wants*, not - # necessarily the same as those which the user allows. - current_client_application.permissions.each do |pref| + @token.client_application.permissions.each do |pref| + if params[pref] @token.write_attribute(pref, true) + any_auth ||= true + else + @token.write_attribute(pref, false) end - @token.save! - - render :text => @token.to_query - else - render :nothing => true, :status => 401 end + + any_auth end - def access_token - @token = current_token && current_token.exchange! + def revoke + @token = current_user.oauth_tokens.find_by_token params[:token] if @token - render :text => @token.to_query - else - render :nothing => true, :status => 401 + @token.invalidate! + flash[:notice] = t('oauth.revoke.flash', :application => @token.client_application.name) end + redirect_to :controller => 'oauth_clients', :action => 'index' end - def oauthorize - @token = RequestToken.find_by_token params[:oauth_token] - unless @token.nil? or @token.invalidated? - if request.post? - any_auth = false - @token.client_application.permissions.each do |pref| - if params[pref] - @token.write_attribute(pref, true) - any_auth ||= true - else - @token.write_attribute(pref, false) - end - end +protected + + def oauth1_authorize + unless @token + render :action=>"authorize_failure" + return + end - if any_auth - @token.authorize!(@user) + unless @token.invalidated? + if request.post? + if user_authorizes_token? + @token.authorize!(current_user) if @token.oauth10? - redirect_url = params[:oauth_callback] || @token.client_application.callback_url + callback_url = params[:oauth_callback] || @token.client_application.callback_url else - redirect_url = @token.oob? ? @token.client_application.callback_url : @token.callback_url + callback_url = @token.oob? ? @token.client_application.callback_url : @token.callback_url end - if redirect_url and not redirect_url.empty? - if @token.oauth10? - redirect_to "#{redirect_url}?oauth_token=#{@token.token}" - else - redirect_to "#{redirect_url}?oauth_token=#{@token.token}&oauth_verifier=#{@token.verifier}" + @redirect_url = URI.parse(callback_url) unless callback_url.blank? + + unless @redirect_url.to_s.blank? + @redirect_url.query = @redirect_url.query.blank? ? + "oauth_token=#{@token.token}" : + @redirect_url.query + "&oauth_token=#{@token.token}" + unless @token.oauth10? + @redirect_url.query += "&oauth_verifier=#{@token.verifier}" end + redirect_to @redirect_url.to_s else render :action => "authorize_success" end @@ -75,13 +74,4 @@ class OauthController < ApplicationController render :action => "authorize_failure" end end - - def revoke - @token = @user.oauth_tokens.find_by_token params[:token] - if @token - @token.invalidate! - flash[:notice] = t('oauth.revoke.flash', :application => @token.client_application.name) - end - redirect_to :controller => 'oauth_clients', :action => 'index' - end end diff --git a/app/controllers/old_node_controller.rb b/app/controllers/old_node_controller.rb index c20dacf48..615213ac1 100644 --- a/app/controllers/old_node_controller.rb +++ b/app/controllers/old_node_controller.rb @@ -1,6 +1,7 @@ class OldNodeController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout @@ -18,18 +19,15 @@ class OldNodeController < ApplicationController end def version - old_node = OldNode.find(:first, :conditions => {:id => params[:id], :version => params[:version]} ) - if old_node.nil? - # (RecordNotFound is not raised with find :first...) + if old_node = OldNode.where(:node_id => params[:id], :version => params[:version]).first + response.last_modified = old_node.timestamp + + doc = OSM::API.new.get_xml_doc + doc.root << old_node.to_xml_node + + render :text => doc.to_s, :content_type => "text/xml" + else render :nothing => true, :status => :not_found - return end - - response.headers['Last-Modified'] = old_node.timestamp.rfc822 - - doc = OSM::API.new.get_xml_doc - doc.root << old_node.to_xml_node - - render :text => doc.to_s, :content_type => "text/xml" end end diff --git a/app/controllers/old_relation_controller.rb b/app/controllers/old_relation_controller.rb index eb274c4de..19b4e5d34 100644 --- a/app/controllers/old_relation_controller.rb +++ b/app/controllers/old_relation_controller.rb @@ -1,6 +1,7 @@ class OldRelationController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout @@ -17,18 +18,15 @@ class OldRelationController < ApplicationController end def version - old_relation = OldRelation.find(:first, :conditions => {:id => params[:id], :version => params[:version]} ) - if old_relation.nil? - # (RecordNotFound is not raised with find :first...) + if old_relation = OldRelation.where(:relation_id => params[:id], :version => params[:version]).first + response.last_modified = old_relation.timestamp + + doc = OSM::API.new.get_xml_doc + doc.root << old_relation.to_xml_node + + render :text => doc.to_s, :content_type => "text/xml" + else render :nothing => true, :status => :not_found - return end - - response.headers['Last-Modified'] = old_relation.timestamp.rfc822 - - doc = OSM::API.new.get_xml_doc - doc.root << old_relation.to_xml_node - - render :text => doc.to_s, :content_type => "text/xml" end end diff --git a/app/controllers/old_way_controller.rb b/app/controllers/old_way_controller.rb index 96c88d492..3836d4ab7 100644 --- a/app/controllers/old_way_controller.rb +++ b/app/controllers/old_way_controller.rb @@ -1,6 +1,7 @@ class OldWayController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :check_api_readable after_filter :compress_output around_filter :api_call_handle_error, :api_call_timeout @@ -18,18 +19,15 @@ class OldWayController < ApplicationController end def version - old_way = OldWay.find(:first, :conditions => {:id => params[:id], :version => params[:version]} ) - if old_way.nil? - # (RecordNotFound is not raised with find :first...) + if old_way = OldWay.where(:way_id => params[:id], :version => params[:version]).first + response.last_modified = old_way.timestamp + + doc = OSM::API.new.get_xml_doc + doc.root << old_way.to_xml_node + + render :text => doc.to_s, :content_type => "text/xml" + else render :nothing => true, :status => :not_found - return end - - response.headers['Last-Modified'] = old_way.timestamp.rfc822 - - doc = OSM::API.new.get_xml_doc - doc.root << old_way.to_xml_node - - render :text => doc.to_s, :content_type => "text/xml" end end diff --git a/app/controllers/relation_controller.rb b/app/controllers/relation_controller.rb index 390806f80..0b989d11e 100644 --- a/app/controllers/relation_controller.rb +++ b/app/controllers/relation_controller.rb @@ -1,6 +1,7 @@ class RelationController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_allow_write_api, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] @@ -26,7 +27,7 @@ class RelationController < ApplicationController def read relation = Relation.find(params[:id]) - response.headers['Last-Modified'] = relation.timestamp.rfc822 + response.last_modified = relation.timestamp if relation.visible render :text => relation.to_xml.to_s, :content_type => "text/xml" else @@ -81,8 +82,8 @@ class RelationController < ApplicationController # next load the relations and the ways. - relations = Relation.find(relation_ids, :include => [:relation_tags]) - ways = Way.find(way_ids, :include => [:way_nodes, :way_tags]) + relations = Relation.where(:id => relation_ids).includes(:relation_tags) + ways = Way.where(:id => way_ids).includes(:way_nodes, :way_tags) # now additionally collect nodes referenced by ways. Note how we # recursively evaluate ways but NOT relations. @@ -91,7 +92,7 @@ class RelationController < ApplicationController way.way_nodes.collect { |way_node| way_node.node_id } } node_ids += way_node_ids.flatten - nodes = Node.find(node_ids.uniq, :include => :node_tags) + nodes = Node.where(:id => node_ids.uniq).includes(:node_tags) # create XML. doc = OSM::API.new.get_xml_doc @@ -157,7 +158,7 @@ class RelationController < ApplicationController end def relations_for_object(objtype) - relationids = RelationMember.find(:all, :conditions => ['member_type=? and member_id=?', objtype, params[:id]]).collect { |ws| ws.id[0] }.uniq + relationids = RelationMember.where(:member_type => objtype, :member_id => params[:id]).collect { |ws| ws.relation_id }.uniq doc = OSM::API.new.get_xml_doc diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 520aa5a6f..622ebb1ce 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -2,6 +2,7 @@ class SearchController < ApplicationController # Support searching for nodes, ways, or all # Can search by tag k, v, or both (type->k,value->v) # Can search by name (k=name,v=....) + skip_before_filter :verify_authenticity_token after_filter :compress_output def search_all @@ -41,69 +42,34 @@ class SearchController < ApplicationController return false end - way_ids = Array.new - ways = Array.new - nodes = Array.new - relations = Array.new - # Matching for node tags table - cond_node = Array.new - sql = '1=1' - if type - sql += ' AND current_node_tags.k=?' - cond_node += [type] - end - if value - sql += ' AND current_node_tags.v=?' - cond_node += [value] + if do_nodes + nodes = Node.joins(:node_tags) + nodes = nodes.where(:current_node_tags => { :k => type }) if type + nodes = nodes.where(:current_node_tags => { :v => value }) if value + nodes = nodes.limit(100) + else + nodes = Array.new end - cond_node = [sql] + cond_node # Matching for way tags table - cond_way = Array.new - sql = '1=1' - if type - sql += ' AND current_way_tags.k=?' - cond_way += [type] - end - if value - sql += ' AND current_way_tags.v=?' - cond_way += [value] + if do_ways + ways = Way.joins(:way_tags) + ways = ways.where(:current_way_tags => { :k => type }) if type + ways = ways.where(:current_way_tags => { :v => value }) if value + ways = ways.limit(100) + else + ways = Array.new end - cond_way = [sql] + cond_way # Matching for relation tags table - cond_rel = Array.new - sql = '1=1' - if type - sql += ' AND current_relation_tags.k=?' - cond_rel += [type] - end - if value - sql += ' AND current_relation_tags.v=?' - cond_rel += [value] - end - cond_rel = [sql] + cond_rel - - # First up, look for the relations we want if do_relations - relations = Relation.find(:all, - :joins => "INNER JOIN current_relation_tags ON current_relation_tags.id = current_relations.id", - :conditions => cond_rel, :limit => 100) - end - - # then ways - if do_ways - ways = Way.find(:all, - :joins => "INNER JOIN current_way_tags ON current_way_tags.id = current_ways.id", - :conditions => cond_way, :limit => 100) - end - - # Now, nodes - if do_nodes - nodes = Node.find(:all, - :joins => "INNER JOIN current_node_tags ON current_node_tags.id = current_nodes.id", - :conditions => cond_node, :limit => 2000) + relations = Relation.joins(:relation_tags) + relations = relations.where(:current_relation_tags => { :k => type }) if type + relations = relations.where(:current_relation_tags => { :v => value }) if value + relations = relations.limit(2000) + else + relations = Array.new end # Fetch any node needed for our ways (only have matching nodes so far) @@ -121,11 +87,12 @@ class SearchController < ApplicationController ways.each do |way| doc.root << way.to_xml_node(visible_nodes, changeset_cache, user_display_name_cache) - end + end relations.each do |rel| doc.root << rel.to_xml_node(nil, changeset_cache, user_display_name_cache) - end + end + render :text => doc.to_s, :content_type => "text/xml" end end diff --git a/app/controllers/site_controller.rb b/app/controllers/site_controller.rb index 21ef26bac..36f57d6c2 100644 --- a/app/controllers/site_controller.rb +++ b/app/controllers/site_controller.rb @@ -49,15 +49,16 @@ class SiteController < ApplicationController @zoom = params['zoom'].to_i elsif params['bbox'] - bbox = params['bbox'].split(",") + bbox = BoundingBox.from_bbox_params(params) - @lon = ( bbox[0].to_f + bbox[2].to_f ) / 2.0 - @lat = ( bbox[1].to_f + bbox[3].to_f ) / 2.0 + @lon = bbox.centre_lon + @lat = bbox.centre_lat @zoom = 16 - elsif params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat'] - @lon = ( params['maxlon'].to_f + params['minlon'].to_f ) / 2.0 - @lat = ( params['maxlat'].to_f + params['minlat'].to_f ) / 2.0 + bbox = BoundingBox.from_lon_lat_params(params) + + @lon = bbox.centre_lon + @lat = bbox.centre_lat @zoom = 16 elsif params['gpx'] diff --git a/app/controllers/swf_controller.rb b/app/controllers/swf_controller.rb index 0e7e15bbf..5097aa8c3 100644 --- a/app/controllers/swf_controller.rb +++ b/app/controllers/swf_controller.rb @@ -1,4 +1,5 @@ class SwfController < ApplicationController + skip_before_filter :verify_authenticity_token before_filter :check_api_readable # to log: @@ -20,10 +21,8 @@ class SwfController < ApplicationController basey =params['basey'].to_f masterscale =params['masterscale'].to_f - xmin=params['xmin'].to_f; - xmax=params['xmax'].to_f; - ymin=params['ymin'].to_f; - ymax=params['ymax'].to_f; + bbox = BoundingBox.new(params['xmin'], params['ymin'], + params['xmax'], params['ymax']) start=params['start'].to_i; # - Begin movie @@ -53,7 +52,7 @@ class SwfController < ApplicationController " FROM gpx_files,gps_points "+ "WHERE gpx_files.id=gpx_id "+ " AND gpx_files.user_id=#{user.id} "+ - " AND "+OSM.sql_for_area(ymin,xmin,ymax,xmax,"gps_points.")+ + " AND "+OSM.sql_for_area(bbox,"gps_points.")+ " AND (gps_points.timestamp IS NOT NULL) "+ "ORDER BY fileid DESC,ts "+ "LIMIT 10000 OFFSET #{start}" @@ -61,7 +60,7 @@ class SwfController < ApplicationController sql="SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,gpx_id AS fileid,"+ " EXTRACT(EPOCH FROM timestamp) AS ts, gps_points.trackid AS trackid "+ " FROM gps_points "+ - "WHERE "+OSM.sql_for_area(ymin,xmin,ymax,xmax,"gps_points.")+ + "WHERE "+OSM.sql_for_area(bbox,"gps_points.")+ " AND (gps_points.timestamp IS NOT NULL) "+ "ORDER BY fileid DESC,ts "+ "LIMIT 10000 OFFSET #{start}" diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 52392fddd..cdfa5e3cb 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -1,6 +1,7 @@ class TraceController < ApplicationController layout 'site' + skip_before_filter :verify_authenticity_token, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data] before_filter :authorize_web before_filter :set_locale before_filter :require_user, :only => [:mine, :create, :edit, :delete] @@ -27,7 +28,7 @@ class TraceController < ApplicationController # from display name, pick up user id if one user's traces only display_name = params[:display_name] if !display_name.blank? - target_user = User.find(:first, :conditions => { :status => ["active", "confirmed"], :display_name => display_name }) + target_user = User.active.where(:display_name => display_name).first if target_user.nil? @title = t'trace.no_such_user.title' @not_found_user = display_name @@ -54,51 +55,43 @@ class TraceController < ApplicationController # 4 - user's traces, not logged in as that user = all user's public traces if target_user.nil? # all traces if @user - conditions = ["(gpx_files.visibility in ('public', 'identifiable') OR gpx_files.user_id = ?)", @user.id] #1 + @traces = Trace.visible_to(@user) #1 else - conditions = ["gpx_files.visibility in ('public', 'identifiable')"] #2 + @traces = Trace.public #2 end else if @user and @user == target_user - conditions = ["gpx_files.user_id = ?", @user.id] #3 (check vs user id, so no join + can't pick up non-public traces by changing name) + @traces = @user.traces #3 (check vs user id, so no join + can't pick up non-public traces by changing name) else - conditions = ["gpx_files.visibility in ('public', 'identifiable') AND gpx_files.user_id = ?", target_user.id] #4 + @traces = target_user.traces.public #4 end end if params[:tag] @tag = params[:tag] - files = Tracetag.find_all_by_tag(params[:tag]).collect { |tt| tt.gpx_id } + files = Tracetag.where(:tag => params[:tag]).select(:gpx_id).all if files.length > 0 - conditions[0] += " AND gpx_files.id IN (#{files.join(',')})" - else - conditions[0] += " AND 0 = 1" + @traces = @traces.where(:id => files.collect { |tt| tt.gpx_id }) end end - conditions[0] += " AND gpx_files.visible = ?" - conditions << true - @page = (params[:page] || 1).to_i @page_size = 20 - @traces = Trace.find(:all, - :include => [:user, :tags], - :conditions => conditions, - :order => "gpx_files.timestamp DESC", - :offset => (@page - 1) * @page_size, - :limit => @page_size) + @traces = @traces.visible + @traces = @traces.order("timestamp DESC") + @traces = @traces.offset((@page - 1) * @page_size) + @traces = @traces.limit(@page_size) + @traces = @traces.includes(:user, :tags) # put together SET of tags across traces, for related links tagset = Hash.new - if @traces - @traces.each do |trace| - trace.tags.reload if params[:tag] # if searched by tag, ActiveRecord won't bring back other tags, so do explicitly here - trace.tags.each do |tag| - tagset[tag.tag] = tag.tag - end + @traces.each do |trace| + trace.tags.reload if params[:tag] # if searched by tag, ActiveRecord won't bring back other tags, so do explicitly here + trace.tags.each do |tag| + tagset[tag.tag] = tag.tag end end @@ -222,20 +215,19 @@ class TraceController < ApplicationController end def georss - conditions = ["gpx_files.visibility in ('public', 'identifiable')"] + traces = Trace.public if params[:display_name] - conditions[0] += " AND users.display_name = ?" - conditions << params[:display_name] + traces = traces.joins(:user).where(:users => {:display_name => params[:display_name]}) end if params[:tag] - conditions[0] += " AND EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)" - conditions << params[:tag] + traces = traces.where("EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)") end - traces = Trace.find(:all, :include => :user, :conditions => conditions, - :order => "timestamp DESC", :limit => 20) + traces = traces.order("timestamp DESC") + traces = traces.limit(20) + traces = traces.includes(:user) rss = OSM::GeoRSS.new @@ -281,7 +273,7 @@ class TraceController < ApplicationController end def api_read - trace = Trace.find(params[:id], :conditions => { :visible => true }) + trace = Trace.visible.find(params[:id]) if trace.public? or trace.user == @user render :text => trace.to_xml.to_s, :content_type => "text/xml" @@ -291,7 +283,7 @@ class TraceController < ApplicationController end def api_update - trace = Trace.find(params[:id], :conditions => { :visible => true }) + trace = Trace.visible.find(params[:id]) if trace.user == @user new_trace = Trace.from_xml(request.raw_post) @@ -312,7 +304,7 @@ class TraceController < ApplicationController end def api_delete - trace = Trace.find(params[:id], :conditions => { :visible => true }) + trace = Trace.visible.find(params[:id]) if trace.user == @user trace.visible = false @@ -423,7 +415,7 @@ private end # Finally save the user's preferred privacy level - if pref = @user.preferences.find(:first, :conditions => {:k => "gps.trace.visibility"}) + if pref = @user.preferences.where(:k => "gps.trace.visibility").first pref.v = visibility pref.save else @@ -441,11 +433,11 @@ private end def default_visibility - visibility = @user.preferences.find(:first, :conditions => {:k => "gps.trace.visibility"}) + visibility = @user.preferences.where(:k => "gps.trace.visibility").first if visibility visibility.v - elsif @user.preferences.find(:first, :conditions => {:k => "gps.trace.public", :v => "default"}).nil? + elsif @user.preferences.where(:k => "gps.trace.public", :v => "default").first.nil? "private" else "public" diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 70328f5a5..89f35a899 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -1,6 +1,7 @@ class UserController < ApplicationController layout :choose_layout + skip_before_filter :verify_authenticity_token, :only => [:api_details, :api_gpx_files] before_filter :disable_terms_redirect, :only => [:terms, :save, :logout, :api_details] before_filter :authorize, :only => [:api_details, :api_gpx_files] before_filter :authorize_web, :except => [:api_details, :api_gpx_files] @@ -15,8 +16,6 @@ class UserController < ApplicationController before_filter :require_administrator, :only => [:set_status, :delete, :list] before_filter :lookup_this_user, :only => [:set_status, :delete] - filter_parameter_logging :password, :pass_crypt, :pass_crypt_confirmation - cache_sweeper :user_sweeper, :only => [:account, :set_status, :delete] def terms @@ -24,9 +23,7 @@ class UserController < ApplicationController @text = OSM.legal_text_for_country(@legale) if request.xhr? - render :update do |page| - page.replace_html "contributorTerms", :partial => "terms" - end + render :partial => "terms" elsif using_open_id? # The redirect from the OpenID provider reenters here # again and we need to pass the parameters through to @@ -50,7 +47,7 @@ class UserController < ApplicationController if params[:user] and params[:user][:openid_url] and @user.pass_crypt.empty? # We are creating an account with OpenID and no password # was specified so create a random one - @user.pass_crypt = ActiveSupport::SecureRandom.base64(16) + @user.pass_crypt = SecureRandom.base64(16) @user.pass_crypt_confirmation = @user.pass_crypt end @@ -74,7 +71,7 @@ class UserController < ApplicationController end else # Not logged in, so redirect to the login page - redirect_to :action => :login, :referer => request.request_uri + redirect_to :action => :login, :referer => request.fullpath end end end @@ -82,7 +79,7 @@ class UserController < ApplicationController def save @title = t 'user.new.title' - if Acl.find_by_address(request.remote_ip, :conditions => {:k => "no_account_creation"}) + if Acl.address(request.remote_ip).where(:k => "no_account_creation").exists? render :action => 'new' elsif params[:decline] if @user @@ -128,8 +125,9 @@ class UserController < ApplicationController @user.openid_url = nil if @user.openid_url and @user.openid_url.empty? if @user.save + flash[:piwik_goal] = PIWIK_SIGNUP_GOAL if defined?(PIWIK_SIGNUP_GOAL) flash[:notice] = t 'user.new.flash create success message', :email => @user.email - Notifier.deliver_signup_confirm(@user, @user.tokens.create(:referer => session.delete(:referer))) + Notifier.signup_confirm(@user, @user.tokens.create(:referer => session.delete(:referer))).deliver session[:token] = @user.tokens.create.token redirect_to :action => 'login', :referer => params[:referer] else @@ -140,7 +138,7 @@ class UserController < ApplicationController def account @title = t 'user.account.title' - @tokens = @user.oauth_tokens.find :all, :conditions => 'oauth_tokens.invalidated_at is null and oauth_tokens.authorized_at is not null' + @tokens = @user.oauth_tokens.authorized if params[:user] and params[:user][:display_name] and params[:user][:description] @user.display_name = params[:user][:display_name] @@ -168,9 +166,10 @@ class UserController < ApplicationController @user.preferred_editor = params[:user][:preferred_editor] end - @user.openid_url = nil if params[:user][:openid_url].empty? + @user.openid_url = nil if params[:user][:openid_url].blank? - if params[:user][:openid_url].length > 0 and + if params[:user][:openid_url] and + params[:user][:openid_url].length > 0 and params[:user][:openid_url] != @user.openid_url # If the OpenID has changed, we want to check that it is a # valid OpenID and one the user has control over before saving @@ -188,13 +187,6 @@ class UserController < ApplicationController openid_verify(nil, @user) do |user| update_user(user) end - else - if flash[:errors] - flash[:errors].each do |attr,msg| - attr = "new_email" if attr == "email" and !@user.new_email.nil? - @user.errors.add(attr,msg) - end - end end end @@ -209,11 +201,19 @@ class UserController < ApplicationController @title = t 'user.lost_password.title' if params[:user] and params[:user][:email] - user = User.find_by_email(params[:user][:email], :conditions => {:status => ["pending", "active", "confirmed"]}) + user = User.visible.find_by_email(params[:user][:email]) + + if user.nil? + users = User.visible.where("LOWER(email) = LOWER(?)", params[:user][:email]) + + if users.count == 1 + user = users.first + end + end if user token = user.tokens.create - Notifier.deliver_lost_password(user, token) + Notifier.lost_password(user, token).deliver flash[:notice] = t 'user.lost_password.notice email on way' redirect_to :action => 'login' else @@ -254,11 +254,20 @@ class UserController < ApplicationController @title = t 'user.new.title' @referer = params[:referer] || session[:referer] - if session[:user] + if @user # The user is logged in already, so don't show them the signup # page, instead send them to the home page - redirect_to :controller => 'site', :action => 'index' - elsif not params['openid'].nil? + if @referer + redirect_to @referer + else + redirect_to :controller => 'site', :action => 'index' + end + elsif params.key?(:openid) + @user = User.new(:email => params[:email], + :email_confirmation => params[:email], + :display_name => params[:nickname], + :openid_url => params[:openid]) + flash.now[:notice] = t 'user.new.openid association' end end @@ -273,6 +282,8 @@ class UserController < ApplicationController else password_authentication(params[:username], params[:password]) end + elsif params[:notice] + flash.now[:notice] = t "user.login.notice_#{params[:notice]}" elsif flash[:notice].nil? flash.now[:notice] = t 'user.login.notice' end @@ -327,6 +338,7 @@ class UserController < ApplicationController token.destroy session[:user] = user.id + cookies.permanent["_osm_username"] = user.display_name if referer.nil? flash[:notice] = t('user.confirm.success') + "

" + t('user.confirm.before you start') @@ -355,7 +367,7 @@ class UserController < ApplicationController def confirm_resend if user = User.find_by_display_name(params[:display_name]) - Notifier.deliver_signup_confirm(user, user.tokens.create) + Notifier.signup_confirm(user, user.tokens.create).deliver flash[:notice] = t 'user.confirm_resend.success', :email => user.email else flash[:notice] = t 'user.confirm_resend.failure', :name => params[:display_name] @@ -379,6 +391,7 @@ class UserController < ApplicationController end token.destroy session[:user] = @user.id + cookies.permanent["_osm_username"] = @user.display_name redirect_to :action => 'account', :display_name => @user.display_name else flash[:error] = t 'user.confirm_email.failure' @@ -411,14 +424,14 @@ class UserController < ApplicationController def make_friend if params[:display_name] name = params[:display_name] - new_friend = User.find_by_display_name(name, :conditions => {:status => ["active", "confirmed"]}) + new_friend = User.active.where(:display_name => name).first friend = Friend.new friend.user_id = @user.id friend.friend_user_id = new_friend.id unless @user.is_friends_with?(new_friend) if friend.save flash[:notice] = t 'user.make_friend.success', :name => name - Notifier.deliver_friend_notification(friend) + Notifier.friend_notification(friend).deliver else friend.add_error(t('user.make_friend.failed', :name => name)) end @@ -437,7 +450,7 @@ class UserController < ApplicationController def remove_friend if params[:display_name] name = params[:display_name] - friend = User.find_by_display_name(name, :conditions => {:status => ["active", "confirmed"]}) + friend = User.active.where(:display_name => name).first if @user.is_friends_with?(friend) Friend.delete_all "user_id = #{@user.id} AND friend_user_id = #{friend.id}" flash[:notice] = t 'user.remove_friend.success', :name => friend.display_name @@ -518,7 +531,7 @@ private end # Start the authentication - authenticate_with_open_id(openid_expand_url(openid_url), :required => required) do |result, identity_url, sreg, ax| + authenticate_with_open_id(openid_expand_url(openid_url), :method => :get, :required => required) do |result, identity_url, sreg, ax| if result.successful? # We need to use the openid url passed back from the OpenID provider # rather than the one supplied by the user, as these can be different. @@ -566,7 +579,7 @@ private def openid_verify(openid_url, user) user.openid_url = openid_url - authenticate_with_open_id(openid_expand_url(openid_url)) do |result, identity_url| + authenticate_with_open_id(openid_expand_url(openid_url), :method => :get) do |result, identity_url| if result.successful? # We need to use the openid url passed back from the OpenID provider # rather than the one supplied by the user, as these can be different. @@ -606,6 +619,8 @@ private ## # process a successful login def successful_login(user) + cookies.permanent["_osm_username"] = user.display_name + session[:user] = user.id session_expires_after 1.month if session[:remember_me] @@ -646,16 +661,25 @@ private if user.save set_locale - if user.new_email.nil? or user.new_email.empty? + if user.new_email.blank? flash.now[:notice] = t 'user.account.flash update success' else - flash.now[:notice] = t 'user.account.flash update success confirm needed' + user.email = user.new_email - begin - Notifier.deliver_email_confirm(user, user.tokens.create) - rescue - # Ignore errors sending email + if user.valid? + flash.now[:notice] = t 'user.account.flash update success confirm needed' + + begin + Notifier.email_confirm(user, user.tokens.create).deliver + rescue + # Ignore errors sending email + end + else + @user.errors.set(:new_email, @user.errors.get(:email)) + @user.errors.set(:email, []) end + + user.reset_email! end end end @@ -670,10 +694,10 @@ private if params[:display_name] redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] else - redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri + redirect_to :controller => 'user', :action => 'login', :referer => request.fullpath end elsif not @user - redirect_to :controller => 'user', :action => 'login', :referer => request.request_uri + redirect_to :controller => 'user', :action => 'login', :referer => request.fullpath end end diff --git a/app/controllers/user_preference_controller.rb b/app/controllers/user_preference_controller.rb index d02313497..377e78313 100644 --- a/app/controllers/user_preference_controller.rb +++ b/app/controllers/user_preference_controller.rb @@ -1,5 +1,6 @@ # Update and read user preferences, which are arbitrayr key/val pairs class UserPreferenceController < ApplicationController + skip_before_filter :verify_authenticity_token before_filter :authorize before_filter :require_allow_read_prefs, :only => [:read_one, :read] before_filter :require_allow_write_prefs, :except => [:read_one, :read] diff --git a/app/controllers/way_controller.rb b/app/controllers/way_controller.rb index f2cda21bc..c3ffe3c0f 100644 --- a/app/controllers/way_controller.rb +++ b/app/controllers/way_controller.rb @@ -1,6 +1,7 @@ class WayController < ApplicationController require 'xml/libxml' + skip_before_filter :verify_authenticity_token before_filter :authorize, :only => [:create, :update, :delete] before_filter :require_allow_write_api, :only => [:create, :update, :delete] before_filter :require_public_data, :only => [:create, :update, :delete] @@ -25,7 +26,7 @@ class WayController < ApplicationController def read way = Way.find(params[:id]) - response.headers['Last-Modified'] = way.timestamp.rfc822 + response.last_modified = way.timestamp if way.visible render :text => way.to_xml.to_s, :content_type => "text/xml" @@ -60,7 +61,7 @@ class WayController < ApplicationController end def full - way = Way.find(params[:id], :include => {:nodes => :node_tags}) + way = Way.includes(:nodes => :node_tags).find(params[:id]) if way.visible changeset_cache = {} @@ -105,9 +106,7 @@ class WayController < ApplicationController # :id parameter. note that this used to return deleted ways as well, but # this seemed not to be the expected behaviour, so it was removed. def ways_for_node - wayids = WayNode.find(:all, - :conditions => ['node_id = ?', params[:id]] - ).collect { |ws| ws.id[0] }.uniq + wayids = WayNode.where(:node_id => params[:id]).collect { |ws| ws.id[0] }.uniq doc = OSM::API.new.get_xml_doc diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ec6c455b3..b30129c5d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2,7 +2,7 @@ module ApplicationHelper require 'rexml/document' def sanitize(text) - Sanitize.clean(text, Sanitize::Config::OSM) + Sanitize.clean(text, Sanitize::Config::OSM).html_safe end def htmlize(text) @@ -10,11 +10,15 @@ module ApplicationHelper end def linkify(text) - return auto_link(text, :link => :urls, :html => { :rel => "nofollow" }) + if text.html_safe? + Rinku.auto_link(text, :urls, tag_options(:rel => "nofollow")).html_safe + else + Rinku.auto_link(text, :urls, tag_options(:rel => "nofollow")) + end end def html_escape_unicode(text) - chars = ActiveSupport::Multibyte::Chars.u_unpack(text).map do |c| + chars = ActiveSupport::Multibyte::Unicode.u_unpack(text).map do |c| c < 127 ? c.chr : "&##{c.to_s};" end @@ -37,7 +41,7 @@ module ApplicationHelper js << javascript_strings_for_key("javascripts") js << "\n" - return js + return raw(js) end def style_rules @@ -54,29 +58,29 @@ module ApplicationHelper end def if_logged_in(tag = :div, &block) - concat(content_tag(tag, capture(&block), :class => "hide_unless_logged_in")) + content_tag(tag, capture(&block), :class => "hide_unless_logged_in") end def if_not_logged_in(tag = :div, &block) - concat(content_tag(tag, capture(&block), :class => "hide_if_logged_in")) + content_tag(tag, capture(&block), :class => "hide_if_logged_in") end def if_user(user, tag = :div, &block) if user - concat(content_tag(tag, capture(&block), :class => "hidden show_if_user_#{user.id}")) + content_tag(tag, capture(&block), :class => "hidden show_if_user_#{user.id}") end end def unless_user(user, tag = :div, &block) if user - concat(content_tag(tag, capture(&block), :class => "hide_if_user_#{user.id}")) + content_tag(tag, capture(&block), :class => "hide_if_user_#{user.id}") else - concat(content_tag(tag, capture(&block))) + content_tag(tag, capture(&block)) end end def if_administrator(tag = :div, &block) - concat(content_tag(tag, capture(&block), :class => "hide_unless_administrator")) + content_tag(tag, capture(&block), :class => "hide_unless_administrator") end def describe_location(lat, lon, zoom = nil, language = nil) diff --git a/app/helpers/browse_helper.rb b/app/helpers/browse_helper.rb index a41b39a3d..ebcd58dd0 100644 --- a/app/helpers/browse_helper.rb +++ b/app/helpers/browse_helper.rb @@ -4,7 +4,12 @@ module BrowseHelper end def printable_name(object, version=false) - name = t 'printable_name.with_id', :id => object.id.to_s + if object.id.is_a?(Array) + id = object.id[0] + else + id = object.id + end + name = t 'printable_name.with_id', :id => id.to_s if version name = t 'printable_name.with_version', :id => name, :version => object.version.to_s end diff --git a/app/helpers/geocoder_helper.rb b/app/helpers/geocoder_helper.rb index 8cbf4e965..082f9e530 100644 --- a/app/helpers/geocoder_helper.rb +++ b/app/helpers/geocoder_helper.rb @@ -3,9 +3,9 @@ module GeocoderHelper html_options = {} #html_options[:title] = strip_tags(result[:description]) if result[:description] if result[:min_lon] and result[:min_lat] and result[:max_lon] and result[:max_lat] - html_options[:href] = "?minlon=#{result[:min_lon]}&minlat=#{result[:min_lat]}&maxlon=#{result[:max_lon]}&maxlat=#{result[:max_lat]}" + html_options[:href] = raw("?minlon=#{result[:min_lon]}&minlat=#{result[:min_lat]}&maxlon=#{result[:max_lon]}&maxlat=#{result[:max_lat]}") else - html_options[:href] = "?mlat=#{result[:lat]}&mlon=#{result[:lon]}&zoom=#{result[:zoom]}" + html_options[:href] = raw("?mlat=#{result[:lat]}&mlon=#{result[:lon]}&zoom=#{result[:zoom]}") end html = "" @@ -19,6 +19,7 @@ module GeocoderHelper end html << result[:suffix] if result[:suffix] - return html + + return raw(html) end end diff --git a/app/helpers/trace_helper.rb b/app/helpers/trace_helper.rb index e5397b0de..3922ce2b3 100644 --- a/app/helpers/trace_helper.rb +++ b/app/helpers/trace_helper.rb @@ -6,12 +6,4 @@ module TraceHelper return link_to(tag, :tag => tag, :display_name => @display_name, :page => nil) end end - - def link_to_page(page) - if @action == "mine" - return link_to(page, :tag => @tag, :page => page) - else - return link_to(page, :tag => @tag, :display_name => @display_name, :page => page) - end - end end diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb index 8686d5a03..7a9a75c31 100644 --- a/app/helpers/user_helper.rb +++ b/app/helpers/user_helper.rb @@ -6,11 +6,8 @@ module UserHelper def openid_button(name, url) link_to_function( image_tag("#{name}.png", :alt => t("user.login.openid_providers.#{name}.alt")), - nil, + "submitOpenidUrl('#{url}')", :title => t("user.login.openid_providers.#{name}.title") - ) do |page| - page[:login_form][:openid_url][:value] = url - page[:login_form].submit() - end + ) end end diff --git a/app/models/access_token.rb b/app/models/access_token.rb index b773310ce..a1888343a 100644 --- a/app/models/access_token.rb +++ b/app/models/access_token.rb @@ -1,5 +1,11 @@ -class AccessToken nil) + + validates_presence_of :user, :secret + before_create :set_authorized_at protected @@ -7,4 +13,4 @@ protected def set_authorized_at self.authorized_at = Time.now end -end \ No newline at end of file +end diff --git a/app/models/acl.rb b/app/models/acl.rb index 3ff19d35f..94e377343 100644 --- a/app/models/acl.rb +++ b/app/models/acl.rb @@ -1,15 +1,5 @@ class Acl < ActiveRecord::Base - def self.find_by_address(address, options) - self.with_scope(:find => {:conditions => ["#{inet_aton} & netmask = address", address]}) do - return self.find(:first, options) - end - end - - def self.find_all_by_address(address, options) - self.with_scope(:find => {:conditions => ["#{inet_aton} & netmask = address", address]}) do - return self.find(:all, options) - end - end + scope :address, lambda { |address| where("#{inet_aton} & netmask = address", address) } private diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 8f9a1e69b..b76d0c5a7 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -3,7 +3,7 @@ class Changeset < ActiveRecord::Base belongs_to :user - has_many :changeset_tags, :foreign_key => 'id' + has_many :changeset_tags has_many :nodes has_many :ways @@ -20,6 +20,8 @@ class Changeset < ActiveRecord::Base validates_numericality_of :user_id, :integer_only => true validates_numericality_of :num_changes, :integer_only => true, :greater_than_or_equal_to => 0 + before_save :update_closed_at + # over-expansion factor to use when updating the bounding box EXPAND = 0.1 @@ -52,7 +54,7 @@ class Changeset < ActiveRecord::Base def self.from_xml(xml, create=false) begin - p = XML::Parser.string(xml) + p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR) doc = p.parse doc.find('//osm/changeset').each do |pt| @@ -88,21 +90,11 @@ class Changeset < ActiveRecord::Base # returns the bounding box of the changeset. it is possible that some # or all of the values will be nil, indicating that they are undefined. def bbox - @bbox ||= [ min_lon, min_lat, max_lon, max_lat ] + @bbox ||= BoundingBox.new(min_lon, min_lat, max_lon, max_lat) end def has_valid_bbox? - not bbox.include? nil - end - - ## - # returns area of the changset bbox as a rough comparitive quantity for use of changset displays - def area - if has_valid_bbox? - (max_lon - min_lon) * (max_lat - min_lat) - else - 0 - end + bbox.complete? end ## @@ -110,26 +102,12 @@ class Changeset < ActiveRecord::Base # expand a little bit more in the direction of the expansion, so that # further expansions may be unnecessary. this is an optimisation # suggested on the wiki page by kleptog. - def update_bbox!(array) - # ensure that bbox is cached and has no nils in it. if there are any - # nils, just use the bounding box update to write over them. - @bbox = bbox.zip(array).collect { |a, b| a.nil? ? b : a } - - # only try to update the bbox if there is a value for every coordinate - # which there will be from the previous line as long as both array and - # bbox are all non-nil. - if has_valid_bbox? and array.all? - # FIXME - this looks nasty and violates DRY... is there any prettier - # way to do this? - @bbox[0] = [-180 * GeoRecord::SCALE, array[0] + EXPAND * (@bbox[0] - @bbox[2])].max if array[0] < @bbox[0] - @bbox[1] = [ -90 * GeoRecord::SCALE, array[1] + EXPAND * (@bbox[1] - @bbox[3])].max if array[1] < @bbox[1] - @bbox[2] = [ 180 * GeoRecord::SCALE, array[2] + EXPAND * (@bbox[2] - @bbox[0])].min if array[2] > @bbox[2] - @bbox[3] = [ 90 * GeoRecord::SCALE, array[3] + EXPAND * (@bbox[3] - @bbox[1])].min if array[3] > @bbox[3] + def update_bbox!(bbox_update) + bbox.expand!(bbox_update, EXPAND) - # update active record. rails 2.1's dirty handling should take care of - # whether this object needs saving or not. - self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox - end + # update active record. rails 2.1's dirty handling should take care of + # whether this object needs saving or not. + self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a if bbox.complete? end ## @@ -175,13 +153,13 @@ class Changeset < ActiveRecord::Base self.save! tags = self.tags - ChangesetTag.delete_all(['id = ?', self.id]) + ChangesetTag.delete_all(:changeset_id => self.id) tags.each do |k,v| tag = ChangesetTag.new + tag.changeset_id = self.id tag.k = k tag.v = v - tag.id = self.id tag.save! end end @@ -191,7 +169,7 @@ class Changeset < ActiveRecord::Base # set the auto-close time to be one hour in the future unless # that would make it more than 24h long, in which case clip to # 24h, as this has been decided is a reasonable time limit. - def before_save + def update_closed_at if self.is_open? if (closed_at - created_at) > (MAX_TIME_OPEN - IDLE_TIMEOUT) self.closed_at = created_at + MAX_TIME_OPEN @@ -235,10 +213,9 @@ class Changeset < ActiveRecord::Base el1['closed_at'] = self.closed_at.xmlschema unless is_open? el1['open'] = is_open?.to_s - el1['min_lon'] = (bbox[0].to_f / GeoRecord::SCALE).to_s unless bbox[0].nil? - el1['min_lat'] = (bbox[1].to_f / GeoRecord::SCALE).to_s unless bbox[1].nil? - el1['max_lon'] = (bbox[2].to_f / GeoRecord::SCALE).to_s unless bbox[2].nil? - el1['max_lat'] = (bbox[3].to_f / GeoRecord::SCALE).to_s unless bbox[3].nil? + if bbox.complete? + bbox.to_unscaled.add_bounds_to(el1, '_') + end # NOTE: changesets don't include the XML of the changes within them, # they are just structures for tagging. to get the osmChange of a diff --git a/app/models/changeset_tag.rb b/app/models/changeset_tag.rb index 6a414a0fc..bd0417ab4 100644 --- a/app/models/changeset_tag.rb +++ b/app/models/changeset_tag.rb @@ -1,8 +1,10 @@ class ChangesetTag < ActiveRecord::Base - belongs_to :changeset, :foreign_key => 'id' + set_primary_keys :changeset_id, :k - validates_presence_of :id - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => :k - validates_numericality_of :id, :only_integer => true + belongs_to :changeset + + validates_presence_of :changeset + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => :changeset_id + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/client_application.rb b/app/models/client_application.rb index ffca1c63c..55f34e6e2 100644 --- a/app/models/client_application.rb +++ b/app/models/client_application.rb @@ -1,16 +1,20 @@ require 'oauth' + class ClientApplication < ActiveRecord::Base belongs_to :user has_many :tokens, :class_name => "OauthToken" has_many :access_tokens + has_many :oauth2_verifiers + has_many :oauth_tokens + validates_presence_of :name, :url, :key, :secret validates_uniqueness_of :key - before_validation_on_create :generate_keys - validates_format_of :url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i validates_format_of :support_url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true validates_format_of :callback_url, :with => /\A[a-z][a-z0-9.+-]*:\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true + before_validation :generate_keys, :on => :create + attr_accessor :token_callback_url def self.find_token(token_key) @@ -25,15 +29,10 @@ class ClientApplication < ActiveRecord::Base def self.verify_request(request, options = {}, &block) begin signature = OAuth::Signature.build(request, options, &block) - logger.info "Signature Base String: #{signature.signature_base_string}" - logger.info "Consumer: #{signature.send :consumer_key}" - logger.info "Token: #{signature.send :token}" return false unless OauthNonce.remember(signature.request.nonce, signature.request.timestamp) value = signature.verify - logger.info "Signature verification returned: #{value.to_s}" value rescue OAuth::Signature::UnknownSignatureMethod => e - logger.info "ERROR"+e.to_s false end end @@ -50,12 +49,16 @@ class ClientApplication < ActiveRecord::Base @oauth_client ||= OAuth::Consumer.new(key, secret) end - def create_request_token - RequestToken.create :client_application => self, :callback_url => self.token_callback_url + def create_request_token(params={}) + params = { :client_application => self, :callback_url => self.token_callback_url } + permissions.each do |p| + params[p] = true + end + RequestToken.create(params) end def access_token_for_user(user) - unless token = access_tokens.find(:first, :conditions => { :user_id => user.id, :invalidated_at => nil }) + unless token = access_tokens.valid.where(:user_id => user).first params = { :user => user } permissions.each do |p| @@ -82,8 +85,7 @@ protected :allow_write_api, :allow_read_gpx, :allow_write_gpx ] def generate_keys - oauth_client = oauth_server.generate_consumer_credentials - self.key = oauth_client.key - self.secret = oauth_client.secret + self.key = OAuth::Helper.generate_key(40)[0,40] + self.secret = OAuth::Helper.generate_key(40)[0,40] end end diff --git a/app/models/diary_entry.rb b/app/models/diary_entry.rb index 9146eb800..318672c03 100644 --- a/app/models/diary_entry.rb +++ b/app/models/diary_entry.rb @@ -13,6 +13,8 @@ class DiaryEntry < ActiveRecord::Base }, :order => "diary_comments.id" + scope :visible, where(:visible => true) + validates_presence_of :title, :body validates_length_of :title, :within => 1..255 #validates_length_of :language, :within => 2..5, :allow_nil => false diff --git a/app/models/diary_sweeper.rb b/app/models/diary_sweeper.rb index 59d578f7e..9f739cf5e 100644 --- a/app/models/diary_sweeper.rb +++ b/app/models/diary_sweeper.rb @@ -17,8 +17,8 @@ private def expire_cache_for(record) case - when record.is_a?(DiaryEntry): entry = record - when record.is_a?(DiaryComment): entry = record.diary_entry + when record.is_a?(DiaryEntry) then entry = record + when record.is_a?(DiaryComment) then entry = record.diary_entry end expire_action(:controller => 'diary_entry', :action => 'view', :display_name => entry.user.display_name, :id => entry.id) diff --git a/app/models/node.rb b/app/models/node.rb index 1aff4101e..0f176067d 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -8,12 +8,12 @@ class Node < ActiveRecord::Base belongs_to :changeset - has_many :old_nodes, :foreign_key => :id, :order => :version + has_many :old_nodes, :order => :version has_many :way_nodes has_many :ways, :through => :way_nodes - has_many :node_tags, :foreign_key => :id + has_many :node_tags has_many :old_way_nodes has_many :ways_via_history, :class_name=> "Way", :through => :old_way_nodes, :source => :way @@ -30,9 +30,12 @@ class Node < ActiveRecord::Base validate :validate_position validates_associated :changeset + scope :visible, where(:visible => true) + scope :invisible, where(:visible => false) + # Sanity check the latitude and longitude and add an error if it's broken def validate_position - errors.add_to_base("Node is not in the world") unless in_world? + errors.add(:base, "Node is not in the world") unless in_world? end # @@ -41,7 +44,6 @@ class Node < ActiveRecord::Base # Also adheres to limitations such as within max_number_of_nodes # def self.search(bounding_box, tags = {}) - min_lon, min_lat, max_lon, max_lat = *bounding_box # @fixme a bit of a hack to search for only visible nodes # couldn't think of another to add to tags condition #conditions_hash = tags.merge({ 'visible' => 1 }) @@ -56,9 +58,8 @@ class Node < ActiveRecord::Base #end #conditions = keys.join(' AND ') - find_by_area(min_lat, min_lon, max_lat, max_lon, - :conditions => {:visible => true}, - :limit => MAX_NUMBER_OF_NODES+1) + find_by_area(bounding_box, :conditions => {:visible => true}, + :limit => MAX_NUMBER_OF_NODES+1) end # Read in xml as text and return it's Node object representation @@ -118,7 +119,7 @@ class Node < ActiveRecord::Base # the bounding box around a node, which is used for determining the changeset's # bounding box def bbox - [ longitude, latitude, longitude, latitude ] + BoundingBox.new(longitude, latitude, longitude, latitude) end # Should probably be renamed delete_from to come in line with update @@ -133,13 +134,11 @@ class Node < ActiveRecord::Base Node.transaction do self.lock! check_consistency(self, new_node, user) - way = WayNode.find(:first, :joins => :way, - :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ]) - raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by way #{way.way.id}.") unless way.nil? + ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id) + raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by ways #{ways.collect { |w| w.id }.join(",")}.") unless ways.empty? - rel = RelationMember.find(:first, :joins => :relation, - :conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id]) - raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relation #{rel.relation.id}.") unless rel.nil? + rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Node", :member_id => id }).order(:id) + raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relations #{rels.collect { |r| r.id }.join(",")}.") unless rels.empty? self.changeset_id = new_node.changeset_id self.tags = {} @@ -288,12 +287,12 @@ class Node < ActiveRecord::Base # Create a NodeTag tags = self.tags - NodeTag.delete_all(['id = ?', self.id]) + NodeTag.delete_all(:node_id => self.id) tags.each do |k,v| tag = NodeTag.new + tag.node_id = self.id tag.k = k tag.v = v - tag.id = self.id tag.save! end diff --git a/app/models/node_tag.rb b/app/models/node_tag.rb index 494260112..6bc1c555e 100644 --- a/app/models/node_tag.rb +++ b/app/models/node_tag.rb @@ -1,10 +1,11 @@ class NodeTag < ActiveRecord::Base set_table_name 'current_node_tags' + set_primary_keys :node_id, :k - belongs_to :node, :foreign_key => 'id' + belongs_to :node - validates_presence_of :id - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => :k - validates_numericality_of :id, :only_integer => true + validates_presence_of :node + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => :node_id + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/notifier.rb b/app/models/notifier.rb index f025da7b1..2fb00c96f 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -1,98 +1,117 @@ class Notifier < ActionMailer::Base + default :from => EMAIL_FROM, + :return_path => EMAIL_RETURN_PATH, + :auto_submitted => "auto-generated" + helper :application + def signup_confirm(user, token) - common_headers user - subject I18n.t('notifier.signup_confirm.subject') - body :url => url_for(:host => SERVER_URL, - :controller => "user", :action => "confirm", - :display_name => user.display_name, - :confirm_string => token.token) + @locale = user.preferred_language_from(I18n.available_locales) + @url = url_for(:host => SERVER_URL, + :controller => "user", :action => "confirm", + :display_name => user.display_name, + :confirm_string => token.token) + + mail :to => user.email, + :subject => I18n.t('notifier.signup_confirm.subject', :locale => @locale) end def email_confirm(user, token) - common_headers user - recipients user.new_email - subject I18n.t('notifier.email_confirm.subject') - body :address => user.new_email, - :url => url_for(:host => SERVER_URL, - :controller => "user", :action => "confirm_email", - :confirm_string => token.token) + @locale = user.preferred_language_from(I18n.available_locales) + @address = user.new_email + @url = url_for(:host => SERVER_URL, + :controller => "user", :action => "confirm_email", + :confirm_string => token.token) + + mail :to => user.new_email, + :subject => I18n.t('notifier.email_confirm.subject', :locale => @locale) end def lost_password(user, token) - common_headers user - subject I18n.t('notifier.lost_password.subject') - body :url => url_for(:host => SERVER_URL, - :controller => "user", :action => "reset_password", - :token => token.token) + @locale = user.preferred_language_from(I18n.available_locales) + @url = url_for(:host => SERVER_URL, + :controller => "user", :action => "reset_password", + :token => token.token) + + mail :to => user.email, + :subject => I18n.t('notifier.lost_password.subject', :locale => @locale) end def gpx_success(trace, possible_points) - common_headers trace.user - subject I18n.t('notifier.gpx_notification.success.subject') - body :trace_name => trace.name, - :trace_points => trace.size, - :trace_description => trace.description, - :trace_tags => trace.tags, - :possible_points => possible_points + @locale = trace.user.preferred_language_from(I18n.available_locales) + @trace_name = trace.name + @trace_points = trace.size + @trace_description = trace.description + @trace_tags = trace.tags + @possible_points = possible_points + + mail :to => trace.user.email, + :subject => I18n.t('notifier.gpx_notification.success.subject', :locale => @locale) end def gpx_failure(trace, error) - common_headers trace.user - from "webmaster@openstreetmap.org" - subject I18n.t('notifier.gpx_notification.failure.subject') - body :trace_name => trace.name, - :trace_description => trace.description, - :trace_tags => trace.tags, - :error => error + @locale = trace.user.preferred_language_from(I18n.available_locales) + @trace_name = trace.name + @trace_description = trace.description + @trace_tags = trace.tags + @error = error + + mail :to => trace.user.email, + :subject => I18n.t('notifier.gpx_notification.failure.subject', :locale => @locale) end def message_notification(message) - common_headers message.recipient - from_header message.sender.display_name, "m", message.id, message.digest - subject I18n.t('notifier.message_notification.subject_header', :subject => message.title, :locale => locale) - body :to_user => message.recipient.display_name, - :from_user => message.sender.display_name, - :body => message.body, - :title => message.title, - :readurl => url_for(:host => SERVER_URL, - :controller => "message", :action => "read", - :message_id => message.id), - :replyurl => url_for(:host => SERVER_URL, - :controller => "message", :action => "reply", - :message_id => message.id) + @locale = message.recipient.preferred_language_from(I18n.available_locales) + @to_user = message.recipient.display_name + @from_user = message.sender.display_name + @text = message.body + @title = message.title + @readurl = url_for(:host => SERVER_URL, + :controller => "message", :action => "read", + :message_id => message.id) + @replyurl = url_for(:host => SERVER_URL, + :controller => "message", :action => "reply", + :message_id => message.id) + + mail :from => from_address(message.sender.display_name, "m", message.id, message.digest), + :to => message.recipient.email, + :subject => I18n.t('notifier.message_notification.subject_header', :subject => message.title, :locale => @locale) end def diary_comment_notification(comment) - common_headers comment.diary_entry.user - from_header comment.user.display_name, "c", comment.id, comment.digest - subject I18n.t('notifier.diary_comment_notification.subject', :user => comment.user.display_name, :locale => locale) - body :to_user => comment.diary_entry.user.display_name, - :from_user => comment.user.display_name, - :body => comment.body, - :title => comment.diary_entry.title, - :readurl => url_for(:host => SERVER_URL, - :controller => "diary_entry", - :action => "view", - :display_name => comment.diary_entry.user.display_name, - :id => comment.diary_entry.id, - :anchor => "comment#{comment.id}"), - :commenturl => url_for(:host => SERVER_URL, - :controller => "diary_entry", - :action => "view", - :display_name => comment.diary_entry.user.display_name, - :id => comment.diary_entry.id, - :anchor => "newcomment"), - :replyurl => url_for(:host => SERVER_URL, - :controller => "message", - :action => "new", - :display_name => comment.user.display_name, - :title => "Re: #{comment.diary_entry.title}") + @locale = comment.diary_entry.user.preferred_language_from(I18n.available_locales) + @to_user = comment.diary_entry.user.display_name + @from_user = comment.user.display_name + @text = comment.body + @title = comment.diary_entry.title + @readurl = url_for(:host => SERVER_URL, + :controller => "diary_entry", + :action => "view", + :display_name => comment.diary_entry.user.display_name, + :id => comment.diary_entry.id, + :anchor => "comment#{comment.id}") + @commenturl = url_for(:host => SERVER_URL, + :controller => "diary_entry", + :action => "view", + :display_name => comment.diary_entry.user.display_name, + :id => comment.diary_entry.id, + :anchor => "newcomment") + @replyurl = url_for(:host => SERVER_URL, + :controller => "message", + :action => "new", + :display_name => comment.user.display_name, + :title => "Re: #{comment.diary_entry.title}") + + mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest), + :to => comment.diary_entry.user.email, + :subject => I18n.t('notifier.diary_comment_notification.subject', :user => comment.user.display_name, :locale => @locale) end def friend_notification(friend) - common_headers friend.befriendee - subject I18n.t('notifier.friend_notification.subject', :user => friend.befriender.display_name, :locale => locale) - body :friend => friend + @locale = friend.befriendee.preferred_language_from(I18n.available_locales) + @friend = friend + + mail :to => friend.befriendee.email, + :subject => I18n.t('notifier.friend_notification.subject', :user => friend.befriender.display_name, :locale => @locale) end def note_comment_notification(comment, recipient) @@ -113,17 +132,11 @@ class Notifier < ActionMailer::Base private - def common_headers(recipient) - recipients recipient.email - locale recipient.preferred_language_from(I18n.available_locales) - from EMAIL_FROM - headers "return-path" => EMAIL_RETURN_PATH, - "Auto-Submitted" => "auto-generated" - end - - def from_header(name, type, id, digest) - if domain = MESSAGES_DOMAIN - from quote_address_if_necessary("#{name} <#{type}-#{id}-#{digest[0,6]}@#{domain}>", "utf-8") + def from_address(name, type, id, digest) + if Object.const_defined?(:MESSAGES_DOMAIN) and domain = MESSAGES_DOMAIN + "#{name} <#{type}-#{id}-#{digest[0,6]}@#{domain}>" + else + EMAIL_FROM end end end diff --git a/app/models/oauth2_token.rb b/app/models/oauth2_token.rb new file mode 100644 index 000000000..9c28d886e --- /dev/null +++ b/app/models/oauth2_token.rb @@ -0,0 +1,21 @@ +class Oauth2Token < AccessToken + attr_accessor :state + + def as_json(options={}) + d = {:access_token=>token, :token_type => 'bearer'} + d[:expires_in] = expires_in if expires_at + d + end + + def to_query + q = "access_token=#{token}&token_type=bearer" + q << "&state=#{URI.escape(state)}" if @state + q << "&expires_in=#{expires_in}" if expires_at + q << "&scope=#{URI.escape(scope)}" if scope + q + end + + def expires_in + expires_at.to_i - Time.now.to_i + end +end diff --git a/app/models/oauth2_verifier.rb b/app/models/oauth2_verifier.rb new file mode 100644 index 000000000..94856d0d8 --- /dev/null +++ b/app/models/oauth2_verifier.rb @@ -0,0 +1,34 @@ +class Oauth2Verifier < OauthToken + validates_presence_of :user + attr_accessor :state + + def exchange!(params={}) + OauthToken.transaction do + token = Oauth2Token.create! :user=>user,:client_application=>client_application, :scope => scope + invalidate! + token + end + end + + def code + token + end + + def redirect_url + callback_url + end + + def to_query + q = "code=#{token}" + q << "&state=#{URI.escape(state)}" if @state + q + end + + protected + + def generate_keys + self.token = OAuth::Helper.generate_key(20)[0,20] + self.expires_at = 10.minutes.from_now + self.authorized_at = Time.now + end +end diff --git a/app/models/oauth_token.rb b/app/models/oauth_token.rb index f64ec53db..b38fe0ec0 100644 --- a/app/models/oauth_token.rb +++ b/app/models/oauth_token.rb @@ -1,19 +1,13 @@ class OauthToken < ActiveRecord::Base belongs_to :client_application belongs_to :user + + scope :authorized, where("authorized_at IS NOT NULL and invalidated_at IS NULL") + validates_uniqueness_of :token - validates_presence_of :client_application, :token, :secret - before_validation_on_create :generate_keys - - def self.find_token(token_key) - token = OauthToken.find_by_token(token_key, :include => :client_application) - if token && token.authorized? - logger.info "Loaded #{token.token} which was authorized by (user_id=#{token.user_id}) on the #{token.authorized_at}" - token - else - nil - end - end + validates_presence_of :client_application, :token + + before_validation :generate_keys, :on => :create def invalidated? invalidated_at != nil @@ -34,8 +28,7 @@ class OauthToken < ActiveRecord::Base protected def generate_keys - @oauth_token = client_application.oauth_server.generate_credentials - self.token = @oauth_token[0] - self.secret = @oauth_token[1] + self.token = OAuth::Helper.generate_key(40)[0,40] + self.secret = OAuth::Helper.generate_key(40)[0,40] end end diff --git a/app/models/old_node.rb b/app/models/old_node.rb index 5e3638347..f8af91abb 100644 --- a/app/models/old_node.rb +++ b/app/models/old_node.rb @@ -3,11 +3,8 @@ class OldNode < ActiveRecord::Base include ConsistencyValidations set_table_name 'nodes' - - # Should probably have the composite primary key set in the model - # however there are some weird bugs happening when you do - #set_primary_keys :id, :version - + set_primary_keys :node_id, :version + validates_presence_of :changeset_id, :timestamp validates_inclusion_of :visible, :in => [ true, false ] validates_numericality_of :latitude, :longitude @@ -17,7 +14,7 @@ class OldNode < ActiveRecord::Base belongs_to :changeset def validate_position - errors.add_to_base("Node is not in the world") unless in_world? + errors.add(:base, "Node is not in the world") unless in_world? end def self.from_node(node) @@ -28,7 +25,7 @@ class OldNode < ActiveRecord::Base old_node.tags = node.tags old_node.timestamp = node.timestamp old_node.changeset_id = node.changeset_id - old_node.id = node.id + old_node.node_id = node.id old_node.version = node.version return old_node end @@ -41,7 +38,7 @@ class OldNode < ActiveRecord::Base def to_xml_node el1 = XML::Node.new 'node' - el1['id'] = self.id.to_s + el1['id'] = self.node_id.to_s el1['lat'] = self.lat.to_s el1['lon'] = self.lon.to_s el1['changeset'] = self.changeset.id.to_s @@ -69,13 +66,13 @@ class OldNode < ActiveRecord::Base clear_aggregation_cache clear_association_cache #ok from here - @attributes.update(OldNode.find(:first, :conditions => ['id = ? AND timestamp = ? AND version = ?', self.id, self.timestamp, self.version]).instance_variable_get('@attributes')) + @attributes.update(OldNode.where(:node_id => self.node_id, :timestamp => self.timestamp, :version => self.version).first.instance_variable_get('@attributes')) self.tags.each do |k,v| tag = OldNodeTag.new tag.k = k tag.v = v - tag.id = self.id + tag.node_id = self.node_id tag.version = self.version tag.save! end @@ -83,10 +80,10 @@ class OldNode < ActiveRecord::Base def tags unless @tags - @tags = Hash.new - OldNodeTag.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version]).each do |tag| - @tags[tag.k] = tag.v - end + @tags = Hash.new + OldNodeTag.where(:node_id => self.node_id, :version => self.version).each do |tag| + @tags[tag.k] = tag.v + end end @tags = Hash.new unless @tags @tags diff --git a/app/models/old_node_tag.rb b/app/models/old_node_tag.rb index dd339ad30..cd5bc4739 100644 --- a/app/models/old_node_tag.rb +++ b/app/models/old_node_tag.rb @@ -1,10 +1,11 @@ class OldNodeTag < ActiveRecord::Base set_table_name 'node_tags' + set_primary_keys :node_id, :version, :k - belongs_to :user + belongs_to :old_node, :foreign_key => [:node_id, :version] - validates_presence_of :id, :version - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => [:k, :version] - validates_numericality_of :id, :version, :only_integer => true + validates_presence_of :old_node + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => [:node_id, :version] + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/old_relation.rb b/app/models/old_relation.rb index ca43b5912..87771caab 100644 --- a/app/models/old_relation.rb +++ b/app/models/old_relation.rb @@ -2,8 +2,12 @@ class OldRelation < ActiveRecord::Base include ConsistencyValidations set_table_name 'relations' + set_primary_keys :relation_id, :version belongs_to :changeset + + has_many :old_members, :class_name => 'OldRelationMember', :foreign_key => [:relation_id, :version], :order => :sequence_id + has_many :old_tags, :class_name => 'OldRelationTag', :foreign_key => [:relation_id, :version] validates_associated :changeset @@ -12,7 +16,7 @@ class OldRelation < ActiveRecord::Base old_relation.visible = relation.visible old_relation.changeset_id = relation.changeset_id old_relation.timestamp = relation.timestamp - old_relation.id = relation.id + old_relation.relation_id = relation.id old_relation.version = relation.version old_relation.members = relation.members old_relation.tags = relation.tags @@ -25,7 +29,7 @@ class OldRelation < ActiveRecord::Base save! clear_aggregation_cache clear_association_cache - @attributes.update(OldRelation.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp], :order => "version desc").instance_variable_get('@attributes')) + @attributes.update(OldRelation.where(:relation_id => self.relation_id, :timestamp => self.timestamp).order("version DESC").first.instance_variable_get('@attributes')) # ok, you can touch from here on @@ -33,14 +37,14 @@ class OldRelation < ActiveRecord::Base tag = OldRelationTag.new tag.k = k tag.v = v - tag.id = self.id + tag.relation_id = self.relation_id tag.version = self.version tag.save! end self.members.each_with_index do |m,i| member = OldRelationMember.new - member.id = [self.id, self.version, i] + member.id = [self.relation_id, self.version, i] member.member_type = m[0].classify member.member_id = m[1] member.member_role = m[2] @@ -50,20 +54,20 @@ class OldRelation < ActiveRecord::Base def members unless @members - @members = Array.new - OldRelationMember.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version], :order => "sequence_id").each do |m| - @members += [[m.type,m.id,m.role]] - end + @members = Array.new + OldRelationMember.where(:relation_id => self.relation_id, :version => self.version).order(:sequence_id).each do |m| + @members += [[m.type,m.id,m.role]] + end end @members end def tags unless @tags - @tags = Hash.new - OldRelationTag.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version]).each do |tag| - @tags[tag.k] = tag.v - end + @tags = Hash.new + OldRelationTag.where(:relation_id => self.relation_id, :version => self.version).each do |tag| + @tags[tag.k] = tag.v + end end @tags = Hash.new unless @tags @tags @@ -77,17 +81,6 @@ class OldRelation < ActiveRecord::Base @tags = t end -# has_many :relation_segments, :class_name => 'OldRelationSegment', :foreign_key => 'id' -# has_many :relation_tags, :class_name => 'OldRelationTag', :foreign_key => 'id' - - def old_members - OldRelationMember.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version], :order => "sequence_id") - end - - def old_tags - OldRelationTag.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version]) - end - def to_xml doc = OSM::API.new.get_xml_doc doc.root << to_xml_node() @@ -96,7 +89,7 @@ class OldRelation < ActiveRecord::Base def to_xml_node el1 = XML::Node.new 'relation' - el1['id'] = self.id.to_s + el1['id'] = self.relation_id.to_s el1['visible'] = self.visible.to_s el1['timestamp'] = self.timestamp.xmlschema if self.changeset.user.data_public? diff --git a/app/models/old_relation_member.rb b/app/models/old_relation_member.rb index 7bd7442dd..58d7cccfb 100644 --- a/app/models/old_relation_member.rb +++ b/app/models/old_relation_member.rb @@ -1,8 +1,8 @@ class OldRelationMember < ActiveRecord::Base set_table_name 'relation_members' + set_primary_keys :relation_id, :version, :sequence_id - set_primary_keys :id, :version, :sequence_id - belongs_to :relation, :foreign_key=> :id + belongs_to :old_relation, :foreign_key => [:relation_id, :version] # A bit messy, referring to the current tables, should do for the data browser for now belongs_to :member, :polymorphic => true end diff --git a/app/models/old_relation_tag.rb b/app/models/old_relation_tag.rb index 0fcb11326..032a87c77 100644 --- a/app/models/old_relation_tag.rb +++ b/app/models/old_relation_tag.rb @@ -1,10 +1,11 @@ class OldRelationTag < ActiveRecord::Base set_table_name 'relation_tags' + set_primary_keys :relation_id, :version, :k + + belongs_to :old_relation, :foreign_key => [:relation_id, :version] - belongs_to :old_relation, :foreign_key => [:id, :version] - - validates_presence_of :id, :version - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => [:k, :version] - validates_numericality_of :id, :version, :only_integer => true + validates_presence_of :old_relation + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => [:relation_id, :version] + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/old_way.rb b/app/models/old_way.rb index dc5715693..00642cdb3 100644 --- a/app/models/old_way.rb +++ b/app/models/old_way.rb @@ -2,9 +2,13 @@ class OldWay < ActiveRecord::Base include ConsistencyValidations set_table_name 'ways' + set_primary_keys :way_id, :version belongs_to :changeset + has_many :old_nodes, :class_name => 'OldWayNode', :foreign_key => [:way_id, :version] + has_many :old_tags, :class_name => 'OldWayTag', :foreign_key => [:way_id, :version] + validates_associated :changeset def self.from_way(way) @@ -12,7 +16,7 @@ class OldWay < ActiveRecord::Base old_way.visible = way.visible old_way.changeset_id = way.changeset_id old_way.timestamp = way.timestamp - old_way.id = way.id + old_way.way_id = way.id old_way.version = way.version old_way.nds = way.nds old_way.tags = way.tags @@ -30,7 +34,7 @@ class OldWay < ActiveRecord::Base save! clear_aggregation_cache clear_association_cache - @attributes.update(OldWay.find(:first, :conditions => ['id = ? AND timestamp = ?', self.id, self.timestamp], :order => "version desc").instance_variable_get('@attributes')) + @attributes.update(OldWay.where(:way_id => self.way_id, :timestamp => self.timestamp).order("version DESC").first.instance_variable_get('@attributes')) # ok, you can touch from here on @@ -38,7 +42,7 @@ class OldWay < ActiveRecord::Base tag = OldWayTag.new tag.k = k tag.v = v - tag.id = self.id + tag.way_id = self.way_id tag.version = self.version tag.save! end @@ -46,7 +50,7 @@ class OldWay < ActiveRecord::Base sequence = 1 self.nds.each do |n| nd = OldWayNode.new - nd.id = [self.id, self.version, sequence] + nd.id = [self.way_id, self.version, sequence] nd.node_id = n nd.save! sequence += 1 @@ -55,20 +59,20 @@ class OldWay < ActiveRecord::Base def nds unless @nds - @nds = Array.new - OldWayNode.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version], :order => "sequence_id").each do |nd| - @nds += [nd.node_id] - end + @nds = Array.new + OldWayNode.where(:way_id => self.way_id, :version => self.version).order(:sequence_id).each do |nd| + @nds += [nd.node_id] + end end @nds end def tags unless @tags - @tags = Hash.new - OldWayTag.find(:all, :conditions => ["id = ? AND version = ?", self.id, self.version]).each do |tag| - @tags[tag.k] = tag.v - end + @tags = Hash.new + OldWayTag.where(:way_id => self.way_id, :version => self.version).each do |tag| + @tags[tag.k] = tag.v + end end @tags = Hash.new unless @tags @tags @@ -82,20 +86,9 @@ class OldWay < ActiveRecord::Base @tags = t end -# has_many :way_nodes, :class_name => 'OldWayNode', :foreign_key => 'id' -# has_many :way_tags, :class_name => 'OldWayTag', :foreign_key => 'id' - - def old_nodes - OldWayNode.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version]) - end - - def old_tags - OldWayTag.find(:all, :conditions => ['id = ? AND version = ?', self.id, self.version]) - end - def to_xml_node el1 = XML::Node.new 'way' - el1['id'] = self.id.to_s + el1['id'] = self.way_id.to_s el1['visible'] = self.visible.to_s el1['timestamp'] = self.timestamp.xmlschema if self.changeset.user.data_public? @@ -128,23 +121,23 @@ class OldWay < ActiveRecord::Base # (i.e. is it visible? are we actually reverting to an earlier version?) def get_nodes_undelete - points = [] - self.nds.each do |n| - node=Node.find(n) - points << [node.lon, node.lat, n, node.version, node.tags_as_hash, node.visible] + points = [] + self.nds.each do |n| + node = Node.find(n) + points << [node.lon, node.lat, n, node.version, node.tags_as_hash, node.visible] end - points + points end def get_nodes_revert(timestamp) points=[] self.nds.each do |n| - oldnode=OldNode.find(:first, :conditions=>['id=? AND timestamp<=?',n,timestamp], :order=>"timestamp DESC") - curnode=Node.find(n) - id=n; reuse=curnode.visible - if oldnode.lat!=curnode.lat or oldnode.lon!=curnode.lon or oldnode.tags!=curnode.tags then + oldnode = OldNode.where('node_id = ? AND timestamp <= ?', n, timestamp).order("timestamp DESC").first + curnode = Node.find(n) + id = n; reuse = curnode.visible + if oldnode.lat != curnode.lat or oldnode.lon != curnode.lon or oldnode.tags != curnode.tags then # node has changed: if it's in other ways, give it a new id - if curnode.ways-[self.id] then id=-1; reuse=false end + if curnode.ways-[self.way_id] then id=-1; reuse=false end end points << [oldnode.lon, oldnode.lat, id, curnode.version, oldnode.tags_as_hash, reuse] end diff --git a/app/models/old_way_node.rb b/app/models/old_way_node.rb index 6234b85c2..b613be0b4 100644 --- a/app/models/old_way_node.rb +++ b/app/models/old_way_node.rb @@ -1,10 +1,9 @@ class OldWayNode < ActiveRecord::Base set_table_name 'way_nodes' + set_primary_keys :way_id, :version, :sequence_id - set_primary_keys :id, :version, :sequence_id - - belongs_to :way, :foreign_key=> :id - - # A bit messy, referring to current nodes, should do for the data browser for now + belongs_to :old_way, :foreign_key => [:way_id, :version] + # A bit messy, referring to current nodes and ways, should do for the data browser for now belongs_to :node + belongs_to :way end diff --git a/app/models/old_way_tag.rb b/app/models/old_way_tag.rb index 801532dba..9f4adb147 100644 --- a/app/models/old_way_tag.rb +++ b/app/models/old_way_tag.rb @@ -1,10 +1,11 @@ class OldWayTag < ActiveRecord::Base set_table_name 'way_tags' + set_primary_keys :way_id, :version, :k - belongs_to :old_way, :foreign_key => [:id, :version] + belongs_to :old_way, :foreign_key => [:way_id, :version] - validates_presence_of :id - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => [:k, :version] - validates_numericality_of :id, :version, :only_integer => true + validates_presence_of :old_way + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => [:way_id, :version] + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/relation.rb b/app/models/relation.rb index e3ba69b56..659c4f18a 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -7,10 +7,10 @@ class Relation < ActiveRecord::Base belongs_to :changeset - has_many :old_relations, :foreign_key => 'id', :order => 'version' + has_many :old_relations, :order => 'version' - has_many :relation_members, :foreign_key => 'id', :order => 'sequence_id' - has_many :relation_tags, :foreign_key => 'id' + has_many :relation_members, :order => 'sequence_id' + has_many :relation_tags has_many :containing_relation_members, :class_name => "RelationMember", :as => :member has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder @@ -23,6 +23,12 @@ class Relation < ActiveRecord::Base validates_numericality_of :changeset_id, :version, :integer_only => true validates_associated :changeset + scope :visible, where(:visible => true) + scope :invisible, where(:visible => false) + scope :nodes, lambda { |*ids| joins(:relation_members).where(:current_relation_members => { :member_type => "Node", :member_id => ids }) } + scope :ways, lambda { |*ids| joins(:relation_members).where(:current_relation_members => { :member_type => "Way", :member_id => ids }) } + scope :relations, lambda { |*ids| joins(:relation_members).where(:current_relation_members => { :member_type => "Relation", :member_id => ids }) } + TYPES = ["node", "way", "relation"] def self.from_xml(xml, create=false) @@ -148,36 +154,6 @@ class Relation < ActiveRecord::Base return el1 end - def self.find_for_nodes(ids, options = {}) - if ids.empty? - return [] - else - self.with_scope(:find => { :joins => "INNER JOIN current_relation_members AS crm ON crm.id = current_relations.id", :conditions => "crm.member_type = 'Node' AND crm.member_id IN (#{ids.join(',')})" }) do - return self.find(:all, options) - end - end - end - - def self.find_for_ways(ids, options = {}) - if ids.empty? - return [] - else - self.with_scope(:find => { :joins => "INNER JOIN current_relation_members AS crm ON crm.id = current_relations.id", :conditions => "crm.member_type = 'Way' AND crm.member_id IN (#{ids.join(',')})" }) do - return self.find(:all, options) - end - end - end - - def self.find_for_relations(ids, options = {}) - if ids.empty? - return [] - else - self.with_scope(:find => { :joins => "INNER JOIN current_relation_members AS crm ON crm.id = current_relations.id", :conditions => "crm.member_type = 'Relation' AND crm.member_id IN (#{ids.join(',')})" }) do - return self.find(:all, options) - end - end - end - # FIXME is this really needed? def members unless @members @@ -244,8 +220,7 @@ class Relation < ActiveRecord::Base self.lock! check_consistency(self, new_relation, user) # This will check to see if this relation is used by another relation - rel = RelationMember.find(:first, :joins => :relation, - :conditions => [ "visible = ? AND member_type='Relation' and member_id=? ", true, self.id ]) + rel = RelationMember.joins(:relation).where("visible = ? AND member_type = 'Relation' and member_id = ? ", true, self.id).first raise OSM::APIPreconditionFailedError.new("The relation #{new_relation.id} is used in relation #{rel.relation.id}.") unless rel.nil? self.changeset_id = new_relation.changeset_id @@ -303,7 +278,7 @@ class Relation < ActiveRecord::Base # use reflection to look up the appropriate class model = Kernel.const_get(m[0].capitalize) # get the element with that ID - element = model.find(:first, :conditions =>["id = ?", m[1]]) + element = model.where(:id => m[1]).first # and check that it is OK to use. unless element and element.visible? and element.preconditions_ok? @@ -373,12 +348,12 @@ class Relation < ActiveRecord::Base # if there are left-over tags then they are new and will have to # be added. tags_changed |= (not tags.empty?) - RelationTag.delete_all(:id => self.id) + RelationTag.delete_all(:relation_id => self.id) self.tags.each do |k,v| tag = RelationTag.new + tag.relation_id = self.id tag.k = k tag.v = v - tag.id = self.id tag.save! end @@ -403,10 +378,11 @@ class Relation < ActiveRecord::Base # members may be in a different order and i don't feel like implementing # a longest common subsequence algorithm to optimise this. members = self.members - RelationMember.delete_all(:id => self.id) + RelationMember.delete_all(:relation_id => self.id) members.each_with_index do |m,i| mem = RelationMember.new - mem.id = [self.id, i] + mem.relation_id = self.id + mem.sequence_id = i mem.member_type = m[0] mem.member_id = m[1] mem.member_role = m[2] diff --git a/app/models/relation_member.rb b/app/models/relation_member.rb index fbaf89daf..389e2ce52 100644 --- a/app/models/relation_member.rb +++ b/app/models/relation_member.rb @@ -1,24 +1,26 @@ class RelationMember < ActiveRecord::Base - set_table_name 'current_relation_members' - - set_primary_keys :id, :sequence_id + set_table_name 'current_relation_members' + set_primary_keys :relation_id, :sequence_id + + belongs_to :relation belongs_to :member, :polymorphic => true - belongs_to :relation, :foreign_key => :id - def after_find - self[:member_class] = self.member_type.classify + after_find :set_class_from_type + after_initialize :set_class_from_type + before_save :set_type_from_class + + def member_type=(type) + self[:member_type] = type + self[:member_class] = type.capitalize end - def after_initialize +private + + def set_class_from_type self[:member_class] = self.member_type.classify unless self.member_type.nil? end - def before_save + def set_type_from_class self.member_type = self[:member_class].classify end - - def member_type=(type) - self[:member_type] = type - self[:member_class] = type.capitalize - end end diff --git a/app/models/relation_tag.rb b/app/models/relation_tag.rb index 812b2ec35..2773d0612 100644 --- a/app/models/relation_tag.rb +++ b/app/models/relation_tag.rb @@ -1,10 +1,11 @@ class RelationTag < ActiveRecord::Base set_table_name 'current_relation_tags' + set_primary_keys :relation_id, :k - belongs_to :relation, :foreign_key => 'id' + belongs_to :relation - validates_presence_of :id - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => :k - validates_numericality_of :id, :only_integer => true + validates_presence_of :relation + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => :relation_id + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/models/request_token.rb b/app/models/request_token.rb index 0044dde26..1ac502bc7 100644 --- a/app/models/request_token.rb +++ b/app/models/request_token.rb @@ -6,7 +6,7 @@ class RequestToken < OauthToken return false if authorized? self.user = user self.authorized_at = Time.now - self.verifier = OAuth::Helper.generate_key(16)[0,20] unless oauth10? + self.verifier = OAuth::Helper.generate_key(20)[0,20] unless oauth10? self.save end @@ -36,7 +36,7 @@ class RequestToken < OauthToken end def oob? - self.callback_url=='oob' + callback_url.nil? || callback_url.downcase == 'oob' end def oauth10? diff --git a/app/models/spam_observer.rb b/app/models/spam_observer.rb index 8b5212111..888b4a0b9 100644 --- a/app/models/spam_observer.rb +++ b/app/models/spam_observer.rb @@ -3,9 +3,9 @@ class SpamObserver < ActiveRecord::Observer def after_save(record) case - when record.is_a?(User): user = record - when record.is_a?(DiaryEntry): user = record.user - when record.is_a?(DiaryComment): user = record.user + when record.is_a?(User) then user = record + when record.is_a?(DiaryEntry) then user = record.user + when record.is_a?(DiaryComment) then user = record.user end if user.status == "active" and user.spam_score > SPAM_THRESHOLD diff --git a/app/models/trace.rb b/app/models/trace.rb index 582c7285c..3f58cee2e 100644 --- a/app/models/trace.rb +++ b/app/models/trace.rb @@ -1,6 +1,14 @@ class Trace < ActiveRecord::Base set_table_name 'gpx_files' + belongs_to :user + has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :delete_all + has_many :points, :class_name => 'Tracepoint', :foreign_key => 'gpx_id', :dependent => :delete_all + + scope :visible, where(:visible => true) + scope :visible_to, lambda { |u| visible.where("visibility IN ('public', 'identifiable') OR user_id = ?", u) } + scope :public, where(:visibility => ["public", "identifiable"]) + validates_presence_of :user_id, :name, :timestamp validates_presence_of :description, :on => :create validates_length_of :name, :maximum => 255 @@ -9,10 +17,6 @@ class Trace < ActiveRecord::Base validates_inclusion_of :inserted, :in => [ true, false ] validates_inclusion_of :visibility, :in => ["private", "public", "trackable", "identifiable"] - belongs_to :user - has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :delete_all - has_many :points, :class_name => 'Tracepoint', :foreign_key => 'gpx_id', :dependent => :delete_all - def destroy super FileUtils.rm_f(trace_name) @@ -262,8 +266,8 @@ class Trace < ActiveRecord::Base # If there are any existing points for this trace then delete # them - we check for existing points first to avoid locking # the table in the common case where there aren't any. - if Tracepoint.find(:first, :conditions => ['gpx_id = ?', self.id]) - Tracepoint.delete_all(['gpx_id = ?', self.id]) + if Tracepoint.where(:gpx_id => self.id).exists? + Tracepoint.delete_all(:gpx_id => self.id) end gpx.points do |point| diff --git a/app/models/user.rb b/app/models/user.rb index 0b2a902df..cf506e7c9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -8,6 +8,7 @@ class User < ActiveRecord::Base has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => { :to_user_visible => true, :message_read => false }, :order => 'sent_on DESC' has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :conditions => { :from_user_visible => true }, :order => 'sent_on DESC' has_many :friends, :include => :befriendee, :conditions => "users.status IN ('active', 'confirmed')" + has_many :friend_users, :through => :friends, :source => :befriendee has_many :tokens, :class_name => "UserToken" has_many :preferences, :class_name => "UserPreference" has_many :changesets, :order => 'created_at DESC' @@ -15,14 +16,18 @@ class User < ActiveRecord::Base has_many :client_applications has_many :oauth_tokens, :class_name => "OauthToken", :order => "authorized_at desc", :include => [:client_application] - has_many :active_blocks, :class_name => "UserBlock", :conditions => ['user_blocks.ends_at > \'#{Time.now.getutc.xmlschema(5)}\' or user_blocks.needs_view'] + has_many :active_blocks, :class_name => "UserBlock", :conditions => proc { [ "user_blocks.ends_at > :ends_at or user_blocks.needs_view", { :ends_at => Time.now.getutc } ] } has_many :roles, :class_name => "UserRole" + scope :visible, where(:status => ["pending", "active", "confirmed"]) + scope :active, where(:status => ["active", "confirmed"]) + scope :public, where(:data_public => true) + validates_presence_of :email, :display_name validates_confirmation_of :email#, :message => ' addresses must match' validates_confirmation_of :pass_crypt#, :message => ' must match the confirmation password' - validates_uniqueness_of :display_name, :allow_nil => true - validates_uniqueness_of :email + validates_uniqueness_of :display_name, :allow_nil => true, :case_sensitive => false, :if => Proc.new { |u| u.display_name_changed? } + validates_uniqueness_of :email, :case_sensitive => false, :if => Proc.new { |u| u.email_changed? } validates_uniqueness_of :openid_url, :allow_nil => true validates_length_of :pass_crypt, :within => 8..255 validates_length_of :display_name, :within => 3..255, :allow_nil => true @@ -36,27 +41,26 @@ class User < ActiveRecord::Base validates_numericality_of :home_zoom, :only_integer => true, :allow_nil => true validates_inclusion_of :preferred_editor, :in => Editors::ALL_EDITORS, :allow_nil => true + after_initialize :set_creation_time before_save :encrypt_password file_column :image, :magick => { :geometry => "100x100>" } - def after_initialize - self.creation_time = Time.now.getutc unless self.attribute_present?(:creation_time) - end - - def encrypt_password - if pass_crypt_confirmation - self.pass_salt = OSM::make_token(8) - self.pass_crypt = OSM::encrypt_password(pass_crypt, pass_salt) - end - end - def self.authenticate(options) if options[:username] and options[:password] - user = find(:first, :conditions => ["email = ? OR display_name = ?", options[:username], options[:username]]) + user = where("email = ? OR display_name = ?", options[:username], options[:username]).first + + if user.nil? + users = where("LOWER(email) = LOWER(?) OR LOWER(display_name) = LOWER(?)", options[:username], options[:username]) + + if users.count == 1 + user = users.first + end + end + user = nil if user and user.pass_crypt != OSM::encrypt_password(options[:password], user.pass_salt) elsif options[:token] - token = UserToken.find(:first, :include => :user, :conditions => ["user_tokens.token = ?", options[:token]]) + token = UserToken.find_by_token(options[:token]) user = token.user if token end @@ -101,7 +105,7 @@ class User < ActiveRecord::Base end def preferred_language - languages.find { |l| Language.find(:first, :conditions => { :code => l }) } + languages.find { |l| Language.exists?(:code => l) } end def preferred_language_from(array) @@ -113,9 +117,7 @@ class User < ActiveRecord::Base gc = OSM::GreatCircle.new(self.home_lat, self.home_lon) bounds = gc.bounds(radius) sql_for_distance = gc.sql_for_distance("home_lat", "home_lon") - nearby = User.find(:all, - :conditions => ["id != ? AND status IN (\'active\', \'confirmed\') AND data_public = ? AND #{sql_for_distance} <= ?", id, true, radius], - :order => sql_for_distance, :limit => num) + nearby = User.where("id != ? AND status IN (\'active\', \'confirmed\') AND data_public = ? AND #{sql_for_distance} <= ?", id, true, radius).order(sql_for_distance).limit(num) else nearby = [] end @@ -191,8 +193,8 @@ class User < ActiveRecord::Base ## # return a spam score for a user def spam_score - changeset_score = self.changesets.find(:all, :limit => 10).length * 50 - trace_score = self.traces.find(:all, :limit => 10).length * 50 + changeset_score = self.changesets.limit(10).length * 50 + trace_score = self.traces.limit(10).length * 50 diary_entry_score = self.diary_entries.inject(0) { |s,e| s += OSM.spam_score(e.body) } diary_comment_score = self.diary_comments.inject(0) { |s,e| s += OSM.spam_score(e.body) } @@ -210,4 +212,17 @@ class User < ActiveRecord::Base def access_token(application_key) return ClientApplication.find_by_key(application_key).access_token_for_user(self) end + +private + + def set_creation_time + self.creation_time = Time.now.getutc unless self.attribute_present?(:creation_time) + end + + def encrypt_password + if pass_crypt_confirmation + self.pass_salt = OSM::make_token(8) + self.pass_crypt = OSM::encrypt_password(pass_crypt, pass_salt) + end + end end diff --git a/app/models/user_block.rb b/app/models/user_block.rb index 8c7ae390b..f8c05c92c 100644 --- a/app/models/user_block.rb +++ b/app/models/user_block.rb @@ -29,7 +29,7 @@ class UserBlock < ActiveRecord::Base # block. this should be caught and dealt with in the controller, # but i've also included it here just in case. def moderator_permissions - errors.add_to_base(I18n.t('user_block.model.non_moderator_update')) if creator_id_changed? and !creator.moderator? - errors.add_to_base(I18n.t('user_block.model.non_moderator_revoke')) unless revoker_id.nil? or revoker.moderator? + errors.add(:base, I18n.t('user_block.model.non_moderator_update')) if creator_id_changed? and !creator.moderator? + errors.add(:base, I18n.t('user_block.model.non_moderator_revoke')) unless revoker_id.nil? or revoker.moderator? end end diff --git a/app/models/user_token.rb b/app/models/user_token.rb index a795de034..dda191187 100644 --- a/app/models/user_token.rb +++ b/app/models/user_token.rb @@ -1,7 +1,11 @@ class UserToken < ActiveRecord::Base belongs_to :user - def after_initialize + after_initialize :set_defaults + +private + + def set_defaults self.token = OSM::make_token() if self.token.blank? self.expiry = 1.week.from_now if self.expiry.blank? end diff --git a/app/models/way.rb b/app/models/way.rb index cc9343e7c..85aca4334 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -7,12 +7,12 @@ class Way < ActiveRecord::Base belongs_to :changeset - has_many :old_ways, :foreign_key => 'id', :order => 'version' + has_many :old_ways, :order => 'version' - has_many :way_nodes, :foreign_key => 'id', :order => 'sequence_id' + has_many :way_nodes, :order => 'sequence_id' has_many :nodes, :through => :way_nodes, :order => 'sequence_id' - has_many :way_tags, :foreign_key => 'id' + has_many :way_tags has_many :containing_relation_members, :class_name => "RelationMember", :as => :member has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder @@ -25,6 +25,9 @@ class Way < ActiveRecord::Base validates_numericality_of :id, :on => :update, :integer_only => true validates_associated :changeset + scope :visible, where(:visible => true) + scope :invisible, where(:visible => false) + # Read in xml as text and return it's Way object representation def self.from_xml(xml, create=false) begin @@ -202,7 +205,7 @@ class Way < ActiveRecord::Base def bbox lons = nodes.collect { |n| n.longitude } lats = nodes.collect { |n| n.latitude } - [ lons.min, lats.min, lons.max, lats.max ] + BoundingBox.new(lons.min, lats.min, lons.max, lats.max) end def update_from(new_way, user) @@ -243,7 +246,7 @@ class Way < ActiveRecord::Base new_nds = (self.nds - old_nodes).sort.uniq unless new_nds.empty? - db_nds = Node.find(:all, :conditions => { :id => new_nds, :visible => true }) + db_nds = Node.where(:id => new_nds, :visible => true) if db_nds.length < new_nds.length missing = new_nds - db_nds.collect { |n| n.id } @@ -265,10 +268,9 @@ class Way < ActiveRecord::Base Way.transaction do self.lock! check_consistency(self, new_way, user) - rel = RelationMember.find(:first, :joins => :relation, - :conditions => [ "visible = ? AND member_type='Way' and member_id=? ", true, self.id]) - raise OSM::APIPreconditionFailedError.new("Way #{self.id} still used by relation #{rel.relation.id}.") if rel - + rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id) + raise OSM::APIPreconditionFailedError.new("Way #{self.id} is still used by relations #{rels.collect { |r| r.id }.join(",")}.") unless rels.empty? + self.changeset_id = new_way.changeset_id self.changeset = new_way.changeset @@ -318,17 +320,17 @@ class Way < ActiveRecord::Base self.save! tags = self.tags - WayTag.delete_all(['id = ?', self.id]) + WayTag.delete_all(:way_id => self.id) tags.each do |k,v| tag = WayTag.new + tag.way_id = self.id tag.k = k tag.v = v - tag.id = self.id tag.save! end nds = self.nds - WayNode.delete_all(['id = ?', self.id]) + WayNode.delete_all(:way_id => self.id) sequence = 1 nds.each do |n| nd = WayNode.new @@ -356,5 +358,4 @@ class Way < ActiveRecord::Base cs.save! end end - end diff --git a/app/models/way_node.rb b/app/models/way_node.rb index 957016b9d..1a2e6928a 100644 --- a/app/models/way_node.rb +++ b/app/models/way_node.rb @@ -1,8 +1,7 @@ class WayNode < ActiveRecord::Base set_table_name 'current_way_nodes' + set_primary_keys :way_id, :sequence_id - set_primary_keys :id, :sequence_id + belongs_to :way belongs_to :node - - belongs_to :way, :foreign_key => :id end diff --git a/app/models/way_tag.rb b/app/models/way_tag.rb index fa9b43361..f0c5eea8b 100644 --- a/app/models/way_tag.rb +++ b/app/models/way_tag.rb @@ -1,14 +1,11 @@ class WayTag < ActiveRecord::Base set_table_name 'current_way_tags' + set_primary_keys :way_id, :k - # False multipart keys. The following would be a hack: - # set_primary_keys :id, :k, :v - # FIXME add a real multipart key to waytags so that we can do eager loadin - - belongs_to :way, :foreign_key => 'id' + belongs_to :way - validates_presence_of :id - validates_length_of :k, :v, :maximum => 255, :allow_blank => true - validates_uniqueness_of :id, :scope => :k - validates_numericality_of :id, :only_integer => true + validates_presence_of :way + validates_length_of :k, :maximum => 255, :allow_blank => true + validates_uniqueness_of :k, :scope => :way_id + validates_length_of :v, :maximum => 255, :allow_blank => true end diff --git a/app/views/browse/_changeset_details.html.erb b/app/views/browse/_changeset_details.html.erb index 9fb9cb860..2d7808137 100644 --- a/app/views/browse/_changeset_details.html.erb +++ b/app/views/browse/_changeset_details.html.erb @@ -24,23 +24,21 @@ <% unless changeset_details.has_valid_bbox? %> <%= t 'browse.changeset_details.no_bounding_box' %> <% else - minlon = changeset_details.min_lon/GeoRecord::SCALE.to_f - minlat = changeset_details.min_lat/GeoRecord::SCALE.to_f - maxlon = changeset_details.max_lon/GeoRecord::SCALE.to_f - maxlat = changeset_details.max_lat/GeoRecord::SCALE.to_f + bbox = changeset_details.bbox.to_unscaled %> - + - - - + + + - +
<%=maxlat -%><%=bbox.max_lat -%>
<%=minlon -%>('><%= t 'browse.changeset_details.box' %>)<%=maxlon -%><%=bbox.min_lon -%>('><%= t 'browse.changeset_details.box' %>)<%=bbox.max_lon -%>
<%= minlat -%><%= bbox.min_lat -%>
@@ -53,7 +51,7 @@ <% @nodes.each do |node| %> - + <% end %>
<%= link_to h(printable_name(node, true)), { :action => "node", :id => node.id.to_s }, :class => link_class('node', node), :title => link_title(node) %>
<%= link_to h(printable_name(node, true)), { :action => "node", :id => node.node_id.to_s }, :class => link_class('node', node), :title => link_title(node) %>
@@ -67,7 +65,7 @@ <% @ways.each do |way| %> - + <% end %> <%= #render :partial => "containing_relation", :collection => changeset_details.containing_relation_members @@ -84,7 +82,7 @@ diff --git a/app/views/browse/_containing_relation.html.erb b/app/views/browse/_containing_relation.html.erb index 474e80f78..6cc0cce6e 100644 --- a/app/views/browse/_containing_relation.html.erb +++ b/app/views/browse/_containing_relation.html.erb @@ -3,9 +3,9 @@ linked_name = link_to h(printable_name(containing_relation.relation)), :action => "relation", :id => containing_relation.relation.id.to_s if containing_relation.member_role.blank? - t 'browse.containing_relation.entry', :relation_name => linked_name + raw t 'browse.containing_relation.entry', :relation_name => linked_name else - t 'browse.containing_relation.entry_role', :relation_name => linked_name, :relation_role => h(containing_relation.member_role) + raw t 'browse.containing_relation.entry_role', :relation_name => linked_name, :relation_role => h(containing_relation.member_role) end %> diff --git a/app/views/browse/_map.html.erb b/app/views/browse/_map.html.erb index 2d04efe04..d3af9bc15 100644 --- a/app/views/browse/_map.html.erb +++ b/app/views/browse/_map.html.erb @@ -1,5 +1,4 @@ -<%= javascript_include_tag '/openlayers/OpenLayers.js' %> -<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %> +<%= javascript_include_tag 'openlayers.js' %> <%= javascript_include_tag 'map.js' %> '; + + // Create "larger map" link + var center = bounds.getCenterLonLat(); + var epsg4326 = new OpenLayers.Projection("EPSG:4326"); + var epsg900913 = new OpenLayers.Projection("EPSG:900913"); + + bounds.transform(epsg4326, epsg900913); + var zoom = map.getZoomForExtent(bounds); + + var layers = getMapLayers(); + + html += '
'+"<%= html_escape_unicode(I18n.t('export.start_rjs.view_larger_map')) %>"+''; + + $("#export_html_text").val(html); + + if ($("#format_html").prop("checked")) { + $("#export_html_text").prop("selected", true); + } +} + +function formatChanged() { + $("#export_commit").show(); + + if ($("#format_osm").prop("checked")) { + $("#export_osm").show(); + } else { + $("#export_osm").hide(); + } + + if ($("#format_mapnik").prop("checked")) { + $("#mapnik_scale").val(roundScale(map.getScale())); + $("#export_mapnik").show(); + } else { + $("#export_mapnik").hide(); + } + + if ($("#format_osmarender").prop("checked")) { + var zoom = Math.min(map.getZoom(), maxOsmarenderZoom()); + + $("#osmarender_zoom option[value=" + zoom + "]").prop("selected", true); + $("#export_osmarender").show(); + } else { + $("#export_osmarender").hide(); + } + + if ($("#format_html").prop("checked")) { + $("#export_html").show(); + $("#export_commit").hide(); + $("#export_html_text").prop("selected", true); + } else { + $("#export_html").hide(); + + clearMarker(); + } + + validateControls(); +} + +function maxMapnikScale() { + var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(), $("#maxlon").val(), $("#maxlat").val()); + var epsg4326 = new OpenLayers.Projection("EPSG:4326"); + var epsg900913 = new OpenLayers.Projection("EPSG:900913"); + + bounds.transform(epsg4326, epsg900913); + + return Math.floor(Math.sqrt(bounds.getWidth() * bounds.getHeight() / 0.3136)); +} + +function mapnikImageSize(scale) { + var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(), $("#maxlon").val(), $("#maxlat").val()); + var epsg4326 = new OpenLayers.Projection("EPSG:4326"); + var epsg900913 = new OpenLayers.Projection("EPSG:900913"); + + bounds.transform(epsg4326, epsg900913); + + return new OpenLayers.Size(Math.round(bounds.getWidth() / scale / 0.00028), + Math.round(bounds.getHeight() / scale / 0.00028)); +} + +function maxOsmarenderZoom() { + var bounds = new OpenLayers.Bounds($("#minlon").val(), $("#minlat").val(), $("#maxlon").val(), $("#maxlat").val()); + var xzoom = Math.LOG2E * Math.log(2000 * 1.40625 / bounds.getWidth()); + var ymin = bounds.bottom * Math.PI / 180; + var ymax = bounds.top * Math.PI / 180; + var yzoom = Math.LOG2E * (Math.log(2000 * 2 * Math.PI) - Math.log(Math.log((Math.tan(ymax) + 1 / Math.cos(ymax)) / (Math.tan(ymin) + 1 / Math.cos(ymin))))) + + return Math.min(Math.floor(Math.min(xzoom, yzoom)), 17); +} + +function roundScale(scale) { + var precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); + + return precision * Math.ceil(scale / precision); +} + +function mapnikSizeChanged() { + var size = mapnikImageSize($("#mapnik_scale").val()); + + $("#mapnik_image_width").html(size.w); + $("#mapnik_image_height").html(size.h); + + validateControls(); +} + +startExport(); diff --git a/app/views/export/start.rjs b/app/views/export/start.rjs deleted file mode 100644 index abf9e671d..000000000 --- a/app/views/export/start.rjs +++ /dev/null @@ -1,354 +0,0 @@ -page.replace_html :sidebar_title, t('export.start_rjs.export') -page.replace_html :sidebar_content, :partial => 'start' -page << < #{MAX_REQUEST_AREA}) { - $("export_osm_too_large").style.display = "block"; - } else { - $("export_osm_too_large").style.display = "none"; - } - - var max_scale = maxMapnikScale(); - - if ($("format_osm").checked && bounds.getWidth() * bounds.getHeight() > #{MAX_REQUEST_AREA}) { - $("export_commit").disabled = true; - } else if ($("format_mapnik").checked && $("mapnik_scale").value < max_scale) { - $("export_commit").disabled = true; - } else { - $("export_commit").disabled = false; - } - - $("mapnik_max_scale").innerHTML = roundScale(max_scale); - - var max_zoom = maxOsmarenderZoom(); - - for (var o = 0; o < $("osmarender_zoom").options.length; o++) { - var option = $("osmarender_zoom").options[o]; - - if (option.value > max_zoom) { - option.disabled = true; - } else { - option.disabled = false; - } - } - - if ($("osmarender_zoom").options.selectedIndex + 4 > max_zoom) { - $("osmarender_zoom").options.selectedIndex = max_zoom - 4; - } - } - - function htmlUrlChanged() { - var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); - var layerName = map.baseLayer.keyid; - var url = "http://#{SERVER_URL}/export/embed.html?bbox=" + bounds.toBBOX() + "&layer=" + layerName; - var markerUrl = ""; - - if ($("marker_lat").value && $("marker_lon").value) { - markerUrl = "&mlat=" + $("marker_lat").value + "&mlon=" + $("marker_lon").value; - url += "&marker=" + $("marker_lat").value + "," + $("marker_lon").value; - } - - var html = ''; - - // Create "larger map" link - var center = bounds.getCenterLonLat(); - var epsg4326 = new OpenLayers.Projection("EPSG:4326"); - var epsg900913 = new OpenLayers.Projection("EPSG:900913"); - - bounds.transform(epsg4326, epsg900913); - var zoom = map.getZoomForExtent(bounds); - - var layers = getMapLayers(); - - html += '
'+"#{html_escape_unicode(I18n.t('export.start_rjs.view_larger_map'))}"+''; - - $("export_html_text").value = html; - - if ($("format_html").checked) { - $("export_html_text").select(); - } - } - - function formatChanged() { - $("export_commit").style.display = "inline"; - - if ($("format_osm").checked) { - $("export_osm").style.display = "inline"; - } else { - $("export_osm").style.display = "none"; - } - - if ($("format_mapnik").checked) { - $("mapnik_scale").value = roundScale(map.getScale()); - $("export_mapnik").style.display = "inline"; - } else { - $("export_mapnik").style.display = "none"; - } - - if ($("format_osmarender").checked) { - var zoom = Math.min(map.getZoom(), maxOsmarenderZoom()); - - $("osmarender_zoom").options.selectedIndex = zoom - 4; - $("export_osmarender").style.display = "inline"; - } else { - $("export_osmarender").style.display = "none"; - } - - if ($("format_html").checked) { - $("export_html").style.display = "inline"; - $("export_commit").style.display = "none"; - $("export_html_text").select(); - } else { - $("export_html").style.display = "none"; - clearMarker(); - } - - validateControls(); - } - - $("format_osm").onclick = formatChanged; - $("format_mapnik").onclick = formatChanged; - $("format_osmarender").onclick = formatChanged; - $("format_html").onclick = formatChanged; - - function maxMapnikScale() { - var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); - var epsg4326 = new OpenLayers.Projection("EPSG:4326"); - var epsg900913 = new OpenLayers.Projection("EPSG:900913"); - - bounds.transform(epsg4326, epsg900913); - - return Math.floor(Math.sqrt(bounds.getWidth() * bounds.getHeight() / 0.3136)); - } - - function mapnikImageSize(scale) { - var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); - var epsg4326 = new OpenLayers.Projection("EPSG:4326"); - var epsg900913 = new OpenLayers.Projection("EPSG:900913"); - - bounds.transform(epsg4326, epsg900913); - - return new OpenLayers.Size(Math.round(bounds.getWidth() / scale / 0.00028), - Math.round(bounds.getHeight() / scale / 0.00028)); - } - - function maxOsmarenderZoom() { - var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); - var xzoom = Math.LOG2E * Math.log(2000 * 1.40625 / bounds.getWidth()); - var ymin = bounds.bottom * Math.PI / 180; - var ymax = bounds.top * Math.PI / 180; - var yzoom = Math.LOG2E * (Math.log(2000 * 2 * Math.PI) - Math.log(Math.log((Math.tan(ymax) + 1 / Math.cos(ymax)) / (Math.tan(ymin) + 1 / Math.cos(ymin))))) - - return Math.min(Math.floor(Math.min(xzoom, yzoom)), 17); - } - - function roundScale(scale) { - var precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); - - return precision * Math.ceil(scale / precision); - } - - function mapnikSizeChanged() { - var size = mapnikImageSize($("mapnik_scale").value); - - $("mapnik_image_width").innerHTML = size.w; - $("mapnik_image_height").innerHTML = size.h; - } - - function mapnikScaleChanged() { - mapnikSizeChanged(); - validateControls(); - } - - $("mapnik_scale").onchange = mapnikScaleChanged; - - startExport(); -EOJ diff --git a/app/views/geocoder/_description.html.erb b/app/views/geocoder/_description.html.erb deleted file mode 100644 index b6a6d82fb..000000000 --- a/app/views/geocoder/_description.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -<% @sources.each do |source| %> - <% if source[:types] %> -

<%= t("geocoder.description.title.#{source[:name]}", :types => t("geocoder.description.types.#{source[:types]}")) %>

- <% else %> -

<%= t("geocoder.description.title.#{source[:name]}") %>

- <% end %> -
- <%= image_tag "searching.gif", :class => "search_searching" %> -
- -<% end %> diff --git a/app/views/geocoder/_search.html.erb b/app/views/geocoder/_search.html.erb deleted file mode 100644 index b28feda09..000000000 --- a/app/views/geocoder/_search.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% @sources.each do |source| %> -

<%= t "geocoder.search.title.#{source}" %>

-
- <%= image_tag "searching.gif", :class => "search_searching" %> -
- -<% end %> diff --git a/app/views/geocoder/description.html.erb b/app/views/geocoder/description.html.erb new file mode 100644 index 000000000..a01954d72 --- /dev/null +++ b/app/views/geocoder/description.html.erb @@ -0,0 +1,13 @@ +<% @sources.each do |source| %> + <% if source[:types] %> +

<%= raw(t("geocoder.description.title.#{source[:name]}", :types => t("geocoder.description.types.#{source[:types]}"))) %>

+ <% else %> +

<%= raw(t("geocoder.description.title.#{source[:name]}")) %>

+ <% end %> +
+ <%= image_tag "searching.gif", :class => "search_searching" %> +
+ +<% end %> diff --git a/app/views/geocoder/results.html.erb b/app/views/geocoder/results.html.erb index 694d0eadb..61d28697d 100644 --- a/app/views/geocoder/results.html.erb +++ b/app/views/geocoder/results.html.erb @@ -6,16 +6,20 @@ <% end %> <% if @more_params %>
-

<%= - startSpinner = update_page do |page| - page.replace_html "search_more_#{@more_params.hash}", image_tag("searching.gif", :class => "search_searching") - end - - link_to_remote t('geocoder.results.more_results'), - :update => "search_more_#{@more_params.hash}", - :before => startSpinner, - :url => @more_params - %>

+

+ <%= link_to t('geocoder.results.more_results'), "#" %> +

+ <%= image_tag "searching.gif", :class => "search_searching" %>
+ <% end %> <% end %> diff --git a/app/views/geocoder/search.html.erb b/app/views/geocoder/search.html.erb new file mode 100644 index 000000000..7bc8fcd76 --- /dev/null +++ b/app/views/geocoder/search.html.erb @@ -0,0 +1,9 @@ +<% @sources.each do |source| %> +

<%= raw(t "geocoder.search.title.#{source}") %>

+
"> + <%= image_tag "searching.gif", :class => "search_searching" %> +
+ +<% end %> diff --git a/app/views/layouts/_flash.html.erb b/app/views/layouts/_flash.html.erb index da559d55c..0380a5094 100644 --- a/app/views/layouts/_flash.html.erb +++ b/app/views/layouts/_flash.html.erb @@ -1,11 +1,11 @@ <% if flash[:error] %> -
<%= flash[:error] %>
+
<%= raw flash[:error] %>
<% end %> <% if flash[:warning] %> -
<%= flash[:warning] %>
+
<%= raw flash[:warning] %>
<% end %> <% if flash[:notice] %> -
<%= flash[:notice] %>
+
<%= raw flash[:notice] %>
<% end %> diff --git a/app/views/layouts/_head.html.erb b/app/views/layouts/_head.html.erb index 206905b94..6e876e166 100644 --- a/app/views/layouts/_head.html.erb +++ b/app/views/layouts/_head.html.erb @@ -1,19 +1,19 @@ <%= javascript_strings %> - <%= javascript_include_tag 'prototype' %> - <%= javascript_include_tag 'site' %> - <%= javascript_include_tag 'menu' %> - - <%= stylesheet_link_tag 'common' %> - <%= stylesheet_link_tag t('html.dir') %> - - <%= stylesheet_link_tag 'small', :media => "only screen and (max-width:641px)" %> - <%= stylesheet_link_tag 'large', :media => "screen and (min-width: 642px)" %> - <%= stylesheet_link_tag 'print', :media => "print" %> - <%= tag("link", { :rel => "search", :type => "application/opensearchdescription+xml", :title => "OpenStreetMap Search", :href => "/opensearch/osm.xml" }) %> + <%= javascript_include_tag "site" %> + <%= javascript_include_tag "menu" %> + + <%= stylesheet_link_tag "small-#{t 'html.dir'}", :media => "only screen and (max-width:641px)" %> + <%= stylesheet_link_tag "large-#{t 'html.dir'}", :media => "screen and (min-width: 642px)" %> + <%= stylesheet_link_tag "print-#{t 'html.dir'}", :media => "print" %> + + <%= favicon_link_tag "favicon.ico" %> + <%= tag("link", { :rel => "publisher", :href => "https://plus.google.com/111953119785824514010" }) %> + <%= tag("link", { :rel => "search", :type => "application/opensearchdescription+xml", :title => "OpenStreetMap Search", :href => asset_path("osm.xml") }) %> <%= tag("meta", { :name => "description", :content => "OpenStreetMap is the free wiki world map." }) %> <%= style_rules %> <%= yield :head %> + <%= csrf_meta_tag %> <%= t 'layouts.project_name.title' %><%= ' | '+ h(@title) if @title %> diff --git a/app/views/layouts/_piwik.html.erb b/app/views/layouts/_piwik.html.erb index 59017e0b7..0b719932d 100644 --- a/app/views/layouts/_piwik.html.erb +++ b/app/views/layouts/_piwik.html.erb @@ -7,6 +7,9 @@ try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", <%= PIWIK_SITE %>); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); +<% if flash[:piwik_goal] -%> +piwikTracker.trackGoal(<%= flash[:piwik_goal] %>); +<% end -%> } catch( err ) {} diff --git a/app/views/layouts/site.html.erb b/app/views/layouts/site.html.erb index 9da2edf47..a2cd2aa40 100644 --- a/app/views/layouts/site.html.erb +++ b/app/views/layouts/site.html.erb @@ -14,13 +14,13 @@ <% if @user and @user.id %> - <%= t 'layouts.welcome_user', :user_link => (link_to h(@user.display_name), {:controller => 'user', :action => 'view', :display_name => @user.display_name}, :title => t('layouts.welcome_user_link_tooltip')) %> + <%= raw(t 'layouts.welcome_user', :user_link => (link_to h(@user.display_name), {:controller => 'user', :action => 'view', :display_name => @user.display_name}, :title => t('layouts.welcome_user_link_tooltip'))) %> <%= link_to t('layouts.welcome_user_link_tooltip'), {:controller => 'user', :action => 'view', :display_name => @user.display_name} %> | <%= yield :greeting %> <%= render :partial => "layouts/inbox" %> | - <%= link_to t('layouts.logout'), {:controller => 'user', :action => 'logout', :session => request.session_options[:id], :referer => request.request_uri}, {:id => 'logoutanchor', :title => t('layouts.logout_tooltip'), :method => :post, :href => url_for(:controller => 'user', :action => 'logout', :referer => request.request_uri)}%> + <%= link_to t('layouts.logout'), {:controller => 'user', :action => 'logout', :session => request.session_options[:id], :referer => request.fullpath}, {:id => 'logoutanchor', :title => t('layouts.logout_tooltip')}%> <% else %> - <%= link_to t('layouts.log_in'), {:controller => 'user', :action => 'login', :referer => request.request_uri}, {:id => 'loginanchor', :title => t('layouts.log_in_tooltip')} %> | + <%= link_to t('layouts.log_in'), {:controller => 'user', :action => 'login', :referer => request.fullpath}, {:id => 'loginanchor', :title => t('layouts.log_in_tooltip')} %> | <%= link_to t('layouts.sign_up'), {:controller => 'user', :action => 'new'}, {:id => 'registeranchor', :title => t('layouts.sign_up_tooltip')} %> <% end %> @@ -42,13 +42,9 @@ diaryclass += ' active' if params['controller'] == 'diary_entry' %>
  • <%= link_to t('layouts.view'), {:controller => 'site', :action => 'index'}, {:id => 'viewanchor', :title => t('layouts.view_tooltip'), :class => viewclass} %>
  • -
  • <%= link_to t('layouts.edit') + ' ▾', {:controller => 'site', :action => 'edit'}, {:id => 'editanchor', :title => t('javascripts.site.edit_tooltip'), :class => editclass} %>
  • +
  • <%= link_to h(t('layouts.edit')) + ' ▾'.html_safe, {:controller => 'site', :action => 'edit'}, {:id => 'editanchor', :title => t('javascripts.site.edit_tooltip'), :class => editclass} %>
  • <%= link_to t('layouts.history'), {:controller => 'changeset', :action => 'list' }, {:id => 'historyanchor', :title => t('javascripts.site.history_tooltip'), :class => historyclass} %>
  • - <% if params['controller'] == 'site' and (params['action'] == 'index' or params['action'] == 'export') %> -
  • <%= link_to_remote t('layouts.export'), {:url => {:controller => 'export', :action => 'start'}}, {:id => 'exportanchor', :title => t('layouts.export_tooltip'), :class => exportclass, :href => url_for(:controller => 'site', :action => 'export')} %>
  • - <% else %>
  • <%= link_to t('layouts.export'), {:controller => 'site', :action => 'export'}, {:id => 'exportanchor', :title => t('layouts.export_tooltip'), :class => exportclass} %>
  • - <% end %>
  • <%= link_to t('layouts.gps_traces'), {:controller => 'trace', :action => 'list', :display_name => nil, :tag => nil, :page => nil}, {:id => 'traceanchor', :title => t('layouts.gps_traces_tooltip'), :class => traceclass} %>
  • <%= link_to t('layouts.user_diaries'), {:controller => 'diary_entry', :action => 'list', :display_name => nil}, {:id => 'diaryanchor', :title => t('layouts.user_diaries_tooltip'), :class => diaryclass} %>
  • @@ -67,7 +63,6 @@
    - <% end %> @@ -108,7 +103,7 @@ <% if false %> <% end %> @@ -123,16 +118,21 @@
    -
    - <%= link_to image_tag("sotm.png", :alt => t('layouts.sotm2011'), :title => t('layouts.sotm2011'), :border => "0"), "http://stateofthemap.org/register-now/" %> -
    -
    + + + <% if defined?(PIWIK_LOCATION) and defined?(PIWIK_SITE) -%> <%= render :partial => "layouts/piwik" %> <% end -%> diff --git a/app/views/message/_message_summary.html.erb b/app/views/message/_message_summary.html.erb index 1397d65af..70fd44035 100644 --- a/app/views/message/_message_summary.html.erb +++ b/app/views/message/_message_summary.html.erb @@ -5,10 +5,10 @@
    <% if message_summary.message_read? %> - + <% else %> - + <% end %> - + diff --git a/app/views/message/_sent_message_summary.html.erb b/app/views/message/_sent_message_summary.html.erb index d4d8b3fa5..f9aa2310d 100644 --- a/app/views/message/_sent_message_summary.html.erb +++ b/app/views/message/_sent_message_summary.html.erb @@ -4,5 +4,5 @@ - + diff --git a/app/views/message/inbox.html.erb b/app/views/message/inbox.html.erb index 897fb24ad..bcd2da33a 100644 --- a/app/views/message/inbox.html.erb +++ b/app/views/message/inbox.html.erb @@ -17,5 +17,5 @@
    <%= link_to h(printable_name(way, true)), { :action => "way", :id => way.id.to_s }, :class => link_class('way', way), :title => link_title(way) %>
    <%= link_to h(printable_name(way, true)), { :action => "way", :id => way.way_id.to_s }, :class => link_class('way', way), :title => link_title(way) %>
    <% @relations.each do |relation| %> - + <% end %>
    <%= link_to h(printable_name(relation, true)), { :action => "relation", :id => relation.id.to_s }, :class => link_class('relation', relation), :title => link_title(relation) %>
    <%= link_to h(printable_name(relation, true)), { :action => "relation", :id => relation.relation_id.to_s }, :class => link_class('relation', relation), :title => link_title(relation) %>
    <%= link_to h(message_summary.title), :controller => 'message', :action => 'read', :message_id => message_summary.id %> <%= l message_summary.sent_on, :format => :friendly %><%= button_to t('message.message_summary.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :onclick => remote_function(:url => {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}) + "; return false;" } %><%= button_to t('message.message_summary.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :remote => true } %><%= button_to t('message.message_summary.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :onclick => remote_function(:url => {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}) + "; return false;" } %><%= button_to t('message.message_summary.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :remote => true } %><%= button_to t('message.message_summary.reply_button'), :controller => 'message', :action => 'reply', :message_id => message_summary.id %><%= button_to t('message.message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.request_uri %><%= button_to t('message.message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.fullpath %>
    <%= link_to h(sent_message_summary.recipient.display_name), :controller => 'user', :action => sent_message_summary.recipient.display_name %> <%= link_to h(sent_message_summary.title), :controller => 'message', :action => 'read', :message_id => sent_message_summary.id %> <%= l sent_message_summary.sent_on, :format => :friendly %><%= button_to t('message.sent_message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => sent_message_summary.id, :referer => request.request_uri %><%= button_to t('message.sent_message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => sent_message_summary.id, :referer => request.fullpath %>
    <% else %> -
    <%= t'message.inbox.no_messages_yet', :people_mapping_nearby_link => link_to(t('message.inbox.people_mapping_nearby'), :controller => 'user', :action => 'view', :display_name => @user.display_name) %>
    +
    <%= raw(t'message.inbox.no_messages_yet', :people_mapping_nearby_link => link_to(t('message.inbox.people_mapping_nearby'), :controller => 'user', :action => 'view', :display_name => @user.display_name)) %>
    <% end %> diff --git a/app/views/message/mark.js.erb b/app/views/message/mark.js.erb new file mode 100644 index 000000000..2e545b62e --- /dev/null +++ b/app/views/message/mark.js.erb @@ -0,0 +1,3 @@ +$("#inboxanchor").replaceWith("<%=j render :partial => "layouts/inbox" %>"); +$("#inbox-count").replaceWith("<%=j render :partial => "message_count" %>"); +$("#inbox-<%= @message.id %>").replaceWith("<%=j render :partial => "message_summary", :object => @message %>"); diff --git a/app/views/message/new.html.erb b/app/views/message/new.html.erb index 85de1e51b..113e566d8 100644 --- a/app/views/message/new.html.erb +++ b/app/views/message/new.html.erb @@ -1,8 +1,8 @@ -

    <%= t'message.new.send_message_to', :name => link_to(h(@to_user.display_name), {:controller => 'user', :action => 'view', :display_name => @to_user.display_name}) %>

    +

    <%= raw(t'message.new.send_message_to', :name => link_to(h(@to_user.display_name), {:controller => 'user', :action => 'view', :display_name => @to_user.display_name})) %>

    <%= error_messages_for 'message' %> -<% form_for :message, :url => { :action => "new", :display_name => @to_user.display_name } do |f| %> +<%= form_for :message, :url => { :action => "new", :display_name => @to_user.display_name } do |f| %> diff --git a/app/views/message/outbox.html.erb b/app/views/message/outbox.html.erb index afd1d2fc5..9662fdbce 100644 --- a/app/views/message/outbox.html.erb +++ b/app/views/message/outbox.html.erb @@ -1,4 +1,4 @@ -

    <%= t'message.outbox.my_inbox', :inbox_link => link_to(t('message.outbox.inbox'), url_for(:controller => "user", :action => "inbox", :id => @user.display_name)) %>/<%= t'message.outbox.outbox' %>

    +

    <%= raw(t'message.outbox.my_inbox', :inbox_link => link_to(t('message.outbox.inbox'), url_for(:controller => "user", :action => "inbox", :id => @user.display_name))) %>/<%= t'message.outbox.outbox' %>

    <%= t'message.outbox.you_have_sent_messages', :count => @user.sent_messages.size %> @@ -15,5 +15,5 @@

    <%= t'message.new.subject' %>
    <% else %> -
    <%= t'message.outbox.no_sent_messages', :people_mapping_nearby_link => link_to(t('message.outbox.people_mapping_nearby'), :controller => 'user', :action => 'view', :display_name => @user.display_name) %>
    +
    <%= raw(t'message.outbox.no_sent_messages', :people_mapping_nearby_link => link_to(t('message.outbox.people_mapping_nearby'), :controller => 'user', :action => 'view', :display_name => @user.display_name)) %>
    <% end %> diff --git a/app/views/notifier/diary_comment_notification.html.erb b/app/views/notifier/diary_comment_notification.text.erb similarity index 94% rename from app/views/notifier/diary_comment_notification.html.erb rename to app/views/notifier/diary_comment_notification.text.erb index efdd620e6..193e10de9 100644 --- a/app/views/notifier/diary_comment_notification.html.erb +++ b/app/views/notifier/diary_comment_notification.text.erb @@ -3,7 +3,7 @@ <%= t'notifier.diary_comment_notification.header', :from_user => @from_user, :subject => @title %> == -<%= @body %> +<%= raw @text %> == <%= t'notifier.diary_comment_notification.footer', :readurl => @readurl, :commenturl => @commenturl, :replyurl => @replyurl %> diff --git a/app/views/notifier/email_confirm.text.html.erb b/app/views/notifier/email_confirm.html.erb similarity index 100% rename from app/views/notifier/email_confirm.text.html.erb rename to app/views/notifier/email_confirm.html.erb diff --git a/app/views/notifier/email_confirm.text.plain.erb b/app/views/notifier/email_confirm.text.erb similarity index 100% rename from app/views/notifier/email_confirm.text.plain.erb rename to app/views/notifier/email_confirm.text.erb diff --git a/app/views/notifier/friend_notification.html.erb b/app/views/notifier/friend_notification.text.erb similarity index 100% rename from app/views/notifier/friend_notification.html.erb rename to app/views/notifier/friend_notification.text.erb diff --git a/app/views/notifier/lost_password.text.html.erb b/app/views/notifier/lost_password.html.erb similarity index 100% rename from app/views/notifier/lost_password.text.html.erb rename to app/views/notifier/lost_password.html.erb diff --git a/app/views/notifier/lost_password.text.plain.erb b/app/views/notifier/lost_password.text.erb similarity index 100% rename from app/views/notifier/lost_password.text.plain.erb rename to app/views/notifier/lost_password.text.erb diff --git a/app/views/notifier/message_notification.html.erb b/app/views/notifier/message_notification.html.erb index 8c5fce74e..ef55b9b96 100644 --- a/app/views/notifier/message_notification.html.erb +++ b/app/views/notifier/message_notification.html.erb @@ -1,10 +1,12 @@ -<%= t'notifier.message_notification.hi', :to_user => @to_user %> +

    <%= t'notifier.message_notification.hi', :to_user => @to_user %>

    -<%= t'notifier.message_notification.header', :from_user => @from_user, :subject => @title %> +

    <%= raw t'notifier.message_notification.header', :from_user => link_to(@from_user, :host => SERVER_URL, :controller => :user, :action => :view, :display_name => @from_user), :subject => @title %>

    == -<%= @body %> +<%= htmlize @text %> == -<%= t'notifier.message_notification.footer1', :readurl => @readurl %> -<%= t'notifier.message_notification.footer2', :replyurl => @replyurl %> +

    + <%= raw t'notifier.message_notification.footer1', :readurl => link_to(@readurl, @readurl) %> + <%= raw t'notifier.message_notification.footer2', :replyurl => link_to(@replyurl, @replyurl) %> +

    diff --git a/app/views/notifier/message_notification.text.erb b/app/views/notifier/message_notification.text.erb new file mode 100644 index 000000000..25b3c0498 --- /dev/null +++ b/app/views/notifier/message_notification.text.erb @@ -0,0 +1,10 @@ +<%= raw t'notifier.message_notification.hi', :to_user => @to_user %> + +<%= raw t'notifier.message_notification.header', :from_user => @from_user, :subject => @title %> + +== +<%= raw @text %> +== + +<%= raw t'notifier.message_notification.footer1', :readurl => @readurl %> +<%= raw t'notifier.message_notification.footer2', :replyurl => @replyurl %> diff --git a/app/views/notifier/signup_confirm.html.erb b/app/views/notifier/signup_confirm.html.erb new file mode 100644 index 000000000..5b7566fba --- /dev/null +++ b/app/views/notifier/signup_confirm.html.erb @@ -0,0 +1,21 @@ +

    <%= t'notifier.signup_confirm_html.greeting' %>

    + +

    <%= t'notifier.signup_confirm_html.hopefully_you' %> + <%= SERVER_URL %>.

    + +

    <%= t'notifier.signup_confirm_html.click_the_link' %>

    + +

    <%= raw(link_to @url, @url) %>

    + +

    <%= raw(t'notifier.signup_confirm_html.introductory_video', :introductory_video_link => link_to(t('notifier.signup_confirm_html.video_to_openstreetmap'), "http://showmedo.com/videos/video?name=1800000&fromSeriesID=180")) %> + <%= raw(t'notifier.signup_confirm_html.more_videos', :more_videos_link => link_to(t('notifier.signup_confirm_html.more_videos_here'), "http://showmedo.com/videos/series?name=mS2P1ZqS6")) %>

    + +

    <%= raw(t'notifier.signup_confirm_html.get_reading') %>

    + +

    <%= raw(t'notifier.signup_confirm_html.ask_questions') %>

    + +

    <%= raw(t'notifier.signup_confirm_html.wiki_signup') %>

    + +

    <%= raw(t'notifier.signup_confirm_html.user_wiki_page') %>

    + +

    <%= raw(t'notifier.signup_confirm_html.current_user') %>

    diff --git a/app/views/notifier/signup_confirm.text.plain.erb b/app/views/notifier/signup_confirm.text.erb similarity index 100% rename from app/views/notifier/signup_confirm.text.plain.erb rename to app/views/notifier/signup_confirm.text.erb diff --git a/app/views/notifier/signup_confirm.text.html.erb b/app/views/notifier/signup_confirm.text.html.erb deleted file mode 100644 index c0883382e..000000000 --- a/app/views/notifier/signup_confirm.text.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -

    <%= t'notifier.signup_confirm_html.greeting' %>

    - -

    <%= t'notifier.signup_confirm_html.hopefully_you' %> - <%= SERVER_URL %>.

    - -

    <%= t'notifier.signup_confirm_html.click_the_link' %>

    - -

    <%= @url %>

    - -

    <%= t'notifier.signup_confirm_html.introductory_video', :introductory_video_link => ('' + t('notifier.signup_confirm_html.video_to_openstreetmap') + '') %> <%= t'notifier.signup_confirm_html.more_videos', :more_videos_link => ('' + t('notifier.signup_confirm_html.more_videos_here') + '') %> - -

    <%= t'notifier.signup_confirm_html.get_reading' %>

    - -

    <%= t'notifier.signup_confirm_html.ask_questions' %>

    - -

    <%= t'notifier.signup_confirm_html.wiki_signup' %>

    - -

    <%= t'notifier.signup_confirm_html.user_wiki_page' %>

    - -

    <%= t'notifier.signup_confirm_html.current_user' %>

    diff --git a/app/views/oauth/oauthorize.html.erb b/app/views/oauth/authorize.html.erb similarity index 64% rename from app/views/oauth/oauthorize.html.erb rename to app/views/oauth/authorize.html.erb index 28178a85c..eaf43f9d1 100644 --- a/app/views/oauth/oauthorize.html.erb +++ b/app/views/oauth/authorize.html.erb @@ -1,6 +1,6 @@

    Authorize access to your account

    -

    <%= t('oauth.oauthorize.request_access', :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(@user.display_name, :controller => :user, :action => :view, :display_name => @user.display_name)) %>

    -<% form_tag authorize_url do %> +

    <%= raw t('oauth.oauthorize.request_access', :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(@user.display_name, :controller => :user, :action => :view, :display_name => @user.display_name)) %>

    +<%= form_tag authorize_url do %> <%= hidden_field_tag "oauth_token", @token.token %> <%- if params[:oauth_callback] -%> <%= hidden_field_tag "oauth_callback", params[:oauth_callback] %> diff --git a/app/views/oauth/authorize_success.html.erb b/app/views/oauth/authorize_success.html.erb index a25b98ec7..89512db31 100644 --- a/app/views/oauth/authorize_success.html.erb +++ b/app/views/oauth/authorize_success.html.erb @@ -1,5 +1,5 @@

    You have allowed this request

    -<% if @token.oob? %> +<% if @token.oob? and not @token.oauth10? %>

    The verification code is <%= @token.verifier %>

    <% end %> diff --git a/app/views/oauth_clients/edit.html.erb b/app/views/oauth_clients/edit.html.erb index 085ddef4e..b27f9b8fc 100644 --- a/app/views/oauth_clients/edit.html.erb +++ b/app/views/oauth_clients/edit.html.erb @@ -1,5 +1,5 @@

    <%= t'oauth_clients.edit.title' %>

    -<% form_for :client_application, @client_application, :url => oauth_client_path(@client_application.user.display_name, @client_application), :html => { :method => :put } do |f| %> +<%= form_for @client_application, :url => oauth_client_path(@client_application.user.display_name, @client_application), :html => { :method => :put } do |f| %> <%= render :partial => "form", :locals => { :f => f } %>
    <%= submit_tag t'oauth_clients.edit.submit' %> diff --git a/app/views/oauth_clients/index.html.erb b/app/views/oauth_clients/index.html.erb index d95c68bcb..d698728f5 100644 --- a/app/views/oauth_clients/index.html.erb +++ b/app/views/oauth_clients/index.html.erb @@ -6,11 +6,11 @@ <%= t'oauth_clients.index.application' %> <%= t'oauth_clients.index.issued_at' %>  <% @tokens.each do |token|%> - <% content_tag_for :tr, token do %> + <%= content_tag_for :tr, token do %> <%= link_to token.client_application.name, token.client_application.url %> <%= token.authorized_at %> - <% form_tag :controller => 'oauth', :action => 'revoke' do %> + <%= form_tag :controller => 'oauth', :action => 'revoke' do %> <%= hidden_field_tag 'token', token.token %> <%= submit_tag t('oauth_clients.index.revoke') %> <% end %> @@ -21,11 +21,11 @@ <% end %>

    <%= t'oauth_clients.index.my_apps' %>

    <% if @client_applications.empty? %> -

    <%= t('oauth_clients.index.no_apps', :oauth => "OAuth") %>

    +

    <%= raw(t('oauth_clients.index.no_apps', :oauth => "OAuth")) %>

    <% else %>

    <%= t'oauth_clients.index.registered_apps' %>

    <% @client_applications.each do |client|%> - <% div_for client do %> + <%= div_for client do %> <%= link_to client.name, :action => :show, :id => client.id %> <% end %> <% end %> diff --git a/app/views/oauth_clients/new.html.erb b/app/views/oauth_clients/new.html.erb index 292c53fc0..2cd748ac6 100644 --- a/app/views/oauth_clients/new.html.erb +++ b/app/views/oauth_clients/new.html.erb @@ -1,5 +1,5 @@

    <%= t'oauth_clients.new.title' %>

    -<% form_for :client_application, :url => { :action => :create } do |f| %> +<%= form_for :client_application, :url => { :action => :create } do |f| %> <%= render :partial => "form", :locals => { :f => f } %>
    <%= submit_tag t('oauth_clients.new.submit') %> diff --git a/app/views/site/_key.html.erb b/app/views/site/_key.html.erb index 6fc70ef46..54bbca6a7 100644 --- a/app/views/site/_key.html.erb +++ b/app/views/site/_key.html.erb @@ -17,14 +17,10 @@ } function updateMapKey() { - var layer = map.baseLayer.keyid; - var zoom = map.getZoom(); - - <%= remote_function :update => "sidebar_content", - :url => { :action => "key" }, - :with => "'layer=' + layer + '&zoom=' + zoom", - :method => :get - %> + $("#sidebar_content").load("<%= url_for :action => :key %>", { + layer: map.baseLayer.keyid, + zoom: map.getZoom() + }); } diff --git a/app/views/site/_potlatch.html.erb b/app/views/site/_potlatch.html.erb index 18e1c4cce..9dcceeb9b 100644 --- a/app/views/site/_potlatch.html.erb +++ b/app/views/site/_potlatch.html.erb @@ -1,5 +1,5 @@
    - <%= t 'site.edit.flash_player_required' %> +
    <%= raw t 'site.edit.flash_player_required' %>
    <%= javascript_include_tag 'swfobject.js' %> @@ -7,9 +7,6 @@ <% session[:token] = @user.tokens.create.token unless session[:token] and UserToken.find_by_token(session[:token]) %> -<% content_for "optionals" do %> +<% content_for :optionals do %>
    <%= t 'site.search.where_am_i' %>

    <%= t 'site.search.search' %>

    - <% form_remote_tag(:before => "setSearchViewbox()", - :loading => "startSearch()", - :complete => "endSearch()", - :url => { :controller => :geocoder, :action => :search }, - :html => { :id => "search_form", :method => "get", :action => url_for(:action => "index") }) do %> + <%= form_tag "#", :id => "search_form" do %> <%= text_field_tag :query, h(params[:query]), :tabindex => "1" %> <%= submit_tag t('site.search.submit_text') %> <% end %>

    - <%= t 'site.search.search_help' %> + <%= raw(t 'site.search.search_help') %>

    <% end %> diff --git a/app/views/site/_sidebar.html.erb b/app/views/site/_sidebar.html.erb index f7e7229c8..3b1b547b6 100644 --- a/app/views/site/_sidebar.html.erb +++ b/app/views/site/_sidebar.html.erb @@ -21,12 +21,12 @@ onclose = null; } - if (options.title) { $("sidebar_title").innerHTML = options.title; } + if (options.title) { $("#sidebar_title").html(options.title); } - if (options.width) { $("sidebar").style.width = options.width; } - else { $("sidebar").style.width = "30%"; } + if (options.width) { $("#sidebar").width(options.width); } + else { $("#sidebar").width("30%"); } - $("sidebar").style.display = "block"; + $("#sidebar").css("display", "block"); <%= onopen %> @@ -34,7 +34,7 @@ } function closeSidebar() { - $("sidebar").style.display = "none"; + $("#sidebar").css("display", "none"); <%= onclose %> @@ -45,8 +45,8 @@ } function updateSidebar(title, content) { - $("sidebar_title").innerHTML = title; - $("sidebar_content").innerHTML = content; + $("#sidebar_title").html(title); + $("#sidebar_content").html(content); } // --> diff --git a/app/views/site/copyright.html.erb b/app/views/site/copyright.html.erb index b5f0db418..c83cef99c 100644 --- a/app/views/site/copyright.html.erb +++ b/app/views/site/copyright.html.erb @@ -15,31 +15,31 @@ <% if t('license_page.legal_babble') != t('license_page.legal_babble', :locale => :en) %>

    <%= t 'license_page.native.title' %>

    - <%= t 'license_page.native.text', - :native_link => link_to(t('license_page.native.native_link'), - :controller => 'site', - :action => 'copyright'), - :mapping_link => link_to(t('license_page.native.mapping_link'), - :controller => 'site', - :action => 'index') %> + <%= raw t 'license_page.native.text', + :native_link => link_to(t('license_page.native.native_link'), + :controller => 'site', + :action => 'copyright'), + :mapping_link => link_to(t('license_page.native.mapping_link'), + :controller => 'site', + :action => 'index') %>


    <% end %> - <%= t('license_page.legal_babble', :locale => :en) %> + <%= raw t('license_page.legal_babble', :locale => :en) %> <% else %> <% if t('license_page.legal_babble') != t('license_page.legal_babble', :locale => :en) %>

    <%= t 'license_page.foreign.title' %>

    - <%= t 'license_page.foreign.text', - :english_original_link => link_to(t('license_page.foreign.english_link'), - :controller => 'site', - :action => 'copyright', - :copyright_locale => 'en') %> + <%= raw t 'license_page.foreign.text', + :english_original_link => link_to(t('license_page.foreign.english_link'), + :controller => 'site', + :action => 'copyright', + :copyright_locale => 'en') %>


    <% end %> - <%= t('license_page.legal_babble') %> + <%= raw t('license_page.legal_babble') %> <% end %> diff --git a/app/views/site/edit.html.erb b/app/views/site/edit.html.erb index 37531a4a7..84de92954 100644 --- a/app/views/site/edit.html.erb +++ b/app/views/site/edit.html.erb @@ -6,9 +6,8 @@

    <% elsif !@user.data_public? %>

    <%= t 'site.edit.not_public' %>

    -

    <%= t 'site.edit.not_public_description', -:user_page => (link_to t('site.edit.user_page_link'), {:controller => 'user', :action => 'account', :display_name => @user.display_name, :anchor => 'public'}) %>

    -

    <%= t 'site.edit.anon_edits', :link => link_to(t('site.edit.anon_edits_link_text'), t('site.edit.anon_edits_link')) %>

    +

    <%= raw t 'site.edit.not_public_description', :user_page => (link_to t('site.edit.user_page_link'), {:controller => 'user', :action => 'account', :display_name => @user.display_name, :anchor => 'public'}) %>

    +

    <%= raw t 'site.edit.anon_edits', :link => link_to(t('site.edit.anon_edits_link_text'), t('site.edit.anon_edits_link')) %>

    <% else %> <% content_for :greeting do %> <% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %> @@ -24,37 +23,36 @@ <% end %> diff --git a/app/views/site/index.html.erb b/app/views/site/index.html.erb index f4a2abd09..43bafac40 100644 --- a/app/views/site/index.html.erb +++ b/app/views/site/index.html.erb @@ -1,7 +1,7 @@ -<% content_for :greeting do %> <% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %> - <%= link_to_function t('layouts.home'), "setPosition(#{@user.home_lat}, #{@user.home_lon}, 15)", { :title => t('layouts.home_tooltip') } %> | -<% end %> + <% content_for :greeting do %> + <%= link_to_function t('layouts.home'), "setPosition(#{@user.home_lat}, #{@user.home_lon}, 15)", { :title => t('layouts.home_tooltip') } %> | + <% end %> <% end %> <%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %> @@ -44,62 +44,62 @@ <% -if params['mlon'] and params['mlat'] +if params[:mlon] and params[:mlat] marker = true - mlon = h(params['mlon']) - mlat = h(params['mlat']) + mlon = params[:mlon].to_f + mlat = params[:mlat].to_f end -if params['node'] or params['way'] or params['relation'] +if params[:node] or params[:way] or params[:relation] object = true object_zoom = true - if params['node'] + if params[:node] object_type = 'node' - object_id = h(params['node']) - elsif params['way'] + object_id = params[:node].to_i + elsif params[:way] object_type = 'way' - object_id = h(params['way']) - elsif params['relation'] + object_id = params[:way].to_i + elsif params[:relation] object_type = 'relation' - object_id = h(params['relation']) + object_id = params[:relation].to_i end end # Decide on a lat lon to initialise the map with. Various ways of doing this -if params['bbox'] +if params[:bbox] bbox = true - minlon, minlat, maxlon, maxlat = h(params['bbox']).split(",") - layers = h(params['layers']) - box = true if params['box']=="yes" + minlon, minlat, maxlon, maxlat = params[:bbox].split(",").collect { |c| c.to_f } + layers = params[:layers] + box = true if params[:box] == "yes" object_zoom = false -elsif params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat'] +elsif params[:minlon] and params[:minlat] and params[:maxlon] and params[:maxlat] bbox = true - minlon = h(params['minlon']) - minlat = h(params['minlat']) - maxlon = h(params['maxlon']) - maxlat = h(params['maxlat']) - layers = h(params['layers']) - box = true if params['box']=="yes" + minlon = params[:minlon].to_f + minlat = params[:minlat].to_f + maxlon = params[:maxlon].to_f + maxlat = params[:maxlat].to_f + layers = params[:layers] + box = true if params[:box]=="yes" object_zoom = false -elsif params['lon'] and params['lat'] - lon = h(params['lon']) - lat = h(params['lat']) - zoom = h(params['zoom'] || '5') - layers = h(params['layers']) +elsif params[:lon] and params[:lat] + lon = params[:lon].to_f + lat = params[:lat].to_f + zoom = params.fetch(:zoom, 5).to_i + layers = params[:layers] object_zoom = false -elsif params['mlon'] and params['mlat'] - lon = h(params['mlon']) - lat = h(params['mlat']) - zoom = h(params['zoom'] || '12') - layers = h(params['layers']) +elsif params[:mlon] and params[:mlat] + lon = params[:mlon].to_f + lat = params[:mlat].to_f + zoom = params.fetch(:zoom, 12).to_i + layers = params[:layers] object_zoom = false elsif cookies.key?("_osm_location") lon,lat,zoom,layers = cookies["_osm_location"].split("|") elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil? lon = @user.home_lon lat = @user.home_lat - zoom = '10' + zoom = 10 else unless STATUS == :database_readonly or STATUS == :database_offline session[:location] = OSM::IPLocation(request.env['REMOTE_ADDR']) unless session[:location] @@ -112,17 +112,16 @@ else maxlon = session[:location][:maxlon] maxlat = session[:location][:maxlat] else - lon = '-0.1' - lat = '51.5' - zoom = h(params['zoom'] || '5') + lon = -0.1 + lat = 51.5 + zoom = params.fetch(:zoom, 5).to_i end - layers = h(params['layers']) + layers = params[:layers] end %> -<%= javascript_include_tag '/openlayers/OpenLayers.js' %> -<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %> +<%= javascript_include_tag 'openlayers.js' %> <%= javascript_include_tag 'map.js' %> <%= render :partial => 'resize' %> @@ -200,7 +199,7 @@ end map.noteLayer.setVisibility(true); <% end -%> - $("createnoteanchor").observe("click", addNote); + $("#createnoteanchor").click(addNote); map.events.register("zoomend", map, allowNoteReports); <% end %> @@ -212,20 +211,18 @@ end setMapExtent(bbox); <% if box %> - Event.observe(window, "load", function() { addBoxToMap(bbox) }); + $(window).load(function() { addBoxToMap(bbox) }); <% end %> <% else %> var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>); var zoom = <%= zoom %>; - <% if params['scale'] and params['scale'].length > 0 then %> - zoom = scaleToZoom(<%= params['scale'].to_f() %>); + <% if params[:scale] and params[:scale].length > 0 then %> + zoom = scaleToZoom(<%= params[:scale].to_f %>); <% end %> setMapCenter(centre, zoom); <% end %> - - updateLocation(); <% end %> <% if !layers.nil? and !layers.empty? %> @@ -243,18 +240,19 @@ end url += "/full"; <% end %> - Event.observe(window, "load", function() { addObjectToMap(url, <%= object_zoom %>) }); + $(window).load(function() { addObjectToMap(url, <%= object_zoom %>) }); <% end %> map.events.register("moveend", map, updateLocation); map.events.register("changelayer", map, updateLocation); + updateLocation(); handleResize(); } function toggleData() { if (map.dataLayer.visibility) { - <%= remote_function :url => { :controller => 'browse', :action => 'start' } %> + $.ajax({ url: "<%= url_for :controller => :browse, :action => :start %>" }); } else if (map.dataLayer.active) { closeSidebar(); } @@ -309,21 +307,21 @@ end var extent = getMapExtent(); var loaded = false; - $("linkloader").observe("load", function () { loaded = true; }); - $("linkloader").src = "http://127.0.0.1:8111/load_and_zoom?left=" + extent.left + "&top=" + extent.top + "&right=" + extent.right + "&bottom=" + extent.bottom; + $("#linkloader").load(function () { loaded = true; }); + $("#linkloader").attr("src", "http://127.0.0.1:8111/load_and_zoom?left=" + extent.left + "&top=" + extent.top + "&right=" + extent.right + "&bottom=" + extent.bottom); setTimeout(function () { - if (!loaded) alert("<%= escape_javascript(t('site.index.remote_failed')) %>"); + if (!loaded) alert("<%=j t('site.index.remote_failed') %>"); }, 1000); - event.stop(); + return false; } function installEditHandler() { - $("remoteanchor").observe("click", remoteEditHandler); + $("#remoteanchor").click(remoteEditHandler); <% if preferred_editor == "remote" %> - $("editanchor").observe("click", remoteEditHandler); + $("#editanchor").click(remoteEditHandler); <% if params[:action] == "edit" %> remoteEditHandler(); @@ -364,17 +362,17 @@ end function allowNoteReports() { if (map.getZoom() > 11) { - $("createnoteanchor").style.visibility = "visible"; + $("#createnoteanchor").show(); } else { - $("createnoteanchor").style.visibility = "hidden"; + $("#createnoteanchor").hide(); } } - document.observe("dom:loaded", mapInit); - document.observe("dom:loaded", installEditHandler); - document.observe("dom:loaded", handleResize); + $(document).ready(mapInit); + $(document).ready(installEditHandler); + $(document).ready(handleResize); - Event.observe(window, "resize", function() { + $(window).resize(function() { var centre = map.getCenter(); var zoom = map.getZoom(); @@ -383,7 +381,19 @@ end map.setCenter(centre, zoom); }); - <% if params['action'] == 'export' %> - <%= remote_function :url => { :controller => 'export', :action => 'start' } %> - <% end %> + $(document).ready(function () { + $("#exportanchor").click(function (e) { + $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>" }); + Event.stop(e); + }); + + <% if params[:action] == 'export' -%> + $.ajax({ url: "<%= url_for :controller => :export, :action => :start %>" }); + <% end -%> + + <% if params[:query] -%> + doSearch("<%= params[:query] %>"); + <% end %> + }); +// --> diff --git a/app/views/site/key.html.erb b/app/views/site/key.html.erb index d0fd36148..294224b18 100644 --- a/app/views/site/key.html.erb +++ b/app/views/site/key.html.erb @@ -1,6 +1,6 @@
    - <% YAML.load_file("#{RAILS_ROOT}/config/key.yml").each do |name,data| %> + <% YAML.load_file("#{Rails.root}/config/key.yml").each do |name,data| %> <% if params[:layer] == name %> <% data.each do |entry| %> <% if params[:zoom].to_i >= entry['min_zoom'] && params[:zoom].to_i <= entry['max_zoom'] %> diff --git a/app/views/trace/_trace.html.erb b/app/views/trace/_trace.html.erb index 31e4cf0b1..32717d824 100644 --- a/app/views/trace/_trace.html.erb +++ b/app/views/trace/_trace.html.erb @@ -25,7 +25,7 @@ <%= t'trace.trace.by' %> <%=link_to h(trace.user.display_name), {:controller => 'user', :action => 'view', :display_name => trace.user.display_name} %> <% if !trace.tags.empty? %> <%= t'trace.trace.in' %> - <%= trace.tags.collect { |tag| link_to_tag tag.tag }.join(", ") %> + <%= raw(trace.tags.collect { |tag| link_to_tag tag.tag }.join(", ")) %> <% end %> diff --git a/app/views/trace/_trace_optionals.html.erb b/app/views/trace/_trace_optionals.html.erb index 69eedd143..d541c985b 100644 --- a/app/views/trace/_trace_optionals.html.erb +++ b/app/views/trace/_trace_optionals.html.erb @@ -1,4 +1,4 @@ -<% content_for "optionals" do %> +<% content_for :optionals do %>

    <%= t'trace.trace_optionals.tags' %>


    diff --git a/app/views/trace/create.html.erb b/app/views/trace/create.html.erb index 4b168fab0..23346a951 100644 --- a/app/views/trace/create.html.erb +++ b/app/views/trace/create.html.erb @@ -2,7 +2,7 @@ <%= error_messages_for 'trace' %> -<% form_for :trace, @trace, :url => { :action => "create" }, :html => { :multipart => true } do |f| %> +<%= form_for @trace, :url => { :action => "create" }, :html => { :multipart => true } do |f| %>
    diff --git a/app/views/trace/edit.html.erb b/app/views/trace/edit.html.erb index 202f9039d..a694d55bb 100644 --- a/app/views/trace/edit.html.erb +++ b/app/views/trace/edit.html.erb @@ -2,7 +2,7 @@ -<% form_for :trace, @trace do |f| %> +<%= form_for @trace, :url => { :action => "edit" } do |f| %>
    <%= t'trace.trace_form.upload_gpx' %><%= f.file_field :gpx_file, :size => 50, :maxlength => 255 %>
    <%= t'trace.trace_form.description' %><%= f.text_field :description, :size => 50, :maxlength => 255 %>
    diff --git a/app/views/trace/list.html.erb b/app/views/trace/list.html.erb index 31ea0eb3a..2475b5ad2 100644 --- a/app/views/trace/list.html.erb +++ b/app/views/trace/list.html.erb @@ -14,7 +14,7 @@ <% if @display_name %> | <%= link_to t('trace.trace_header.see_all_traces'), :controller => 'trace', :action => 'list', :display_name => nil, :tag => nil, :page => nil %> <% end %> - <% unless_user(@target_user, :span) do %> + <%= unless_user(@target_user, :span) do %> | <%= link_to t('trace.trace_header.see_your_traces'), :action => 'mine', :tag => nil, :page => nil %> <% end %> <% end %> diff --git a/app/views/trace/view.html.erb b/app/views/trace/view.html.erb index 0d9b6213f..5a7c5bcc6 100644 --- a/app/views/trace/view.html.erb +++ b/app/views/trace/view.html.erb @@ -38,7 +38,7 @@
    <%= t'trace.view.tags' %> <% unless @trace.tags.empty? %> - <%= @trace.tags.collect { |tag| link_to tag.tag, { :controller => 'trace', :action => 'list', :tag => tag.tag, :id => nil } }.join(", ") %> + <%= raw(@trace.tags.collect { |tag| link_to tag.tag, { :controller => 'trace', :action => 'list', :tag => tag.tag, :id => nil } }.join(", ")) %> <% else %> <%= t'trace.view.none' %> <% end %> @@ -52,7 +52,7 @@

    -<% if_user(@trace.user) do %> +<%= if_user(@trace.user) do %> diff --git a/app/views/user/_contact.html.erb b/app/views/user/_contact.html.erb index d720353ee..9bac0dc2d 100644 --- a/app/views/user/_contact.html.erb +++ b/app/views/user/_contact.html.erb @@ -33,9 +33,9 @@ <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => contact.display_name %> | <% if @user.is_friends_with?(contact) %> - <%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => contact.display_name, :referer => request.request_uri %> + <%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => contact.display_name, :referer => request.fullpath %> <% else %> - <%= link_to t('user.view.add as friend'), :controller => 'user', :action => 'make_friend', :display_name => contact.display_name, :referer => request.request_uri %> + <%= link_to t('user.view.add as friend'), :controller => 'user', :action => 'make_friend', :display_name => contact.display_name, :referer => request.fullpath %> <% end %> diff --git a/app/views/user/_map.html.erb b/app/views/user/_map.html.erb index 6ab713995..eb99f4372 100644 --- a/app/views/user/_map.html.erb +++ b/app/views/user/_map.html.erb @@ -13,8 +13,7 @@ else end %> -<%= javascript_include_tag '/openlayers/OpenLayers.js' %> -<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %> +<%= javascript_include_tag 'openlayers.js' %> <%= javascript_include_tag 'map.js' %>

    <%= t 'user.confirm.heading' %>

    <%= t 'user.confirm.press confirm button' %>

    - +<%= form_tag({}, { :id => "confirm" }) do %> - +<% end %> diff --git a/app/views/user/confirm_email.html.erb b/app/views/user/confirm_email.html.erb index fd17ef08a..5efc6a2c5 100644 --- a/app/views/user/confirm_email.html.erb +++ b/app/views/user/confirm_email.html.erb @@ -1,16 +1,16 @@

    <%= t 'user.confirm_email.heading' %>

    <%= t 'user.confirm_email.press confirm button' %>

    - +<%= form_tag({}, { :id => "confirm" }) do %> - +<% end %> diff --git a/app/views/user/list.html.erb b/app/views/user/list.html.erb index fac7c442f..c19c0ac6c 100644 --- a/app/views/user/list.html.erb +++ b/app/views/user/list.html.erb @@ -3,7 +3,7 @@

    <%= t('user.list.heading') %>

    <% unless @users.empty? %> - <% form_tag do %> + <%= form_tag do %> <%= hidden_field_tag :status, params[:status] if params[:status] %> <%= hidden_field_tag :ip, params[:ip] if params[:ip] %> <%= hidden_field_tag :page, params[:page] if params[:page] %> @@ -22,13 +22,7 @@ <% end %> <%= render :partial => 'user', :collection => @users %> @@ -38,6 +32,12 @@ <%= submit_tag t('user.list.confirm'), :name => "confirm" %> <%= submit_tag t('user.list.hide'), :name => "hide" %> + + <% end %> <% else %>

    <%= t "user.list.empty" %>

    diff --git a/app/views/user/login.html.erb b/app/views/user/login.html.erb index 2d90ba7cf..dc330feae 100644 --- a/app/views/user/login.html.erb +++ b/app/views/user/login.html.erb @@ -3,7 +3,7 @@

    <%= t 'user.login.heading' %>

    - <% form_tag({ :action => "login" }, { :id => "login_form" }) do %> + <%= form_tag({ :action => "login" }, { :id => "login_form" }) do %> <%= hidden_field_tag('referer', h(params[:referer])) %>

    <%= t 'user.login.with username' %>

    @@ -21,16 +21,7 @@
    <%= button_to t('trace.view.edit_track'), :controller => 'trace', :action => 'edit', :id => @trace.id %>
    - <%= - check_box_tag("user_all", "1", false, :onchange => update_page do |page| - @users.each do |user| - page << "$('user_#{user.id}').checked = $('user_all').checked;" - end - end) - %> + <%= check_box_tag "user_all", "1", false %>
    - + @@ -42,10 +33,10 @@
    - <%= - link_to_function(image_tag("openid.png", :alt => t("user.login.openid_providers.openid.title")), nil, :title => t("user.login.openid_providers.openid.title")) do |page| - page[:login_form][:openid_url].value = "http://" - page[:login_openid_buttons].hide - page[:login_openid_url].show - page[:login_openid_submit].show - end - %> - <%= link_to_function(image_tag("openid.png", :alt => t("user.login.openid_providers.openid.title")), "showOpenidUrl()", :title => t("user.login.openid_providers.openid.title")) %> <%= openid_button "google", "gmail.com" %> <%= openid_button "yahoo", "me.yahoo.com" %> <%= openid_button "myopenid", "myopenid.com" %>
    @@ -72,9 +63,19 @@ -<%= - update_page_tag do |page| - page[:login_openid_url].hide - page[:login_openid_submit].hide - end -%> + diff --git a/app/views/user/logout.html.erb b/app/views/user/logout.html.erb index e6d0dec59..8cf762474 100644 --- a/app/views/user/logout.html.erb +++ b/app/views/user/logout.html.erb @@ -1,5 +1,5 @@

    <%= t 'user.logout.heading' %>

    -<% form_tag :action => "logout" do %> +<%= form_tag :action => "logout" do %> <%= hidden_field_tag("referer", h(params[:referer])) %> <%= hidden_field_tag("session", request.session_options[:id]) %> <%= submit_tag t('user.logout.logout_button') %> diff --git a/app/views/user/lost_password.html.erb b/app/views/user/lost_password.html.erb index cdee822e4..db1ee742d 100644 --- a/app/views/user/lost_password.html.erb +++ b/app/views/user/lost_password.html.erb @@ -2,7 +2,7 @@

    <%= t 'user.lost_password.help_text' %>

    -<% form_tag :action => 'lost_password' do %> +<%= form_tag :action => 'lost_password' do %>
    - <%= t 'user.login.openid', :logo => openid_logo %> + <%= raw t 'user.login.openid', :logo => openid_logo %> - <%= text_field_tag("openid_url", "", { :size => 28, :maxlength => 255, :tabindex => 3, :class => "openid_url" }) %> + <%= url_field_tag("openid_url", "", { :size => 28, :maxlength => 255, :tabindex => 3, :class => "openid_url" }) %> (<%= t 'user.account.openid.link text' %>)
    diff --git a/app/views/user/new.html.erb b/app/views/user/new.html.erb index 730676355..2bf6f5281 100644 --- a/app/views/user/new.html.erb +++ b/app/views/user/new.html.erb @@ -1,6 +1,6 @@

    <%= t 'user.new.heading' %>

    -<% if Acl.find_by_address(request.remote_ip, :conditions => {:k => "no_account_creation"}) %> +<% if Acl.address(request.remote_ip).where(:k => "no_account_creation").exists? %>

    <%= t 'user.new.no_auto_account_create' %>

    @@ -12,28 +12,28 @@ <%= error_messages_for 'user' %> -<% form_tag :action => 'terms' do %> +<%= form_for :user, :url => { :action => 'terms' } do %> <%= hidden_field_tag('referer', h(@referer)) unless @referer.nil? %>
    <%= t 'user.lost_password.email address' %>
    - + - + - + - + @@ -42,8 +42,8 @@ - - + + @@ -59,7 +59,7 @@ @@ -76,24 +76,24 @@ <% end %>

    <% end %> @@ -25,7 +25,7 @@ <%= render :partial => "terms" %> -<% form_tag({:action => "save"}, { :id => "termsForm" }) do %> +<%= form_tag({:action => "save"}, { :id => "termsForm" }) do %>

    <%= check_box('user', 'consider_pd') %> @@ -47,5 +47,5 @@


    -

    <%= t 'user.terms.guidance', :summary => 'http://www.osmfoundation.org/wiki/License/Contributor_Terms_Summary', :translations => 'http://www.osmfoundation.org/wiki/License/Contributor_Terms/Informal_Translations' %>

    +

    <%= raw t 'user.terms.guidance', :summary => 'http://www.osmfoundation.org/wiki/License/Contributor_Terms_Summary', :translations => 'http://www.osmfoundation.org/wiki/License/Contributor_Terms/Informal_Translations' %>

    <% end %> diff --git a/app/views/user/view.html.erb b/app/views/user/view.html.erb index 08c4669ae..0c6968be8 100644 --- a/app/views/user/view.html.erb +++ b/app/views/user/view.html.erb @@ -43,7 +43,7 @@ | <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> | - <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'view', :display_name => @this_user.display_name %> + <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %> | <%= link_to t('user.view.notes'), :controller => 'note', :action=> 'mine' %> | @@ -82,12 +82,24 @@

    <%= t 'user.view.mapper since' %> <%= l @this_user.creation_time, :format => :friendly %> <%= t 'user.view.ago', :time_in_words_ago => time_ago_in_words(@this_user.creation_time) %>

    -<% if @user and @user.administrator? %> +

    <%= t 'user.view.ct status' %> +<% if not @this_user.terms_agreed.nil? -%> +<%= t 'user.view.ct accepted', :ago =>time_ago_in_words(@this_user.terms_agreed) %> +<% elsif not @this_user.terms_seen? -%> +<%= t 'user.view.ct undecided' %> +<% else -%> +<%= t 'user.view.ct declined' %> +<% end -%> +

    + +<% if @user and @user.administrator? -%>

    <%= t 'user.view.email address' %> <%= @this_user.email %>

    + <% unless @this_user.creation_ip.nil? -%>

    <%= t 'user.view.created from' %> <%= @this_user.creation_ip %>

    + <% end -%>

    <%= t 'user.view.status' %> <%= @this_user.status.capitalize %>

    <%= t 'user.view.spam score' %> <%= @this_user.spam_score %>

    -<% end %> +<% end -%>

    <%= t 'user.view.description' %>

    @@ -96,7 +108,7 @@ <% if @user and @this_user.id == @user.id %>
    <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %> -

    <%= t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name) %>

    +

    <%= raw(t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name)) %>

    <% else %> <%= render :partial => 'map', :locals => { :setting_location => false, :show_other_users => true } %> <% end %> @@ -110,6 +122,7 @@ <% if friends.empty? %> <%= t 'user.view.no friends' %> <% else %> + <%= link_to t('user.view.friends_changesets'), {:controller => 'browse', :action => 'friends'} %>

    <%= t 'user.new.email address' %><%= text_field(:user, :email, { :size => 50, :maxlength => 255, :tabindex => 1, :value => params[:email] }) %><%= email_field(:user, :email, { :size => 50, :maxlength => 255, :tabindex => 1 }) %>
    <%= t 'user.new.confirm email address' %><%= text_field(:user, :email_confirmation, { :size => 50, :maxlength => 255, :tabindex => 2, :value => params[:email] }) %><%= email_field(:user, :email_confirmation, { :size => 50, :maxlength => 255, :tabindex => 2 }) %>
    <%= t 'user.new.not displayed publicly' %><%= raw(t 'user.new.not displayed publicly') %>
     
    <%= t 'user.new.display name' %><%= text_field(:user, :display_name, { :size => 30, :maxlength => 255, :tabindex => 3, :value => params[:nickname] }) %>
    <%= text_field(:user, :display_name, { :size => 30, :maxlength => 255, :tabindex => 3 }) %>
    <%= t 'user.new.display name description' %>
     
    <%= t 'user.new.openid', :logo => openid_logo %><%= text_field(:user, :openid_url, { :id => "openid_url", :size => 50, :maxlength => 255, :tabindex => 4, :value => params[:openid], :class => "openid_url" }) %><%= raw t 'user.new.openid', :logo => openid_logo %><%= url_field(:user, :openid_url, { :id => "openid_url", :size => 50, :maxlength => 255, :tabindex => 4, :class => "openid_url" }) %>
     
    - <%= link_to_function(t('user.new.use openid', :logo => openid_logo), "enableOpenID()") %> + <%= link_to_function(raw(t('user.new.use openid', :logo => openid_logo)), "enableOpenID()") %> <%= t 'user.new.openid no password' %>
    <%= render :partial => "contact", :collection => friends %>
    diff --git a/app/views/user_blocks/blocks_by.html.erb b/app/views/user_blocks/blocks_by.html.erb index c9158536b..dc523cee9 100644 --- a/app/views/user_blocks/blocks_by.html.erb +++ b/app/views/user_blocks/blocks_by.html.erb @@ -1,5 +1,5 @@ <% @title = t('user_block.blocks_by.title', :name => h(@this_user.display_name)) %> -

    <%= t('user_block.blocks_by.heading', :name => link_to(h(@this_user.display_name), {:controller => 'user', :action => 'view', :display_name => @this_user.display_name})) %>

    +

    <%= raw(t('user_block.blocks_by.heading', :name => link_to(h(@this_user.display_name), {:controller => 'user', :action => 'view', :display_name => @this_user.display_name}))) %>

    <% unless @user_blocks.empty? %> <%= render :partial => 'blocks', :locals => { :show_revoke_link => (@user and @user.moderator?), :show_user_name => true, :show_creator_name => false } %> diff --git a/app/views/user_blocks/blocks_on.html.erb b/app/views/user_blocks/blocks_on.html.erb index 2074af433..86ae110df 100644 --- a/app/views/user_blocks/blocks_on.html.erb +++ b/app/views/user_blocks/blocks_on.html.erb @@ -1,5 +1,5 @@ <% @title = t('user_block.blocks_on.title', :name => h(@this_user.display_name)) %> -

    <%= t('user_block.blocks_on.heading', :name => link_to(h(@this_user.display_name), {:controller => 'user', :action => 'view', :display_name => @this_user.display_name})) %>

    +

    <%= raw(t('user_block.blocks_on.heading', :name => link_to(h(@this_user.display_name), {:controller => 'user', :action => 'view', :display_name => @this_user.display_name}))) %>

    <% unless @user_blocks.empty? %> <%= render :partial => 'blocks', :locals => { :show_revoke_link => (@user and @user.moderator?), :show_user_name => false, :show_creator_name => true } %> diff --git a/app/views/user_blocks/edit.html.erb b/app/views/user_blocks/edit.html.erb index 387335d9d..777022dab 100644 --- a/app/views/user_blocks/edit.html.erb +++ b/app/views/user_blocks/edit.html.erb @@ -4,7 +4,7 @@ h(@user_block.user.display_name), {:controller => 'user', :action => 'view', :display_name => @user_block.user.display_name})) %> -<% form_for(@user_block) do |f| %> +<%= form_for(@user_block) do |f| %> <%= f.error_messages %>

    diff --git a/app/views/user_blocks/new.html.erb b/app/views/user_blocks/new.html.erb index 3d3e6855c..80854b840 100644 --- a/app/views/user_blocks/new.html.erb +++ b/app/views/user_blocks/new.html.erb @@ -1,10 +1,10 @@ <% @title = t 'user_block.new.title', :name => h(@this_user.display_name) %> -

    <%= t('user_block.new.heading', - :name => link_to( - h(@this_user.display_name), - {:controller => 'user', :action => 'view', :display_name => @this_user.display_name})) %>

    +

    <%= raw t('user_block.new.heading', + :name => link_to( + h(@this_user.display_name), + {:controller => 'user', :action => 'view', :display_name => @this_user.display_name})) %>

    -<% form_for(@user_block) do |f| %> +<%= form_for(@user_block) do |f| %> <%= f.error_messages %>

    diff --git a/app/views/user_blocks/revoke.html.erb b/app/views/user_blocks/revoke.html.erb index 9f142c802..0819357d3 100644 --- a/app/views/user_blocks/revoke.html.erb +++ b/app/views/user_blocks/revoke.html.erb @@ -14,7 +14,7 @@ <%= t('user_block.revoke.time_future', :time => distance_of_time_in_words_to_now(@user_block.ends_at)) %>

    -<% form_for :revoke, :url => { :action => "revoke" } do |f| %> +<%= form_for :revoke, :url => { :action => "revoke" } do |f| %> <%= f.error_messages %>

    <%= check_box_tag 'confirm', 'yes' %> diff --git a/app/views/user_blocks/show.html.erb b/app/views/user_blocks/show.html.erb index bc405ecce..4ba69a73f 100644 --- a/app/views/user_blocks/show.html.erb +++ b/app/views/user_blocks/show.html.erb @@ -1,13 +1,13 @@ <% @title = t('user_block.show.title', :block_on => @user_block.user.display_name, :block_by => @user_block.creator.display_name) %> -

    <%= t('user_block.show.heading', - :block_on => link_to( - h(@user_block.user.display_name), - {:controller => 'user', :action => 'view', :display_name => @user_block.user.display_name}), - :block_by => link_to( - h(@user_block.creator.display_name), - {:controller => 'user', :action => 'view', :display_name => @user_block.creator.display_name})) %>

    +

    <%= raw t('user_block.show.heading', + :block_on => link_to( + h(@user_block.user.display_name), + {:controller => 'user', :action => 'view', :display_name => @user_block.user.display_name}), + :block_by => link_to( + h(@user_block.creator.display_name), + {:controller => 'user', :action => 'view', :display_name => @user_block.creator.display_name})) %>

    <% if @user_block.revoker %>

    <%= t'user_block.show.revoker' %> diff --git a/app/views/user_roles/grant.html.erb b/app/views/user_roles/grant.html.erb index cee4112b7..13f81184c 100644 --- a/app/views/user_roles/grant.html.erb +++ b/app/views/user_roles/grant.html.erb @@ -1,4 +1,4 @@ -<% form_tag request.request_uri do %> +<%= form_tag request.fullpath do %> <%= hidden_field_tag 'nonce', @nonce %> <% @title = t('user_role.grant.heading') %>

    <%= t('user_role.grant.heading') %>

    diff --git a/app/views/user_roles/revoke.html.erb b/app/views/user_roles/revoke.html.erb index e5aadeae0..240a91fff 100644 --- a/app/views/user_roles/revoke.html.erb +++ b/app/views/user_roles/revoke.html.erb @@ -1,4 +1,4 @@ -<% form_tag request.request_uri do %> +<%= form_tag request.fullpath do %> <%= hidden_field_tag 'nonce', @nonce %> <% @title = t('user_role.revoke.heading') %>

    <%= t('user_role.revoke.heading') %>

    diff --git a/config.ru b/config.ru new file mode 100644 index 000000000..205abe353 --- /dev/null +++ b/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run OpenStreetMap::Application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 000000000..0713451e5 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,67 @@ +require File.expand_path('../boot', __FILE__) + +require File.expand_path('../preinitializer', __FILE__) + +if STATUS == :database_offline +require "action_controller/railtie" +require "action_mailer/railtie" +require "active_resource/railtie" +require "sprockets/railtie" +require "rails/test_unit/railtie" +else +require 'rails/all' +end + +if defined?(Bundler) + # If you precompile assets before deploying to production, use this line + Bundler.require *Rails.groups(:assets => %w(development test)) + # If you want your assets lazily compiled in production, use this line + # Bundler.require(:default, :assets, Rails.env) +end + +module OpenStreetMap + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + config.autoload_paths += %W(#{config.root}/lib) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + unless STATUS == :database_offline + config.active_record.observers = :spam_observer + end + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password, :pass_crypt, :pass_crypt_confirmation] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + unless STATUS == :database_offline + config.active_record.schema_format = :sql + end + end +end diff --git a/config/boot.rb b/config/boot.rb index 9759b93f3..4489e5868 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,110 +1,6 @@ -# Don't change this file! -# Configure your app in config/environment.rb and config/environments/*.rb +require 'rubygems' -RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -module Rails - class << self - def boot! - unless booted? - preinitialize - pick_boot.run - end - end - - def booted? - defined? Rails::Initializer - end - - def pick_boot - (vendor_rails? ? VendorBoot : GemBoot).new - end - - def vendor_rails? - File.exist?("#{RAILS_ROOT}/vendor/rails") - end - - def preinitialize - load(preinitializer_path) if File.exist?(preinitializer_path) - end - - def preinitializer_path - "#{RAILS_ROOT}/config/preinitializer.rb" - end - end - - class Boot - def run - load_initializer - Rails::Initializer.run(:set_load_path) - end - end - - class VendorBoot < Boot - def load_initializer - require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" - Rails::Initializer.run(:install_gem_spec_stubs) - Rails::GemDependency.add_frozen_gem_path - end - end - - class GemBoot < Boot - def load_initializer - self.class.load_rubygems - load_rails_gem - require 'initializer' - end - - def load_rails_gem - if version = self.class.gem_version - gem 'rails', version - else - gem 'rails' - end - rescue Gem::LoadError => load_error - $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) - exit 1 - end - - class << self - def rubygems_version - Gem::RubyGemsVersion rescue nil - end - - def gem_version - if defined? RAILS_GEM_VERSION - RAILS_GEM_VERSION - elsif ENV.include?('RAILS_GEM_VERSION') - ENV['RAILS_GEM_VERSION'] - else - parse_gem_version(read_environment_rb) - end - end - - def load_rubygems - min_version = '1.3.1' - require 'rubygems' - unless rubygems_version >= min_version - $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) - exit 1 - end - - rescue LoadError - $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) - exit 1 - end - - def parse_gem_version(text) - $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ - end - - private - def read_environment_rb - File.read("#{RAILS_ROOT}/config/environment.rb") - end - end - end -end - -# All that for this: -Rails.boot! +require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) diff --git a/config/environment.rb b/config/environment.rb index adf15da35..b958021e8 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,59 +1,5 @@ -# Be sure to restart your server when you modify this file +# Load the rails application +require File.expand_path('../application', __FILE__) -# Specifies gem version of Rails to use when vendor/rails is not present -RAILS_GEM_VERSION = '2.3.14' unless defined? RAILS_GEM_VERSION - -# Bootstrap the Rails environment, frameworks, and default configuration -require File.join(File.dirname(__FILE__), 'boot') - -Rails::Initializer.run do |config| - # Settings in config/environments/* take precedence over those specified here. - # Application configuration should go into files in config/initializers - # -- all .rb files in that directory are automatically loaded. - - # Add additional load paths for your own custom dirs - # config.load_paths += %W( #{RAILS_ROOT}/extras ) - - # Specify gems that this application depends on and have them installed with rake gems:install - unless STATUS == :database_offline - config.gem 'composite_primary_keys', :version => '2.2.2' - end - config.gem 'libxml-ruby', :version => '>= 2.0.5', :lib => 'libxml' - config.gem 'rmagick', :lib => 'RMagick' - config.gem 'oauth', :version => '>= 0.4.3' - config.gem 'oauth-plugin', :version => '0.3.14' - config.gem 'httpclient' - config.gem 'SystemTimer', :version => '>= 1.1.3', :lib => 'system_timer' - config.gem 'sanitize' - config.gem 'i18n', :version => '>= 0.5.0' - if defined?(MEMCACHE_SERVERS) - config.gem 'memcached' - end - - # Only load the plugins named here, in the order given (default is alphabetical). - # :all can be used as a placeholder for all plugins not explicitly named - # config.plugins = [ :exception_notification, :ssl_requirement, :all ] - - # Skip frameworks you're not going to use. To use Rails without a database, - # you must remove the Active Record framework. - if STATUS == :database_offline - config.frameworks -= [ :active_record ] - config.eager_load_paths = [] - end - - # Activate observers that should always be running - config.active_record.observers = :spam_observer - - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. - # Run "rake -D time" for a list of tasks for finding time zone names. - config.time_zone = 'UTC' - - # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')] - # config.i18n.default_locale = :de - - # Use SQL instead of Active Record's schema dumper when creating the test database. - # This is necessary if your schema can't be completely dumped by the schema dumper, - # like if you have constraints or database-specific column types - config.active_record.schema_format = :sql -end +# Initialize the rails application +OpenStreetMap::Application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index d67452f0c..12cf912bc 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,17 +1,31 @@ -# Settings specified here will take precedence over those in config/environment.rb +OpenStreetMap::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# In the development environment your application's code is reloaded on -# every request. This slows down response time but is perfect for development -# since you don't have to restart the webserver when you make code changes. -config.cache_classes = false + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false -# Log error messages when you accidentally call methods on nil. -config.whiny_nils = true + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true -# Show full error reports and disable caching -config.action_controller.consider_all_requests_local = true -config.action_view.debug_rjs = true -config.action_controller.perform_caching = false + # Show full error reports and disable caching + config.consider_all_requests_local = true +# config.action_view.debug_rjs = true + config.action_controller.perform_caching = false -# Don't care if the mailer can't send -config.action_mailer.raise_delivery_errors = false + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/config/environments/production.rb b/config/environments/production.rb index 3b664b821..6a1f633ae 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,36 +1,75 @@ -# Settings specified here will take precedence over those in config/environment.rb +OpenStreetMap::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# The production environment is meant for finished, "live" apps. -# Code is not reloaded between requests -config.cache_classes = true + # Code is not reloaded between requests + config.cache_classes = true -# Full error reports are disabled and caching is turned on -config.action_controller.consider_all_requests_local = false -config.action_controller.perform_caching = true -config.action_view.cache_template_loading = true + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true -# See everything in the log (default is :info) -# config.log_level = :debug + # Disable rack caching + config.action_dispatch.rack_cache = false -# Use a different log path in production -if defined?(LOG_PATH) - config.log_path = LOG_PATH -end + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false -# Use a different logger for distributed setups -# config.logger = SyslogLogger.new + # Compress JavaScripts and CSS + config.assets.compress = true -# Use a different cache store in production -if defined?(MEMCACHE_SERVERS) - MEMCACHE = Memcached::Rails.new(MEMCACHE_SERVERS, :binary_protocol => true) - config.cache_store = :mem_cache_store, MEMCACHE -end + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug -# Enable serving of images, stylesheets, and javascripts from an asset server -# config.action_controller.asset_host = "http://assets.example.com" + # Use a different log path in production + if defined?(LOG_PATH) + config.paths["log"] = LOG_PATH + end -# Disable delivery errors, bad email addresses will be ignored -# config.action_mailer.raise_delivery_errors = false + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new -# Enable threaded mode -# config.threadsafe! + # Use a different cache store in production + if defined?(MEMCACHE_SERVERS) + MEMCACHE = Memcached::Rails.new(MEMCACHE_SERVERS, :binary_protocol => true) + config.cache_store = :mem_cache_store, MEMCACHE + end + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + config.assets.precompile += %w( map.js menu.js pngfix.js site.js swfobject.js ) + config.assets.precompile += %w( openlayers.js ) + config.assets.precompile += %w( large-ltr.css small-ltr.css print-ltr.css ) + config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css ) + config.assets.precompile += %w( browse.css theme/default/style.css ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end diff --git a/config/environments/test.rb b/config/environments/test.rb index 44dd2992b..fe1d1aa78 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,26 +1,37 @@ -# Settings specified here will take precedence over those in config/environment.rb +OpenStreetMap::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# The test environment is used exclusively to run your application's -# test suite. You never need to work with it otherwise. Remember that -# your test database is "scratch space" for the test suite and is wiped -# and recreated between test runs. Don't rely on the data there! -config.cache_classes = true + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true -# Log error messages when you accidentally call methods on nil. -config.whiny_nils = true + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" -# Show full error reports and disable caching -config.action_controller.consider_all_requests_local = true -config.action_controller.perform_caching = false -config.action_view.cache_template_loading = true + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true -# Disable request forgery protection in test environment -config.action_controller.allow_forgery_protection = false + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false -# Tell ActionMailer not to deliver emails to the real world. -# The :test delivery method accumulates sent emails in the -# ActionMailer::Base.deliveries array. -config.action_mailer.delivery_method = :test + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false -# Load timecop to help with testing time dependent code -config.gem 'timecop' + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr + + # Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets + config.assets.allow_debugging = true +end diff --git a/config/example.application.yml b/config/example.application.yml index 69665ae95..90e2cc74e 100644 --- a/config/example.application.yml +++ b/config/example.application.yml @@ -1,4 +1,4 @@ -standard_settings: &standard_settings +defaults: &defaults # The server URL server_url: "www.openstreetmap.org" # The generator @@ -78,12 +78,13 @@ standard_settings: &standard_settings # Piwik details #piwik_location: "piwik.openstreetmap.org" #piwik_site: 1 + #piwik_signup_goal: 1 development: - <<: *standard_settings + <<: *defaults production: - <<: *standard_settings + <<: *defaults test: - <<: *standard_settings + <<: *defaults diff --git a/config/initializers/action_controller.rb b/config/initializers/action_controller.rb deleted file mode 100644 index 3feb621e1..000000000 --- a/config/initializers/action_controller.rb +++ /dev/null @@ -1,3 +0,0 @@ -# Stop action controller from automatically parsing XML in request bodies -ActionController::Base.param_parsers.delete Mime::XML - diff --git a/config/initializers/action_dispatch.rb b/config/initializers/action_dispatch.rb new file mode 100644 index 000000000..687ce3fb1 --- /dev/null +++ b/config/initializers/action_dispatch.rb @@ -0,0 +1,2 @@ +# Stop rails from automatically parsing XML in request bodies +Rails.configuration.middleware.delete ActionDispatch::ParamsParser diff --git a/config/initializers/action_mailer.rb b/config/initializers/action_mailer.rb index e6ef8a1c8..e6181072b 100644 --- a/config/initializers/action_mailer.rb +++ b/config/initializers/action_mailer.rb @@ -3,26 +3,27 @@ ActionMailer::Base.smtp_settings = { :address => 'localhost', :port => 25, :domain => 'localhost', + :enable_starttls_auto => false } # Monkey patch to allow sending of messages in specific locales module ActionMailer class Base adv_attr_accessor :locale - private - alias_method :old_render_message, :render_message - def render_message(method_name, body) + def mail_with_locale(*args) old_locale= I18n.locale begin I18n.locale = @locale - message = old_render_message(method_name, body) + message = mail_without_locale(*args) ensure I18n.locale = old_locale end message end + + alias_method_chain :mail, :locale end end diff --git a/config/initializers/asset_tag_helper.rb b/config/initializers/asset_tag_helper.rb deleted file mode 100644 index c1c2c94a4..000000000 --- a/config/initializers/asset_tag_helper.rb +++ /dev/null @@ -1,9 +0,0 @@ -module ActionView - module Helpers - module AssetTagHelper - def asset_path(source) - compute_public_path(source, nil) - end - end - end -end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb index c2169ed01..59385cdf3 100644 --- a/config/initializers/backtrace_silencers.rb +++ b/config/initializers/backtrace_silencers.rb @@ -3,5 +3,5 @@ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } -# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code. -# Rails.backtrace_cleaner.remove_silencers! \ No newline at end of file +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/composite_primary_keys.rb b/config/initializers/composite_primary_keys.rb new file mode 100644 index 000000000..e928df39f --- /dev/null +++ b/config/initializers/composite_primary_keys.rb @@ -0,0 +1,80 @@ +module ActiveRecord + module Associations + class AssociationScope + def add_constraints(scope) + tables = construct_tables + + chain.each_with_index do |reflection, i| + table, foreign_table = tables.shift, tables.first + + if reflection.source_macro == :has_and_belongs_to_many + join_table = tables.shift + + # CPK + # scope = scope.joins(join( + # join_table, + # table[reflection.active_record_primary_key]. + # eq(join_table[reflection.association_foreign_key]) + #)) + predicate = cpk_join_predicate(table, reflection.association_primary_key, + join_table, reflection.association_foreign_key) + scope = scope.joins(join(join_table, predicate)) + + table, foreign_table = join_table, tables.first + end + + if reflection.source_macro == :belongs_to + if reflection.options[:polymorphic] + key = reflection.association_primary_key(klass) + else + key = reflection.association_primary_key + end + + foreign_key = reflection.foreign_key + else + key = reflection.foreign_key + foreign_key = reflection.active_record_primary_key + end + + conditions = self.conditions[i] + + if reflection == chain.last + # CPK + # scope = scope.where(table[key].eq(owner[foreign_key])) + predicate = cpk_join_predicate(table, key, owner, foreign_key) + scope = scope.where(predicate) + + if reflection.type + scope = scope.where(table[reflection.type].eq(owner.class.base_class.name)) + end + + conditions.each do |condition| + if options[:through] && condition.is_a?(Hash) + condition = { table.name => condition } + end + + scope = scope.where(interpolate(condition)) + end + else + # CPK + # constraint = table[key].eq(foreign_table[foreign_key]) + constraint = cpk_join_predicate(table, key, foreign_table, foreign_key) + + if reflection.type + type = chain[i + 1].klass.base_class.name + constraint = constraint.and(table[reflection.type].eq(type)) + end + + scope = scope.joins(join(foreign_table, constraint)) + + unless conditions.empty? + scope = scope.where(sanitize(conditions, table)) + end + end + end + + scope + end + end + end +end diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 8aadeaacf..3c3ba872c 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -1,26 +1,9 @@ module I18n module Backend - class Simple - module Implementation - protected - alias_method :old_init_translations, :init_translations - - def init_translations - old_init_translations - - store_translations(:nb, translations[:no]) - translations[:no] = translations[:nb] - - friendly = translate('en', 'time.formats.friendly') - - available_locales.each do |locale| - unless lookup(locale, 'time.formats.friendly') - store_translations(locale, :time => { :formats => { :friendly => friendly } }) - end - end - - @skip_syntax_deprecation = true - end + module Fallbacks + def find_first_string_or_lambda_default(defaults) + defaults.each_with_index { |default, ix| return ix if default && !default.is_a?(Symbol) } + nil end end @@ -35,8 +18,14 @@ module I18n end end -I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization) -I18n::Backend::Simple.send(:include, I18n::Backend::PluralizationFallback) -I18n.load_path << RAILS_ROOT + "/config/pluralizers.rb" +I18n::Backend::Simple.include(I18n::Backend::Pluralization) +I18n::Backend::Simple.include(I18n::Backend::PluralizationFallback) +I18n.load_path << "#{Rails.root}/config/pluralizers.rb" -I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) +I18n::Backend::Simple.include(I18n::Backend::Fallbacks) + +I18n.fallbacks.map("no" => "nb") + +Rails.configuration.after_initialize do + I18n.reload! +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index d531b8bb8..9e8b0131f 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -1,6 +1,6 @@ # Be sure to restart your server when you modify this file. -# Add new inflection rules using the following format +# Add new inflection rules using the following format # (all these examples are active by default): # ActiveSupport::Inflector.inflections do |inflect| # inflect.plural /^(ox)$/i, '\1en' diff --git a/config/initializers/memory_limits.rb b/config/initializers/memory_limits.rb index d3bd7a16b..ce518269f 100644 --- a/config/initializers/memory_limits.rb +++ b/config/initializers/memory_limits.rb @@ -1,5 +1,5 @@ # Setup any specified hard limit on the virtual size of the process -if defined?(HARD_MEMORY_LIMIT) and Process.const_defined?(:RLIMIT_AS) +if defined?(HARD_MEMORY_LIMIT) and defined?(PhusionPassenger) and Process.const_defined?(:RLIMIT_AS) Process.setrlimit Process::RLIMIT_AS, HARD_MEMORY_LIMIT*1024*1024, Process::RLIM_INFINITY end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb index 18df05cf2..be247274f 100644 --- a/config/initializers/mime_types.rb +++ b/config/initializers/mime_types.rb @@ -1,3 +1,7 @@ -# Add new mime types for use in respond_to blocks: +# Be sure to restart your server when you modify this file. +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone +Mime::Type.register "application/x-amf", :amf Mime::Type.register "application/gpx+xml", :gpx diff --git a/config/initializers/new_rails_defaults.rb b/config/initializers/new_rails_defaults.rb deleted file mode 100644 index c94db0a66..000000000 --- a/config/initializers/new_rails_defaults.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Be sure to restart your server when you modify this file. - -# These settings change the behavior of Rails 2 apps and will be defaults -# for Rails 3. You can remove this initializer when Rails 3 is released. - -if defined?(ActiveRecord) - # Include Active Record class name as root for JSON serialized output. - ActiveRecord::Base.include_root_in_json = true - - # Store the full class name (including module namespace) in STI type column. - ActiveRecord::Base.store_full_sti_class = true -end - -ActionController::Routing.generate_best_match = false - -# Use ISO 8601 format for JSON serialized times and dates. -ActiveSupport.use_standard_json_time_format = true - -# Don't escape HTML entities in JSON, leave that for the #json_escape helper. -# if you're including raw json in an HTML page. -ActiveSupport.escape_html_entities_in_json = false \ No newline at end of file diff --git a/config/initializers/oauth.rb b/config/initializers/oauth.rb new file mode 100644 index 000000000..56dd9ff25 --- /dev/null +++ b/config/initializers/oauth.rb @@ -0,0 +1,11 @@ +require 'oauth/rack/oauth_filter' + +Rails.configuration.middleware.use OAuth::Rack::OAuthFilter + +module OAuth::RequestProxy + class RackRequest + def method + request.request_method + end + end +end diff --git a/config/initializers/query_cache.rb b/config/initializers/query_cache.rb index 61a618bca..bb9c8b024 100644 --- a/config/initializers/query_cache.rb +++ b/config/initializers/query_cache.rb @@ -1,12 +1 @@ -if defined?(ActiveRecord::ConnectionAdaptors::QueryCache) - module ActiveRecord - module ConnectionAdapters - module QueryCache - private - def cache_sql(sql) - yield - end - end - end - end -end +Rails.configuration.middleware.delete ActiveRecord::QueryCache diff --git a/config/initializers/cookie_verification_secret.rb b/config/initializers/secret_token.rb similarity index 63% rename from config/initializers/cookie_verification_secret.rb rename to config/initializers/secret_token.rb index 81edec3a2..7d41cb641 100644 --- a/config/initializers/cookie_verification_secret.rb +++ b/config/initializers/secret_token.rb @@ -2,6 +2,6 @@ # Your secret key for verifying the integrity of signed cookies. # If you change this key, all old signed cookies will become invalid! -# Make sure the secret is at least 30 characters and all random, +# Make sure the secret is at least 30 characters and all random, # no regular words or you'll be exposed to dictionary attacks. -ActionController::Base.cookie_verifier_secret = '67881c9e6670d9b55b43885ea8eab34e32865ce436bdbde73e1967a11a26674906736de0aa1a0d24edf8ebcb653e1735413e6fd24e1201338e397d4a2392c614'; +OpenStreetMap::Application.config.secret_token = '67881c9e6670d9b55b43885ea8eab34e32865ce436bdbde73e1967a11a26674906736de0aa1a0d24edf8ebcb653e1735413e6fd24e1201338e397d4a2392c614' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index 77fd39092..a9afad2d6 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,17 +1,8 @@ # Be sure to restart your server when you modify this file. -# Your secret key for verifying cookie session data integrity. -# If you change this key, all old sessions will become invalid! -# Make sure the secret is at least 30 characters and all random, -# no regular words or you'll be exposed to dictionary attacks. -ActionController::Base.session = { - :key => '_osm_session', - :secret => 'd886369b1e709c61d1f9fcb07384a2b96373c83c01bfc98c6611a9fe2b6d0b14215bb360a0154265cccadde5489513f2f9b8d9e7b384a11924f772d2872c2a1f' -} - -# Use the database for sessions instead of the cookie-based default, -# which shouldn't be used to store highly confidential information -# (create the session table with "rake db:sessions:create") -unless STATUS == :database_offline or STATUS == :database_readonly - ActionController::Base.session_store = :sql_session_store +if STATUS == :database_offline or STATUS == :database_readonly + OpenStreetMap::Application.config.session_store :cookie_store, :key => '_osm_session' +else + ActiveRecord::SessionStore.session_class = ActiveRecord::SessionStore::SqlBypass + OpenStreetMap::Application.config.session_store :active_record_store, :key => '_osm_session' end diff --git a/config/initializers/sql_session_store.rb b/config/initializers/sql_session_store.rb deleted file mode 100644 index d2fc9801a..000000000 --- a/config/initializers/sql_session_store.rb +++ /dev/null @@ -1,9 +0,0 @@ -# Work out which session store adapter to use -environment = Rails.configuration.environment -adapter = Rails.configuration.database_configuration[environment]["adapter"] -session_class = adapter + "_session" - -# Configure SqlSessionStore -unless STATUS == :database_offline - SqlSessionStore.session_class = session_class.camelize.constantize -end diff --git a/config/initializers/streaming.rb b/config/initializers/streaming.rb index 116ca51dd..0fc092951 100644 --- a/config/initializers/streaming.rb +++ b/config/initializers/streaming.rb @@ -1,28 +1,16 @@ -# Hack ActionController::Streaming to allow streaming from a file handle +# Hack ActionController::DataStreaming to allow streaming from a file handle module ActionController - module Streaming + module DataStreaming alias_method :old_send_file, :send_file def send_file(file, options = {}) if file.is_a? File or file.is_a? Tempfile - options[:length] ||= file.stat.size options[:filename] ||= File.basename(file.path) unless options[:url_based_filename] send_file_headers! options - @performed_render = false - - if options[:stream] - render :status => options[:status], :text => Proc.new { |response, output| - logger.info "Streaming file #{file.path}" unless logger.nil? - len = options[:buffer_size] || 4096 - while buf = file.read(len) - output.write(buf) - end - } - else - logger.info "Sending file #{file.path}" unless logger.nil? - render :status => options[:status], :text => file.read - end + self.status = options[:status] || 200 + self.content_type = options[:content_type] if options.key?(:content_type) + self.response_body = file else old_send_file(file, options) end diff --git a/config/initializers/uri.rb b/config/initializers/uri.rb new file mode 100644 index 000000000..235ed6305 --- /dev/null +++ b/config/initializers/uri.rb @@ -0,0 +1,4 @@ +# Allow generic URIs to use the registry format +silence_warnings do + URI::Generic::USE_REGISTRY = true +end diff --git a/config/initializers/wiki_pages.rb b/config/initializers/wiki_pages.rb index dbaa4ddac..0b6f7be2a 100644 --- a/config/initializers/wiki_pages.rb +++ b/config/initializers/wiki_pages.rb @@ -1 +1 @@ -WIKI_PAGES = YAML.load_file("#{RAILS_ROOT}/config/wiki_pages.yml") +WIKI_PAGES = YAML.load_file("#{Rails.root}/config/wiki_pages.yml") diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 000000000..da4fb076f --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters :format => [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/config/locales/af.yml b/config/locales/af.yml index 8d3baa489..bf860d909 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -204,8 +204,8 @@ af: no_edits: (geen wysigings) still_editing: (steeds besig met wysiging) changeset_paging_nav: - next: Volgende » - previous: "» Vorige" + next: Volgende » + previous: » Vorige showing_page: Wys bladsy %{page} changesets: area: Gebied @@ -479,6 +479,7 @@ af: distance_marker: Afstandsmerker emergency_access_point: Noodtoeganspunt footway: Voetpad + ford: Fort gate: Hek motorway: Snelweg motorway_junction: Snelwegknooppunt @@ -495,6 +496,7 @@ af: service: Dienspad services: Snelweg Dienste steps: Trappe + stile: Oorstap tertiary: Tersiêre pad track: Spoor trail: Wandelpad @@ -521,6 +523,7 @@ af: wayside_shrine: Altaar langs die pad wreck: Wrak landuse: + allotments: Volkstuine cemetery: Begraafplaas commercial: Kommersiële gebied construction: Konstruksie @@ -744,12 +747,11 @@ af: map: base: cycle_map: Fietskaart - noname: GeenNaam site: edit_zoom_alert: u moet in zoom om die kaart te wysig history_zoom_alert: U moet in zoom om die kaart se wysigingsgeskiedenis te sien layouts: - copyright: Outeursreg & lisensie + copyright: Outeursreg & lisensie donate: Ondersteun OpenStreetMap deur aan die Hardeware Opgradeer-fonds te %{link}. donate_link_text: skenk edit: Wysig @@ -1094,8 +1096,8 @@ af: trace_optionals: tags: Etikette trace_paging_nav: - next: Volgende » - previous: "» Vorige" + next: Volgende » + previous: » Vorige showing_page: Bladsy %{page} view: delete_track: Verwyder hierdie spoor diff --git a/config/locales/aln.yml b/config/locales/aln.yml index 5207f8863..ad082de55 100644 --- a/config/locales/aln.yml +++ b/config/locales/aln.yml @@ -329,7 +329,7 @@ aln: no_entries: Nuk ka shënime në ditar older_entries: Shënimet e Vjetra recent_entries: "shënimet e fundit ditar:" - title: ditarë Përdorues ' + title: ditarë Përdorues , user_title: Ditari i %{user} location: edit: Ndrysho @@ -865,7 +865,6 @@ aln: map: base: cycle_map: Cikli Harta - noname: Noname site: edit_disabled_tooltip: Zoom në hartë për të redaktuar edit_tooltip: Edit Harta @@ -1034,7 +1033,7 @@ aln: lost_password_html: click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për të rivendosni fjalëkalimin tuaj. greeting: Tung, - hopefully_you: Dikush (ndoshta ju) ka kërkuar një fjalëkalim për t'u rivendosur në llogarinë openstreetmap.org këtë adresë email-i. + hopefully_you: Dikush (ndoshta ju) ka kërkuar një fjalëkalim për t,u rivendosur në llogarinë openstreetmap.org këtë adresë email-i. lost_password_plain: click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për të rivendosni fjalëkalimin tuaj. greeting: Tung, @@ -1311,8 +1310,8 @@ aln: trace_optionals: tags: Etiketat trace_paging_nav: - next: Vazhdo » - previous: "« Paraprake" + next: Vazhdo » + previous: « Paraprake showing_page: Duke shfaqun faqen %{page} view: delete_track: Fshij kët gjurm @@ -1541,8 +1540,8 @@ aln: title: Blocks në %{name} create: flash: Krijuar një bllok të përdorues %{name}. - try_contacting: Ju lutemi provoni kontaktuar përdorues para se bllokimi i tyre dhe duke u dhënë atyre një kohë të arsyeshme për t'u përgjigjur. - try_waiting: Ju lutemi provoni duke i dhënë përdoruesit një kohë të arsyeshme për t'u përgjigjur para se bllokimi i tyre. + try_contacting: Ju lutemi provoni kontaktuar përdorues para se bllokimi i tyre dhe duke u dhënë atyre një kohë të arsyeshme për t,u përgjigjur. + try_waiting: Ju lutemi provoni duke i dhënë përdoruesit një kohë të arsyeshme për t,u përgjigjur para se bllokimi i tyre. edit: back: Shiko të gjitha blloqet e heading: Editimi bllokuar në %{name} @@ -1576,7 +1575,7 @@ aln: submit: bllok Krijo title: Krijimi i bllokuar në %{name} tried_contacting: Unë kam kontaktuar me përdorues dhe u kërkoi atyre për të ndaluar. - tried_waiting: Unë kam dhënë një sasi të arsyeshme kohore për përdoruesit për t'iu përgjigjur atyre të komunikimit. + tried_waiting: Unë kam dhënë një sasi të arsyeshme kohore për përdoruesit për t,iu përgjigjur atyre të komunikimit. not_found: back: Kthehu tek Indeksi sorry: Na vjen keq, blloku përdorues me ID %{id} nuk mund të gjendet. diff --git a/config/locales/ar.yml b/config/locales/ar.yml index aea7f8b5b..1ea687d70 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -207,7 +207,7 @@ ar: history_for_feature: تاريخ الــ[[feature]] load_data: تحميل البيانات loaded_an_area_with_num_features: "لقد قمت بتحميل منطقة تحتوي على [[num_features]] ميّزة. بصفة عامّة، بعض المتصفحات قد لا تتوافق بشكل جيد مع عرض هذه الكمية من البيانات. عمومًا، تعمل المتصفحات بشكل أفضل في عرض أقل من 100 ميّزة في وقت واحد: القيام بأي شيء آخر قد يجعل المتصفح بطيء أو لن يستجيب. إن كنت متأكدًا من أنك ترغب في عرض هذه البيانات، يمكنك القيام بذلك عن طريق النقر على الزر أدناه." - loading: تحميل... + loading: يُحمّل... manually_select: اختر يدويًا منطقة أخرى object_list: api: استرد هذه المنطقة من الأي بي أي @@ -881,7 +881,6 @@ ar: map: base: cycle_map: خريطة للدراجات - noname: التسمية غائبة site: edit_disabled_tooltip: قم بالتكبير لتحرير الخريطة edit_tooltip: عدّل الخريطة @@ -1339,8 +1338,8 @@ ar: trace_optionals: tags: الوسوم trace_paging_nav: - next: التالي » - previous: "« السابق" + next: التالي » + previous: « السابق showing_page: إظهار الصفحة %{page} view: delete_track: احذف هذا الأثر diff --git a/config/locales/arz.yml b/config/locales/arz.yml index 99c694ac0..00cf2d443 100644 --- a/config/locales/arz.yml +++ b/config/locales/arz.yml @@ -809,7 +809,6 @@ arz: map: base: cycle_map: خريطه للدراجات - noname: التسميه غائبة site: edit_zoom_alert: يجب عليك التكبير لتعديل الخريطة history_zoom_alert: يجب التكبير لرؤيه تاريخ التعديل diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 609bbe06e..60a99cdf5 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -47,16 +47,16 @@ ast: friend: Amigu language: Llingua message: Mensaxe - node: Nodu - node_tag: Etiqueta del nodu + node: Nodiu + node_tag: Etiqueta del nodiu notifier: Avisador - old_node: Nodu antiguu - old_node_tag: Etiqueta del nodu antiguu + old_node: Nodiu antiguu + old_node_tag: Etiqueta del nodiu antiguu old_relation: Rellación antigua old_relation_member: Miembru de la rellación antigua old_relation_tag: Etiqueta de la rellación antigua old_way: Vía antigua - old_way_node: Nodu de via antigua + old_way_node: Nodiu de via antigua old_way_tag: Etiqueta de vía antigua relation: Rellación relation_member: Miembru de la rellación @@ -69,7 +69,7 @@ ast: user_preference: Preferencia d'usuariu user_token: Token d'usuariu way: Vía - way_node: Nodu de vía + way_node: Nodiu de vía way_tag: Etiqueta de vía application: require_cookies: @@ -94,8 +94,8 @@ ast: closed_at: "Zarráu el:" created_at: "Creáu el:" has_nodes: - one: "Tien el nodu darréu:" - other: "Tien los %{count} nodos darréu:" + one: "Tien el nodiu darréu:" + other: "Tien los %{count} nodios darréu:" has_relations: one: "Tien la rellación darréu:" other: "Tien les %{count} rellaciones darréu:" @@ -124,18 +124,18 @@ ast: way: Editar vía larger: area: Ver área nun mapa más grande - node: Ver nodu nun mapa más grande + node: Ver nodiu nún mapa más grande relation: Ver rellación nun mapa más grande way: Ver la vía nun mapa más grande loading: Cargando… navigation: all: next_changeset_tooltip: Conxuntu de cambeos siguiente - next_node_tooltip: Nodu siguiente + next_node_tooltip: Nodiu siguiente next_relation_tooltip: Rellación siguiente next_way_tooltip: Vía siguiente prev_changeset_tooltip: Conxuntu de cambeos anterior - prev_node_tooltip: Nodu anterior + prev_node_tooltip: Nodiu anterior prev_relation_tooltip: Rellación anterior prev_way_tooltip: Vía anterior user: @@ -146,8 +146,8 @@ ast: download: "%{download_xml_link}, %{view_history_link} o %{edit_link}" download_xml: Descargar XML edit: editar - node: Nodu - node_title: "Nodu: %{node_name}" + node: Nodiu + node_title: "Nodiu: %{node_name}" view_history: ver historial node_details: coordinates: "Coordenaes:" @@ -155,14 +155,14 @@ ast: node_history: download: "%{download_xml_link} o %{view_details_link}" download_xml: Descargar XML - node_history: Historial del nodu - node_history_title: "Historial del nodu: %{node_name}" + node_history: Historial del nodiu + node_history_title: "Historial del nodiu: %{node_name}" view_details: ver detalles not_found: sorry: Perdón, el/la %{type} con id %{id} nun se pudo alcontrar. type: changeset: conxuntu de cambeos - node: nodu + node: nodiu relation: rellación way: vía paging_nav: @@ -186,7 +186,7 @@ ast: relation_member: entry_role: "%{type} %{name} como %{role}" type: - node: nodu + node: Nodiu relation: Rellación way: Vía start: @@ -211,14 +211,14 @@ ast: heading: Llista d'oxetos history: type: - node: Nodu [[id]] + node: Nodiu [[id]] way: Vía [[id]] selected: type: - node: Nodu [[id]] + node: Nodiu [[id]] way: Vía [[id]] type: - node: Nodu + node: Nodiu way: Vía private_user: usuariu priváu show_areas: Amosar árees @@ -236,7 +236,7 @@ ast: sorry: Perdón, los datos pa %{type} con id %{id}, tardaron demasiao en descargase. type: changeset: conxuntu de cambeos - node: nodu + node: nodiu relation: rellación way: vía way: @@ -268,8 +268,8 @@ ast: still_editing: (editando entá) view_changeset_details: Ver detalles del conxuntu de cambeos changeset_paging_nav: - next: Siguiente » - previous: "« Anterior" + next: Siguiente » + previous: « Anterior showing_page: Tas na páxina %{page} changesets: area: Área @@ -883,7 +883,8 @@ ast: map: base: cycle_map: Mapa ciclista - noname: EnsinNome + mapquest: MapQuest Open + transport_map: Mapa de tresportes site: edit_disabled_tooltip: Aumenta pa editar el mapa edit_tooltip: Editar el mapa @@ -894,7 +895,7 @@ ast: layouts: community_blogs: Blogues de la Comunidá community_blogs_title: Blogues de miembros de la comunidá d'OpenStreetMap - copyright: Copyright & Llicencia + copyright: Drechos d'autor y llicencia documentation: Documentación documentation_title: Documentación del proyeutu donate: Sofita OpenStreetMap %{link} al Fondu pal Anovamientu del Hardware. @@ -955,6 +956,7 @@ ast: english_link: l'orixinal n'inglés text: En casu d'haber un conflictu ente esta páxina traducida y %{english_original_link}, la páxina n'inglés tendrá prioridá title: Tocante a esta traducción + legal_babble: "

    Drechos d'autor y llicencia

    \n

    \n OpenStreetMap son datos abiertos (Open Data), con llicencia Creative Commons Reconocimientu - Compartir igual 2.0 (CC-BY-SA).\n

    \n

    \n Puedes copiar, distribuir, tresmitir y adautar los nuesos mapes ya información de mou llibre mentanto yos reconuezas a OpenStreetMap y a los sos collaboradores. Si camudes o creas conteníu sobre los nuesos mapes ya información, podrás distribuir estos cambios baxo la mesma llicencia. El códigu llegal completu te desplica los tos drechos y obligaciones.\n

    \n\n

    Cómo dar reconocimientu a OpenStreetMap

    \n

    \n Si uses imaxes de mapes d'OpenStreetMap, te pidimos que'l testu de reconocimientu ponga polo menos “© Collaboradores d'OpenStreetMap, CC-BY-SA”. Si sólo vas usar datos del mapa, lo que pidimos ye “Datos del mapa © Collaboradores d'OpenstreetMap, CC-BY-SA”.\n

    \n

    \n Onde se pueda, OpenStreetMap tendría d'enllazase a http://www.openstreetmap.org/\n y CC-BY-SA a http://creativecommons.org/licenses/by-sa/2.0/. Si tas usando un medio que nun permita los enllaces (por casu, en trabayos imprentaos), t'encamentamos dirixir a los llectores a www.openstreetmap.org (por exemplu, ampliando ‘OpenStreetMap’ a la so direición completa) y a www.creativecommons.org.\n

    \n\n

    Pa saber más...

    \n

    \n Llee más tocante a cómo utilizar los nuesos datos en Entrugues y rempuestes llegales (n'inglés).\n

    \n

    \n Recordamos a los collaboradores d'OSM qu'enxamás amiesten datos que vengan d'una fonte con drechos d'autor acutaos (p. ex. de Google Maps o mapes impresos) ensin el permisu esplícitu de los dueños de los drechos d'autor.\n

    \n

    \n Anque OpenStreetMap son datos abiertos, nun podemos ufrir una API de mapes de baldre pa desendolcadores d'aplicaciones pa terceros.\n\n Por favor, llee la nuesa Política d'usu de la API (n'inglés),\n Política d'usu d'imaxes (n'inglés)\n y Política d'usu de Nominatim (n'inglés tamién).\n

    \n\n

    Los nuesos collaboradores

    \n

    \n La nuesa llicencia CC-BY-SA requier “reconocer al autor orixinal, de manera razonable pal mediu o los medios que teas utilizando”. Los collaboradores individuales d'OSM nun piden más créditu que “Collaboradores d'OpenStreetMap”, pero cuando s'incluye n'OpenStreetMap información d'un organismu nacional de cartografía o d'otra fuente importante, ye razonable reproducir el so créditu direutamente o enllazar al mesmu nesta páxina.\n

    \n\n\n\n
      \n
    • Australia: Contien datos de barrios basaos en datos de Australian Bureau of\n Statistics.
    • \n
    • Austria: Contien datos de\n Stadt Wien baxo\n CC-BY.
    • \n
    • Canadá: Contien datos de GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), and StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Francia: Contien datos sacaos de Direction Générale des Impôts.
    • \n
    • Nueva Zelanda: Contien datos sacaos de Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Polonia: Contien datos de mapes UMP-pcPL. Copyright collaboradores de\n UMP-pcPL.
    • \n
    • Reinu Xuníu: Contien datos de Ordnance Survey © Crown copyright and database right\n 2010.
    • \n
    \n\n

    \n La inclusión de datos n'OpenStreetMap nun significa que'l fornidor de los datos orixinales sofite OpenStreetMap, ufra garantía dala o aceute dalguna responsabilidá.\n

    " native: mapping_link: principiar col mapéu native_link: versión n'asturianu @@ -1351,8 +1353,8 @@ ast: trace_optionals: tags: Etiquetes trace_paging_nav: - next: Siguiente » - previous: "« Anterior" + next: Siguiente » + previous: « Anterior showing_page: Tas na páxina %{page} view: delete_track: Desaniciar esta traza diff --git a/config/locales/be-TARASK.yml b/config/locales/be-TARASK.yml index cae3925a8..549734145 100644 --- a/config/locales/be-TARASK.yml +++ b/config/locales/be-TARASK.yml @@ -3,6 +3,7 @@ # Export driver: syck-pecl # Author: EugeneZelenko # Author: Jim-by +# Author: Red Winged Duck # Author: Wizardist be-TARASK: activerecord: @@ -73,6 +74,12 @@ be-TARASK: way: Шлях way_node: Вузел дарогі way_tag: Тэг дарогі + application: + require_cookies: + cookies_needed: Здаецца, што ў Ва забароненыя закладкі (cookies). Калі ласка, дазвольце іх ў Вашым браўзэры перад тым, як працягваць. + setup_user_auth: + blocked: Ваш доступ да API заблякаваны. Калі ласка, увайдзіце праз ўэб-інтэрфэйс, каб даведацца болей. + need_to_see_terms: Ваш доступ да API часова прыпынены. Калі ласка, увайдзіце ў ўэб-інтэрфэйс, каб каб паглядзець умовы ўдзелу. Вам не абавязкова пагаджацца зь імі, але неабходна зь імі азнаёміцца. browse: changeset: changeset: "Набор зьменаў: %{id}" @@ -264,8 +271,8 @@ be-TARASK: still_editing: (яшчэ рэдагуецца) view_changeset_details: Паказаць падрабязнасьці набору зьменаў changeset_paging_nav: - next: Наступная » - previous: "« Папярэдняя" + next: Наступная » + previous: « Папярэдняя showing_page: Паказаная старонка %{page} changesets: area: Абшар @@ -402,6 +409,17 @@ be-TARASK: manually_select: Выбраць іншы абшар view_larger_map: Паказаць большую мапу geocoder: + description: + title: + geonames: Месцазнаходжаньне з GeoNames + osm_namefinder: "%{types} з OpenStreetMap Namefinder" + osm_nominatim: Месцазнаходжаньне з OpenStreetMap Nominatim + types: + cities: Гарады + places: Месцы + towns: Гарады + description_osm_namefinder: + prefix: "%{distance} %{direction} %{type}" direction: east: усход north: поўнач @@ -411,6 +429,9 @@ be-TARASK: south_east: паўднёвы ўсход south_west: паўднёвы захад west: захад + results: + more_results: Больш вынікаў + no_results: Нічога ня знойдзена search: title: ca_postcode: Вынікі з Geocoder.CA @@ -651,7 +672,7 @@ be-TARASK: miniature_golf: Поле для мінігольфу nature_reserve: Запаведнік park: Парк - pitch: Спартыўная пляцоўка + pitch: Спартовая пляцоўка playground: Дзіцячая пляцоўка recreation_ground: Зона адпачынку slipway: Элінг @@ -800,39 +821,415 @@ be-TARASK: mobile_phone: Крама мабільных тэлефонаў motorcycle: Крама матацыклаў music: Музычная крама + newsagent: Газэтны шапік + optician: Оптыка + organic: Харчовая крама + outdoor: Выязны гандаль + pet: Зоалягічная крама + photo: Фотакрама + salon: Салён + shoes: Крама абутку + shopping_centre: Гандлёвы цэнтар + sports: Спартовая крама + stationery: Канцтавары + supermarket: Супэрмаркет + toys: Крама цацак + travel_agency: Турыстычнае агенцтва + video: Відэакрама + wine: Алькагольная крама + tourism: + alpine_hut: Горная гасьцініца + artwork: Твор мастацтва + attraction: Славутасьць + bed_and_breakfast: Танная гасьцініца + cabin: Кабіна + camp_site: Кемпінг + caravan_site: Пляцоўка для трэйлераў + chalet: Шале + guest_house: Домік для гасьцей + hostel: Хостэл + hotel: Гатэль + information: Інфармацыя + lean_to: Навес + motel: Матэль + museum: Музэй + picnic_site: Месца для пікніка + theme_park: Атракцыёны + valley: Даліна + viewpoint: Аглядальная пляцоўка + zoo: Заапарк + waterway: + boatyard: Майстэрня караблёў + canal: Канал + connector: Злучэньне водных шляхоў + dam: Дамба + derelict_canal: Пакінуты канал + ditch: Роў + dock: Док + drain: Дрэнажны канал + lock: Шлюз + lock_gate: Вароты шлюза + mineral_spring: Мінэральная крыніца + mooring: Якарная стаянка + rapids: Парогі + river: Рака + riverbank: Бераг ракі + stream: Струмень + wadi: Сухое рэчышча + water_point: Пункт водазабесьпячэньня + waterfall: Вадаспад + weir: Плаціна layouts: + community_blogs: Блёгі супольнасьці + community_blogs_title: Блёгі чальцоў супольнасьці OpenStreetMap + copyright: Аўтарскія правы і ліцэнзія + documentation: Дакумэнтацыя + documentation_title: Дакумэнтацыя праекту + donate: Падтрымайце OpenStreetMap %{link} у фонд абнаўленьня абсталяваньня. + donate_link_text: ахвяраваньнямі edit: Рэдагаваць + edit_with: Рэдагаваць праз %{editor} export: Экспартаваць + export_tooltip: Экспартаваць зьвесткі мапы + foundation: Фундацыя + foundation_title: Фундацыя OpenStreetMap + gps_traces: GPS-шляхі + gps_traces_tooltip: Кіраваць GPS-шляхамі + help: Дапамога + help_centre: Цэнтар дапамогі + help_title: Сайт дапамогі праекту history: Гісторыя + home: дамоў + home_tooltip: Паказаць маё месцазнаходжаньне + inbox: уваходныя (%{count}) + intro_1: OpenStreetMap — вольная мапа ўсяго сьвету, якую магчыма рэдагаваць. Яе ствараюць такія ж людзі, як Вы. + intro_2: OpenStreetMap дазваляе Вам праглядаць, рэдагаваць і выкарыстоўваць геаграфічныя зьвесткі ў любым месцы на Зямлі. + intro_3: Хостынг для OpenStreetMap ветліва прадстаўлены %{ucl}, %{ic} і %{bytemark}. Іншыя партнэры праекту пералічаныя на %{partners}. + intro_3_ic: Імпэрскі Каледж Лёндана + intro_3_partners: вікі + license: + title: Зьвесткі OpenStreetMap даступныя на ўмовах ліцэнзіі Creative Commons Attribution-Share Alike 2.0 Generic + log_in: увайсьці + log_in_tooltip: Увайсьці з існуючым рахункам + logo: + alt_text: Лягатып OpenStreetMap + logout: выйсьці + logout_tooltip: Выйсьці + make_a_donation: + text: Зрабіць ахвяраваньне + title: Падтрымаць OpenStreetMap грашовым ахвяраваньнем + osm_offline: База зьвестак OpenStreetMap у цяперашні момант недаступная, таму што праводзяцца неабходныя тэхнічныя работы. + osm_read_only: База зьвестак OpenStreetMap у цяперашні момант даступная толькі для чытаньня, таму што праводзяцца неабходныя тэхнічныя работы. + sign_up: зарэгістравацца + sign_up_tooltip: Стварыць рахунак для рэдагаваньня + sotm2011: Наведайце канфэрэнцыю OpenStreetMap 2011 «The State of the Map», 9-11 верасьня ў Дэнвэры! + tag_line: Вольная Wiki-мапа сьвету + user_diaries: Дзёньнікі карыстальнікаў + user_diaries_tooltip: Паказаць дзёньнікі карыстальнікаў + view: Прагляд + view_tooltip: Паказаць мапу + welcome_user: Вітаем, %{user_link} + welcome_user_link_tooltip: Ваша старонка ўдзельніка + wiki: Вікі + wiki_title: Вікі-сайт праекту license_page: foreign: english_link: арыгінальная ангельская вэрсія text: У выпадку канфлікту паміж гэтай перакладзенай старонкай і %{english_original_link}, старонка на ангельскай мове павінна мець перавагу title: Пра гэты пераклад - legal_babble: "

    Аўтарскія правы і ліцэнзія

    \n

    \n OpenStreetMap прадстаўляе вольныя зьвесткі, на ўмовах ліцэнзіі Creative\n Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Вы можаце капіяваць, распаўсюджваць, перадаваць і зьмяняць нашыя мапы\n і зьвесткі, да той пары, пакуль Вы спасылаецеся на OpenStreetMap і яе\n ўдзельнікаў. Калі Вы зьмяняеце ці выкарыстоўваеце нашыя мапы і зьвесткі, Вы можаце \n распаўсюджваць вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны тэкст ліцэнзіі\n legal\n code растлумачыць Вам правы і адказнасьці.\n

    \n\n

    Як спасылацца на OpenStreetMap

    \n

    \n Калі Вы выкарыстоўваеце выявы мапаў OpenStreetMap, мы патрабуем, каб\n Вы рабілі спасылку хаця б “© удзельнікі OpenStreetMap\n , CC-BY-SA”. Калі Вы выкарыстоўваеце толькі картаграфічныя зьвесткі,\n мы патрабуем наяўнасьць “Картаграфічныя зьвесткі © Удзельнікі OpenStreetMap,\n CC-BY-SA”.\n

    \n\n

    \n Дзе магчыма, павінна быць гіпэр-спасылка на OpenStreetMap http://www.openstreetmap.org/\n і на CC-BY-SA http://creativecommons.org/licenses/by-sa/2.0/. Калі\n Вы выкарыстоўваеце носьбіты, дзе выкарыстаньне спасылак немагчымае (напр. \n друкаваныя працы), мы прапануем накіроўваць Вашым чытачоў на\n www.openstreetmap.org (магчымае выкарыстаньне поўнага адрасу\n ‘OpenStreetMap’) і на\n www.creativecommons.org.\n

    \n\n

    Даведацца болей

    \n

    \n Даведайцеся болей пра выкарыстаньне нашых зьвестак на старонцы адказаў\n і пытаньняў.\n

    \n

    \n Удзельнікі OSM павінны памятаць пра тое, што забаронена дадаваць зьвесткі\n з любых крыніцаў абароненых аўтарскім правам (напрыклад, Google Maps ці друкаваных мапаў)\n без папярэдняга дазволу ўладальнікаў аўтарскіх правоў.\n

    \n

    \n Ня гледзячы на тое, што OpenStreetMap утрымлівае вольныя зьвесткі, мы ня можам\n дазволіць бясплатны API да нашых мапаў для староньніх распрацоўшчыкаў.\n\n Глядзіце нашыя Умовы выкарыстаньня,\n Умовы выкарыстаньня частак мапаў\n і Умовы выкарыстаньня Nominatim.\n

    \n\n

    Нашыя ўдзельнікі

    \n

    \n Нашая ліцэнзія CC-BY-SA патрабуе ад Вас “падаць арыгінальнага аўтара \n у адпаведнасьці з асаблівасьцямі носьбітаў інфармацыі ці іншых выкарыстоўваемых сродкаў\n ”. Звычайныя ўдзельнікі OSM не патрабуюць пазначэньня аўтарства\n болей чым “удзельнікі OpenStreetMap\n ”, але ў OpenStreetMap ёсьць зьвесткі з нацыянальных \n картаграфічных агенцтваў ці іншых падобных крыніцаў, \n таму, магчыма, мае сэнс спасылацца непасрэдна на іх\n як на крыніцу, ці дадаць спасылку на гэтую старонку.\n

    \n\n\n\n
      \n
    • Аўстралія: Утрымлівае зьвесткі пра прыгарады ад\n Аўстралійскага бюро статыстыкі.
    • \n
    • Канада: Утрымлівае зьвесткі\n GeoBase®, GeoGratis (© Дэпартамэнта прыродных рэсурсаў\n Канады), CanVec (© Дэпартамэнта прыродных рэсурсаў\n Канады), і StatCan (Статыстычнага падразьдзяленьня Канады).
    • \n
    • Новая Зэляндыя: Утрымлівае зьвесткі пра\n зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved.
    • \n
    • Польшча: Утрымлівае зьвесткі з мапы UMP-pcPL. Copyright\n удзельнікі UMP-pcPL.
    • \n
    • Вялікабрытанія: Утрымлівае зьвесткі Ordnance \n Survey © Crown copyright and database right\n 2010.
    • \n
    \n\n

    \n Уключэньне зьвестак у OpenStreetMap не азначае, што пастаўшчыкі пачатковых зьвестак\n якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці\n прымаюць на сябе якую-небудзь адказнасьць.\n

    " + legal_babble: "

    Аўтарскія правы і ліцэнзія

    \n

    \n OpenStreetMap прадстаўляе вольныя зьвесткі, на ўмовах ліцэнзіі Creative\n Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Вы можаце капіяваць, распаўсюджваць, перадаваць і зьмяняць нашыя мапы\n і зьвесткі, да той пары, пакуль Вы спасылаецеся на OpenStreetMap і яе\n ўдзельнікаў. Калі Вы зьмяняеце ці выкарыстоўваеце нашыя мапы і зьвесткі, Вы можаце \n распаўсюджваць вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны тэкст ліцэнзіі\n legal\n code растлумачыць Вам правы і адказнасьці.\n

    \n\n

    Як спасылацца на OpenStreetMap

    \n

    \n Калі Вы выкарыстоўваеце выявы мапаў OpenStreetMap, мы патрабуем, каб\n Вы рабілі спасылку хаця б “© удзельнікі OpenStreetMap\n , CC-BY-SA”. Калі Вы выкарыстоўваеце толькі картаграфічныя зьвесткі,\n мы патрабуем наяўнасьць “Картаграфічныя зьвесткі © Удзельнікі OpenStreetMap,\n CC-BY-SA”.\n

    \n\n

    \n Дзе магчыма, павінна быць гіпэр-спасылка на OpenStreetMap http://www.openstreetmap.org/\n і на CC-BY-SA http://creativecommons.org/licenses/by-sa/2.0/. Калі\n Вы выкарыстоўваеце носьбіты, дзе выкарыстаньне спасылак немагчымае (напр. \n друкаваныя працы), мы прапануем накіроўваць Вашым чытачоў на\n www.openstreetmap.org (магчымае выкарыстаньне поўнага адрасу\n ‘OpenStreetMap’) і на\n www.creativecommons.org.\n

    \n\n

    Даведацца болей

    \n

    \n Даведайцеся болей пра выкарыстаньне нашых зьвестак на старонцы адказаў\n і пытаньняў.\n

    \n

    \n Удзельнікі OSM павінны памятаць пра тое, што забаронена дадаваць зьвесткі\n з любых крыніцаў абароненых аўтарскім правам (напрыклад, Google Maps ці друкаваных мапаў)\n без папярэдняга дазволу ўладальнікаў аўтарскіх правоў.\n

    \n

    \n Ня гледзячы на тое, што OpenStreetMap утрымлівае вольныя зьвесткі, мы ня можам\n дазволіць бясплатны API да нашых мапаў для староньніх распрацоўшчыкаў.\n\n Глядзіце нашыя Умовы выкарыстаньня,\n Умовы выкарыстаньня частак мапаў\n і Умовы выкарыстаньня Nominatim.\n

    \n\n

    Нашыя ўдзельнікі

    \n

    \n Нашая ліцэнзія CC-BY-SA патрабуе ад Вас “падаць арыгінальнага аўтара \n у адпаведнасьці з асаблівасьцямі носьбітаў інфармацыі ці іншых выкарыстоўваемых сродкаў\n ”. Звычайныя ўдзельнікі OSM не патрабуюць пазначэньня аўтарства\n болей чым “удзельнікі OpenStreetMap\n ”, але ў OpenStreetMap ёсьць зьвесткі з нацыянальных \n картаграфічных агенцтваў ці іншых падобных крыніцаў, \n таму, магчыма, мае сэнс спасылацца непасрэдна на іх\n як на крыніцу, ці дадаць спасылку на гэтую старонку.\n

    \n\n\n\n
      \n
    • Аўстралія: Утрымлівае зьвесткі пра прыгарады ад\n Аўстралійскага бюро статыстыкі.
    • \n
    • Аўстрыя: Утрымлівае зьвесткі\n горада Вены на ўмовах\n CC-BY.
    • \n
    • Канада: Утрымлівае зьвесткі\n GeoBase®, GeoGratis (© Дэпартамэнта прыродных рэсурсаў\n Канады), CanVec (© Дэпартамэнта прыродных рэсурсаў\n Канады), і StatCan (Статыстычнага падразьдзяленьня Канады).
    • \n
    • Францыя: Утрымлівае зьвесткі\n Галоўнага падатковага ўпраўленьня.
    • \n
    • Новая Зэляндыя: Утрымлівае зьвесткі пра\n зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved.
    • \n
    • Польшча: Утрымлівае зьвесткі з мапы UMP-pcPL. Copyright\n удзельнікі UMP-pcPL.
    • \n
    • Вялікабрытанія: Утрымлівае зьвесткі Ordnance \n Survey © Crown copyright and database right\n 2010.
    • \n
    \n\n

    \n Уключэньне зьвестак у OpenStreetMap не азначае, што пастаўшчыкі пачатковых зьвестак\n якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці\n прымаюць на сябе якую-небудзь адказнасьць.\n

    " native: mapping_link: пачаць стварэньне мапы native_link: беларускай вэрсіі text: Вы праглядаеце ангельскую вэрсію старонкі аўтарскіх правоў. Вы можаце вярнуцца да %{native_link} гэтай старонкі ці спыніць чытаньне пра аўтарскія правы і %{mapping_link}. title: Пра гэтую старонку message: + delete: + deleted: Паведамленьне выдаленае inbox: + date: Дата + from: Ад + my_inbox: Мае ўваходзячыя + no_messages_yet: Вы яшчэ ня маеце паведамленьняў. Чаму б не зьвязацца з %{people_mapping_nearby_link}? + outbox: зыходзячыя + people_mapping_nearby: людзьмі, якія жывуць каля Вас subject: Тэма + title: Уваходзячыя + you_have: Вы маеце %{new_count} новых паведамленьняў і %{old_count} старых паведамленьняў + mark: + as_read: Паведамленьне пазначанае як прачытанае + as_unread: Паведамленьне пазначанае як непрачытанае message_summary: delete_button: Выдаліць + read_button: Пазначыць як прачытанае reply_button: Адказаць + unread_button: Пазначыць як непрачытанае new: + back_to_inbox: Вярнуцца да ўваходных + body: Тэкст + limit_exceeded: Вы даслалі шмат паведамленьняў у апошні час. Калі ласка, пачакайце, перад тым, як адпраўляць зноў. + message_sent: Паведамленьне дасланае + send_button: Даслаць + send_message_to: Даслаць новае паведамленьне да %{name} subject: Тэма + title: Даслаць паведамленьне + no_such_message: + body: Прабачце, няма паведамленьня з такім ідэнтыфікатарам. + heading: Няма такога паведамленьня + title: Няма такога паведамленьня + no_such_user: + body: Прабачце, удзельніка з такім іменем няма. + heading: Няма такога ўдзельніка + title: Няма такога карыстальніка outbox: + date: Дата + inbox: уваходзячыя + my_inbox: Мае %{inbox_link} + no_sent_messages: Вы яшчэ не даслалі паведамленьне. Чаму б не зьвязацца з %{people_mapping_nearby_link}? + outbox: зыходзячыя + people_mapping_nearby: людзьмі, якія жывуць каля Вас subject: Тэма + title: Зыходзячыя + to: Да + you_have_sent_messages: Вы маеце %{count} адпраўленых паведамленьняў read: + back_to_inbox: Вярнуцца да ўваходных + back_to_outbox: Вярнуцца да выходных + date: Дата + from: Ад + reading_your_messages: Чытаньне Вашых паведамленьняў + reading_your_sent_messages: Чытаньне Вашых дасланых паведамленьняў reply_button: Адказаць subject: Тэма + title: Чытаць паведамленьне + to: Да + unread_button: Пазначыць як непрачытанае + wrong_user: Вы ўвайшлі ў сыстэму як `%{user}', але паведамленьне, якое Вы жадаеце прачытаць, было дасланае не гэтым ці гэтаму карыстальніку. Калі ласка, увайдзіце як карыстальнік, адпаведна запыту, каб прачытаць. + reply: + wrong_user: Вы ўвайшлі ў сыстэму як `%{user}', але паведамленьне, на якое Вы жадаеце адказаць, не было дасланае гэтаму карыстальніку. Калі ласка, увайдзіце як карыстальнік, адпаведна запыту, каб адказаць. sent_message_summary: delete_button: Выдаліць + notifier: + diary_comment_notification: + footer: Вы таксама можаце чытаць камэнтар %{readurl} і Вы можаце камэнтаваць на %{commenturl} ці адказаць на %{replyurl} + header: "%{from_user} пракамэнтаваў Ваш апошні запіс у дзёньніку на OpenStreetMap з тэмай %{subject}:" + hi: Вітаем, %{to_user}, + subject: "[OpenStreetMap] %{user} пакінуў камэнтар у Вашым дзёньніку" + email_confirm: + subject: "[OpenStreetMap] Пацьвердзіце Ваш адрас электроннай пошты" + email_confirm_html: + click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб пацьвердзіць зьмену. + greeting: Вітаем, + hopefully_you: Нехта (спадзяемся што Вы) жадае зьмяніць свой адрас электроннай пошты ў %{server_url} на %{new_address}. + email_confirm_plain: + click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб пацьвердзіць зьмену. + greeting: Вітаем, + hopefully_you_1: Нехта (спадзяемся, што Вы) жадае зьмяніць свой адрас электроннай пошты ў + hopefully_you_2: "%{server_url} на %{new_address}." + friend_notification: + befriend_them: Вы таксама можаце дадаць іх у якасьці сябраў на %{befriendurl}. + had_added_you: "%{user} дадаў Вас у сьпіс сяброў на OpenStreetMap." + see_their_profile: Вы можаце прагледзець яго профіль на %{userurl}. + subject: "[OpenStreetMap] %{user} дадаў Вас у сьпіс сваіх сяброў" + gpx_notification: + and_no_tags: і бяз тэгаў. + and_the_tags: "з наступнымі тэгамі:" + failure: + failed_to_import: "немагчыма імпартаваць. Адбылася памылка:" + more_info_1: Дадатковая інфармацыя пра памылкі імпарту GPX і як іх пазьбегнуць + more_info_2: "іх можна знайсьці на:" + subject: "[OpenStreetMap] памылка імпарту GPX" + greeting: Вітаем, + success: + loaded_successfully: пасьпяхова загружаны %{trace_points} пунктаў з магчымых %{possible_points}. + subject: "[OpenStreetMap] імпарт GPX адбыўся пасьпяхова" + with_description: з апісаньнем + your_gpx_file: Выглядае, што гэта Ваш файл GPX + lost_password: + subject: "[OpenStreetMap] Запыт на зьмену паролю" + lost_password_html: + click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб скінуць Ваш пароль. + greeting: Вітаем, + hopefully_you: Нехта (магчыма Вы) запытаў зьмену паролю для гэтага адрасу электроннай пошты openstreetmap.org. + lost_password_plain: + click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб скінуць Ваш пароль. + greeting: Вітаем, + hopefully_you_1: Нехта (магчыма Вы), запытаўся на зьмену пароля для гэтага + hopefully_you_2: адрасы электроннай пошты рахункаў openstreetmap.org. + message_notification: + footer1: Вы можаце таксама прачытаць паведамленьне %{readurl} + footer2: і Вы можаце адказаць на %{replyurl} + header: "%{from_user} даслаў Вам паведамленьне праз OpenStreetMap з тэмай %{subject}:" + hi: Вітаем, %{to_user}, + signup_confirm: + subject: "[OpenStreetMap] Пацьвердзіце Ваш адрас электроннай пошты" + signup_confirm_html: + ask_questions: Вы можаце задаць любыя пытаньні пра OpenStreetMap на нашым сайце пытаньняў і адказаў. + click_the_link: Калі гэта Вы, вітаем! Калі ласка, націсьніце спасылку ніжэй, каб пацьвердзіць гэты рахунак і даведацца болей пра OpenStreetMap + current_user: Сьпіс удзельнікаў паводле іх месцазнаходжаньня, даступны ў Category:Users_by_geographical_region. + get_reading: Пачытайце пра OpenStreetMap на вікі, даведайцеся пра апошнія навіны праз блёг OpenStreetMap ці Twitter, ці даведайцеся пра гісторыю праекта ў блёгу OpenGeoData, аўтарам якога зьяўляецца Сціў Коўст, заснавальнік OpenStreetMap, у гэтым блёгу ёсьць падкасты, якія таксама можна праслухаць! + greeting: Прывітаньне! + hopefully_you: Нехта (спадзяемся, што Вы) жадае стварыць рахунак на + introductory_video: Вы можаце прагледзець %{introductory_video_link}. + more_videos: Маем %{more_videos_link}. + more_videos_here: яшчэ відэа тут + user_wiki_page: Рэкамэндуецца стварыць вікі-старонку ўдзельніка, якая павінна ўключаць тэгі катэгорыяў, якія апісваюць Вашае месцазнаходжаньне, напрыклад [[Category:Users_in_London]]. + video_to_openstreetmap: уступнае відэа пра OpenStreetMap + wiki_signup: Вы можаце стварыць рахунак у вікі OpenStreetMap. + signup_confirm_plain: + ask_questions: "Вы можаце задаць любое пытаньне пра OpenStreetMap на нашым сайце пытаньняў і адказаў:" + blog_and_twitter: "Даведацца пра апошнія навіны праз блёг OpenStreetMap ці Twitter:" + click_the_link_1: Калі гэта сапраўды Вы, вітаем! Калі ласка, націсьніце на спасылку ніжэй каб пацьвердзіць сябе + click_the_link_2: рахунак і прачытаць дадатковую інфармацыю пра OpenStreetMap. + current_user_1: Сьпіс цяперашніх карыстальнікаў у катэгорыях, заснаваны на іх месцазнаходжаньні + current_user_2: "яны даступныя на:" + greeting: Прывітаньне! + hopefully_you: Нехта (спадзяемся, што Вы) жадае стварыць рахунак на + introductory_video: "Вы можаце праглядзець відэа-уводзіны ў OpenStreetMap тут:" + more_videos: "Тут яшчэ відэа:" + opengeodata: "OpenGeoData.org — блёг заснавальніка OpenStreetMap Стыва Коуста, і тут ёсьць падкасты:" + the_wiki: "Прачытаць пра OpenStreetMap на вікі:" + user_wiki_1: Рэкамэндуецца стварыць вікі-старонку ўдзельніка, якая будзе ўтрымліваць + user_wiki_2: тэгі катэгорыяў, якія апісваюць Вашае месцазнаходжаньне, напрыклад [[Category:Users_in_London]]. + wiki_signup: "Вы таксама можаце зарэгістравацца на OpenStreetMap вікі на:" + oauth: + oauthorize: + allow_read_gpx: чытаць Вашыя прыватныя GPS-трэкі. + allow_read_prefs: чытаць Вашыя налады ўдзельніка. + allow_to: "Дазволіць кліенцкаму дастасаваньню:" + allow_write_api: зьмяняць мапу. + allow_write_diary: ствараць запісы ў дзёньніку, камэнтары і знаёміцца. + allow_write_gpx: загружаць GPS-трэкі. + allow_write_prefs: зьмяняць Вашыя налады ўдзельніка. + request_access: Дастасаваньне %{app_name} патрабуе доступ да Вашага рахунку, %{user}. Калі ласка, праверце, ці Вы жадаеце, каб дастасаваньне мела наступныя магчымасьці. Вы можаце выбраць любую колькасьць. + revoke: + flash: Вы адклікалі ключ для дастасаваньня %{application} oauth_clients: edit: submit: Рэдагаваць + title: Рэдагаваць Вашае дастасаваньне + index: + my_tokens: Мае аўтарызаваныя дастасаваньні + title: Мае падрабязнасьці OAuth + new: + submit: Рэгістрацыя + title: Зарэгістраваць новае дастасаваньне + show: + access_url: "URL-адрас ключа доступу:" + allow_read_gpx: чытаць іх прыватныя GPS-трэкі. + allow_read_prefs: чытаць іх налады ўдзельніка. + allow_write_api: зьмяняць мапу. + allow_write_diary: ствараць запісы ў дзёньніку, камэнтары і знаёміцца. + allow_write_gpx: загружаць GPS-трэкі. + allow_write_prefs: зьмяняць іх налады ўдзельніка. + authorize_url: "URL-адрас аўтарызацыі:" + edit: Рэдагаваць падрабязнасьці + key: "Ключ спажыўца:" + requests: "Запыт наступных дазволаў ад удзельніка:" + secret: "Сакрэт спажыўца:" + support_notice: Мы падтрымліваем HMAC-SHA1 (рэкамэндуецца) і звычайны тэкст у SSL-рэжыме. + title: Падрабязнасьці OAuth для %{app_name} + url: "URL-адрас ключа запыту:" + site: + edit: + anon_edits_link_text: Даведацца ў чым справа. + flash_player_required: Каб выкарыстоўваць рэдактар Potlatch неабходны Flash-плэер. Вы можаце загрузіць Flash-плэер з Adobe.com. Існуюць і іншыя магчымасьці для рэдагаваньня OpenStreetMap. + no_iframe_support: Ваш браўзэр не падтрымлівае рамкі HTML, якія зьяўляюцца неабходнымі для гэтай магчымасьці. + not_public: Вы не зрабілі Вашыя рэдагаваньні публічнымі. + not_public_description: Вы больш ня можаце рэдагаваць мапу ў такім рэжыме. Вы можаце зрабіць Вашыя рэдагаваньні публічнымі на Вашай %{user_page}. + potlatch2_not_configured: Potlatch 2 ня быў наладжаны. Калі ласка, паглядзіце http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 для дадатковай інфармацыі + potlatch2_unsaved_changes: Вы маеце незахаваныя зьмены. (Каб захаваць у Potlatch 2, Вам неабходна націснуць кнопку «захаваць».) + potlatch_unsaved_changes: Вы маеце незахаваныя зьмены. (Для таго каб захаваць зьмены ў Potlatch, Вам неабходна зьняць пазначэньне з цяперашняй дарогі ці пункту, калі рэдагуеце ўжывую, ці націснуць кнопку «захаваць».) + user_page_link: старонцы карыстальніка + index: + js_1: Вы карыстаецеся браўзэрам, які не падтрымлівае ці мае забаронены JavaScript. + js_2: OpenStreetMap выкарыстоўвае JavaScript для паказу мапы. + js_3: Вы можаце паспрабаваць статычную мапу Tiles@Home, калі ня можаце дазволіць JavaScript. + license: + license_name: Creative Commons Attribution-Share Alike 2.0 + notice: Даступна на ўмовах ліцэнзіі %{license_name}, аўтарскія правы належаць %{project_name} і яго ўдзельнікам. + project_name: OpenStreetMap + permalink: Сталая спасылка + remote_failed: Памылка рэдагаваньня. Упэўніцеся, што JOSM ці Merkaartor загружаныя і дазволеная магчымасьць аддаленага кіраваньня + shortlink: Кароткая спасылка + key: + map_key: Умоўныя знакі + map_key_tooltip: Умоўныя знакі мапы + table: + entry: + admin: Адміністрацыйная мяжа + allotments: Агароды + apron: + - Пэрон аэрапорта + - тэрмінал + bridge: Чорная лінія = мост + bridleway: Дарога для коней + brownfield: Закінутая тэрыторыя + building: Значны будынак + byway: Завулак + cable: + - Канатная дарога + - крэславы пад’ёмнік + cemetery: Могілкі + centre: Спартовы цэнтар + commercial: Камэрцыйны раён + common: + - Грамадзкая зямля + - луг + construction: Будаўніцтва дарогаў + cycleway: Роварная дарога + destination: Мэтавы доступ + farm: Фэрма + footway: Пешаходная дарога + forest: Лес + golf: Поле для гольфу + heathland: Пусташ + industrial: Прамысловы раён + lake: + - Возера + - вадасховішча + military: Вайсковая тэрыторыя + motorway: Аўтастрада + park: Парк + permissive: Доступ па дазволах + pitch: Спартовая пляцоўка + primary: Галоўная дарога + private: Прыватны доступ + rail: Чыгунка + reserve: Запаведнік + resident: Жылы раён + retail: Гандлёвы раён + runway: + - Узьлётная паласа + - рулёжная дарога + school: + - Школа + - унівэрсытэт + secondary: Другасная дарога + station: Чыгуначная станцыя + subway: Мэтро + summit: + - Вяршыня + - пік + tourist: Славутасьць + track: Грунтовая дарога + tram: + - Лінія для лёгкага чыгуначнага транспарту + - трамвай + trunk: Шаша + tunnel: Пункцір = тунэль + unclassified: Дарога раённага значэньня + unsurfaced: Дарога без пакрыцьця + wood: Пушча + search: + search: Пошук + search_help: "прыклады: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', ці 'post offices near Lünen' больш прыкладаў…" + submit_text: Перайсьці + where_am_i: Дзе я? + where_am_i_title: Апішыце цяперашняе месцазнаходжаньне з дапамогай інструмэнту пошуку + sidebar: + close: Закрыць + search_results: Вынікі пошуку time: formats: friendly: "%e %B %Y у %H:%M" @@ -869,7 +1266,7 @@ be-TARASK: no_such_user: body: Прабачце, няма ўдзельніка з імем %{user}. Калі ласка, праверце дакладнасьць напісаньня, ці, магчыма, спасылка па якой Вы перайшлі, няслушная. heading: Удзельнік %{user} не існуе - title: Няма такога удзельніка + title: Няма такога ўдзельніка offline: heading: GPX-сховішча адключанае message: Сховішча GPX-файлаў і сыстэма іх загрузкі, у цяперашні момант, недаступная. @@ -892,13 +1289,13 @@ be-TARASK: trackable: МАГЧЫМА САЧЫЦЬ view_map: Прагляд мапы trace_form: - description: Апісаньне + description: "Апісаньне:" help: Дапамога - tags: Тэгі + tags: "Тэгі:" tags_help: падзеленае коскамі upload_button: Загрузіць - upload_gpx: Загрузіць GPX-файл - visibility: Бачнасьць + upload_gpx: "Загрузіць GPX-файл:" + visibility: "Бачнасьць:" visibility_help: што гэта азначае? trace_header: see_all_traces: Паказаць усе трэкі @@ -908,8 +1305,8 @@ be-TARASK: trace_optionals: tags: Тэгі trace_paging_nav: - next: Наступная » - previous: "« Папярэдняя" + next: Наступная » + previous: « Папярэдняя showing_page: Паказаная старонка %{page} view: delete_track: Выдаліць гэты трэк @@ -956,7 +1353,7 @@ be-TARASK: latitude: "Шырата:" longitude: "Даўгата:" make edits public button: Зрабіць усе мае рэдагаваньні публічнымі - my settings: Мае ўстаноўкі + my settings: Мае налады new email address: "Новы адрас электроннай пошты:" new image: Дадаць выяву no home location: Вы не падалі Вашае месцазнаходжаньне. @@ -1109,7 +1506,7 @@ be-TARASK: blocks on me: атрыманыя блякаваньні confirm: Пацьвердзіць confirm_user: пацьвердзіць гэтага карыстальніка - create_block: заблякаваць гэтага удзельніка + create_block: заблякаваць гэтага ўдзельніка created from: "Створана з:" deactivate_user: дэактывізаваць гэтага удзельніка delete_user: выдаліць гэтага ўдзельніка @@ -1126,7 +1523,7 @@ be-TARASK: moderator_history: паказаць пададзеныя блякаваньні my diary: мой дзёньнік my edits: мае рэдагаваньні - my settings: мае ўстаноўкі + my settings: мае налады my traces: мае трэкі nearby users: Іншыя бліжэйшыя карыстальнікі new diary entry: новы запіс у дзёньніку diff --git a/config/locales/br.yml b/config/locales/br.yml index 83a72252c..ced4b2b1c 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -270,8 +270,8 @@ br: still_editing: (oc'h aozañ c'hoazh) view_changeset_details: Gwelet munudoù ar strollad kemmoù changeset_paging_nav: - next: War-lerc'h » - previous: "« Kent" + next: War-lerc'h » + previous: « Kent showing_page: O tiskouez ar bajenn %{page} changesets: area: Takad @@ -885,7 +885,8 @@ br: map: base: cycle_map: Kelc'hiad kartenn - noname: AnvEbet + mapquest: MapQuest digor + transport_map: Kartenn treuzdougen site: edit_disabled_tooltip: Zoumañ da zegas kemmoù war ar gartenn edit_tooltip: Kemmañ ar gartenn @@ -896,7 +897,7 @@ br: layouts: community_blogs: Blogoù ar gumuniezh community_blogs_title: Blogoù izili kumuniezh OpenStreetMap - copyright: Copyright & Aotre-implijout + copyright: Copyright & Aotre-implijout documentation: Teuliadur documentation_title: Teuliadur ar raktres donate: Skoazellit OpenStreetMap dre %{link} d'an Hardware Upgrade Fund. @@ -1352,8 +1353,8 @@ br: trace_optionals: tags: Balizennoù trace_paging_nav: - next: War-lerc'h » - previous: "«Kent" + next: War-lerc'h » + previous: « Kent showing_page: O tiskouez ar bajenn %{page} view: delete_track: Dilemel ar roudenn-mañ @@ -1427,7 +1428,7 @@ br: title: Aozañ ar gont update home location on click: Hizivaat lec'hiadur ho kêr pa glikit war ar gartenn ? confirm: - already active: Kadarnaet eo bet dija ar gont-mañ. + already active: Kadarnaet eo bet ar gont-mañ c'hoazh. before you start: Gouzout a reomp ez eus mall warnoc'h kregiñ da gartennañ moarvat, met a-raok e c'hallfec'h reiñ muioc'h a ditouroù diwar ho penn er furmskrid amañ dindan. button: Kadarnaat heading: Kadarnaat kont un implijer diff --git a/config/locales/ca.yml b/config/locales/ca.yml index fbe8aca77..7895f4a2d 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -3,8 +3,11 @@ # Export driver: syck-pecl # Author: Aleator # Author: El libre +# Author: Gemmaa +# Author: Jconstanti # Author: Jmontane # Author: Martorell +# Author: McDutchie # Author: PerroVerd # Author: SMP # Author: Ssola @@ -15,7 +18,7 @@ ca: diary_comment: body: Cos diary_entry: - language: Idioma + language: Llengua latitude: Latitud longitude: Longitud title: Títol @@ -41,7 +44,7 @@ ca: active: Actiu description: Descripció display_name: Nom en pantalla - email: E-mail + email: Adreça electrònica languages: Idiomes pass_crypt: Contrasenya models: @@ -49,10 +52,10 @@ ca: changeset: Conjunt de canvis changeset_tag: Etiqueta del conjunt de canvis country: País - diary_comment: Commentari del diari + diary_comment: Comentari del diari diary_entry: Entrada al diari friend: Amic - language: Idioma + language: Llengua message: Missatge node: Node node_tag: Etiqueta del node @@ -74,9 +77,16 @@ ca: tracetag: Etiqueta del traç user: Usuari user_preference: Preferències d'usuari + user_token: Testimoni d'usuari way: Camí way_node: Node del camí way_tag: Etiqueta del camí + application: + require_cookies: + cookies_needed: Sembla tenir les galetes inhabilitats - heu d'habilitar les galetes al seu navegador abans de continuar. + setup_user_auth: + blocked: S'ha blocat l'accés a l'API. Si us plau, log-in a la interfície de web per obtenir més informació. + need_to_see_terms: L'accés a l'API és temporalment suspeses. Si us plau, log-in a la interfície de web per veure els termes de col. laborador. Vostè no necessita estar d'acord, però cal veure-les. browse: changeset: changeset: Conjunt de canvis %{id} @@ -98,9 +108,11 @@ ca: has_ways: one: "Té la següent via:" other: "Té les següents %{count} vies:" + no_bounding_box: No hi ha bounding box s'ha emmagatzemat per a aquest el conjunt de canvis. show_area_box: Mostra caixa de l'àrea common_details: changeset_comment: "Comentari:" + deleted_at: "Eliminat a:" deleted_by: "Eliminat per:" edited_at: "Editat:" edited_by: "Editat per:" @@ -111,6 +123,11 @@ ca: entry_role: Relació %{relation_name} (com a %{relation_role}) map: deleted: Esborrat + edit: + area: Modifica l'àrea + node: Modifica el node + relation: Modifica la relació + way: Modifica la via larger: area: Visualitza l'àrea en un mapa més gran node: Visualitza el node en un mapa més gran @@ -190,6 +207,7 @@ ca: hide_areas: Oculta les zones history_for_feature: Historial per a [[feature]] load_data: Carrega dades + loaded_an_area_with_num_features: "Heu carregat una àrea que conté trets de [[num_features]]. En general, alguns navegadors poden no fer front també mostrar aquesta quantitat de dades. En general, els navegadors funcionen millor de es mostren trets de menys de 100 a la vegada: fer qualsevol altra cosa pot fer que el seu navegador lent/insensible. Si esteu segurs que voleu visualitzar aquestes dades, pot fer-ho fent clic al botó de sota." loading: S'està carregant... manually_select: Selecciona manualment una àrea diferent object_list: @@ -211,8 +229,9 @@ ca: private_user: usuari privat show_areas: Mostra les zones show_history: Mostra l'historial + unable_to_load_size: "No es pot carregar: Bounding mida de caixa de [[bbox_size]] és massa gran (ha de ser més petita que % {max_bbox_size})" wait: Espereu... - zoom_or_select: Ampliar o seleccionar una àrea del mapa per veure + zoom_or_select: Amplia o selecciona una àrea del mapa per mostrar tag_details: tags: "Etiquetes:" wiki_link: @@ -253,10 +272,10 @@ ca: no_edits: (Sense edicions) show_area_box: Mostra capsa de l'àrea still_editing: (Encara en edició) - view_changeset_details: Veure detalls dels canvis + view_changeset_details: Mostra els detalls del conjunt de canvis changeset_paging_nav: - next: Següent » - previous: "« Anterior" + next: Següent » + previous: « Anterior showing_page: Mostrant pàgina %{page} changesets: area: Àrea @@ -277,6 +296,8 @@ ca: title_bbox: Conjunt de canvis dins de %{bbox} title_user: Conjunt de canvis de %{user} title_user_bbox: Conjunt de canvis de %{user} dins de %{bbox} + timeout: + sorry: La llista de conjunt de canvis que heu sol·licitat ha trigat massa a recuperar-se. diary_entry: diary_comment: comment_from: Comentari de %{link_user} el %{comment_created_at} @@ -287,14 +308,14 @@ ca: one: 1 comentari other: "%{count} comentaris" comment_link: Comenta aquesta entrada - confirm: Confirmar + confirm: Confirma edit_link: Edita aquesta entrada hide_link: Amaga aquesta entrada posted_by: Publicat per %{link_user} el %{created} en %{language_link} reply_link: Respon a aquesta entrada edit: body: "Cos del missatge:" - language: Idioma + language: "Llengua:" latitude: "Latitud:" location: "Ubicació:" longitude: "Longitud:" @@ -324,15 +345,17 @@ ca: title: Diaris d'usuari/a user_title: Diari de %{user} location: - edit: Edita + edit: Modifica location: "Ubicació:" - view: Veure + view: Mostra new: title: Nova Entrada de Diari no_such_entry: + body: Ho sentim, que no hi ha cap entrada del diari o comentari amb l'id % {id}. Si us plau, comproveu l'ortografia, o potser l'enllaç que es fa clic està malament. heading: No hi ha cap entrada amb la id %{id} title: No hi ha entrada al diari com no_such_user: + body: Ho sentim, no hi ha cap usuari amb el nom % (usuari). Si us plau, comproveu l'ortografia, o potser l'enllaç que es fa clic està malament. heading: L'usuari/a %{user} no existeix title: Aquest usuari/a no existeix view: @@ -376,6 +399,7 @@ ca: paste_html: Enganxa HTML per incloure'l al lloc web scale: Escala too_large: + body: Aquesta zona és massa gran per exportar com a dades XML de OpenStreetMap. Si us plau entrar ràpidament o seleccioneu una àrea més petita. heading: L'àrea és massa gran zoom: Zoom start_rjs: @@ -385,11 +409,12 @@ ca: drag_a_box: Marca un rectangle al mapa per a seleccionar una àrea export: Exporta manually_select: Selecciona manualment una àrea diferent - view_larger_map: Veure un mapa més gran + view_larger_map: Mostra un mapa més gran geocoder: description: title: geonames: Localització des de GeoNames + osm_namefinder: "% {tipus} de OpenStreetMap Namefinder" osm_nominatim: Localització des de OpenStreetMap Nominatim types: cities: Ciutats @@ -406,6 +431,10 @@ ca: south_east: sud-est south_west: sud-oest west: oest + distance: + one: vora 1km + other: vora %{count}km + zero: menys d'1km results: more_results: Més resultats no_results: No hi ha resultats @@ -439,7 +468,7 @@ ca: cafe: Cafè car_rental: Lloguer de cotxes car_sharing: Per Compartir Cotxe - car_wash: Rentat de Cotxes + car_wash: Rentat de cotxes casino: Casino cinema: Cinema clinic: Clínica @@ -559,47 +588,88 @@ ca: footway: Sendera ford: Fiord gate: Porta + living_street: Carrer habitat + minor: Camí secundari + motorway: L'autopista + motorway_junction: L'autopista + motorway_link: L'autopista Road path: Camí + pedestrian: Via Peatonal + platform: Perron + primary: Carretera Principal primary_link: Carretera principal + raceway: Vial Ràpid residential: Residencial road: Carretera secondary: Carretera secundària secondary_link: Carretera secundària + service: Carretera de Servei + services: Serveis en ruta steps: Graons stile: Escala per a travessar reixats tertiary: Carretera terciària + track: Pista trail: Sendera - unclassified: Carretera sense classificar + trunk: Autovia de + trunk_link: Autovia de + unclassified: Sense classificar Road + unsurfaced: Pista sense asfaltar historic: archaeological_site: Lloc arqueològic battlefield: Camp de batalla + boundary_stone: Pedra de la frontera building: Edifici castle: Castell church: Església house: Casa icon: Icona + manor: Manor memorial: Memorial mine: Mina monument: Monument museum: Museu ruins: Ruïnes tower: Torre + wayside_cross: Camí de la creu + wayside_shrine: Santuari de carreteres + wreck: Wreck landuse: + allotments: Horts + basin: Conca + brownfield: Brownfield terra cemetery: Cementiri commercial: Zona comercial + conservation: Conservació construction: Construcció farm: Granja + farmland: Terres de conreu + farmyard: Corral forest: Bosc + grass: Herba + greenfield: Greenfield terra industrial: Zona industrial + landfill: Abocador + meadow: Prat + military: Zona Militar mine: Mina mountain: Muntanya + nature_reserve: Reserva Natural park: Parc + piste: Pista d'aterratge plaza: Plaça quarry: Pedrera + railway: Ferrocarril + recreation_ground: Zona d'Esbarjo + reservoir: Embassament residential: Àrea residencial + retail: Al detall + village_green: Village Green + vineyard: Vinya wetland: Aiguamoll wood: Fusta leisure: + beach_resort: Beach Resort + common: Terra comú fishing: Àrea de pesca garden: Jardí golf_course: Camp de golf @@ -608,9 +678,14 @@ ca: miniature_golf: Minigolf nature_reserve: Reserva natural park: Parc + pitch: Camp d'esports + playground: Parc infantil + recreation_ground: Terra de recreació + slipway: Slipway sports_centre: Centre esportiu stadium: Estadi swimming_pool: Piscina + track: Pista water_park: Parc aquàtic natural: bay: Badia @@ -621,6 +696,7 @@ ca: cliff: Cingle coastline: Litoral crater: Cràter + feature: Característica fell: Forest fjord: Fiord geyser: Guèiser @@ -628,6 +704,8 @@ ca: heath: Bruguerar hill: Pujol island: Illa + land: Terra + marsh: Marsh moor: Amarratge mud: Llot peak: Pic @@ -637,6 +715,7 @@ ca: river: Riu rock: Roca scree: Pedregar + scrub: Scrub shoal: Banc spring: Deu strait: Estret @@ -668,33 +747,102 @@ ca: subdivision: Subdivisió suburb: Suburbi town: Poble + unincorporated_area: Àrea no incorporada village: Aldea railway: + abandoned: Ferrocarril fora de Servei + construction: Ferrocarril en Construcció + disused: Ferrocarril en desús + disused_station: Estació de tren tancada + funicular: Funicular Railway + halt: Parada de tren + historic_station: Estació de tren antiga + junction: Cruïlla de tren level_crossing: Pas a nivell + light_rail: Tren lleuger monorail: Monorail + narrow_gauge: Ample ferroviari mètric + platform: Andana + preserved: Conservat ferrocarril + spur: Esperó de ferrocarril + station: Estació de tren subway: Estació de metro + subway_entrance: Accés al Metro + switch: Punts de ferrocarril tram: Tramvia tram_stop: Parada de tramvia + yard: Pati de ferrocarril shop: + alcohol: De llicència + apparel: Roba de la botiga + art: Galeria d'Art bakery: Fleca + beauty: Saló de bellesa + beverages: Botiga de begudes bicycle: Tenda de bicicletes books: Llibreria butcher: Carnisseria + car: Venda de Cotxes + car_dealer: Compra-venda de cotxes + car_parts: Peces de cotxes car_repair: Reparació d'automòbils + carpet: Botiga de catifes + charity: Botiga de caritat chemist: Farmàcia + clothes: Botiga de roba + computer: Botiga d'informàtica + confectionery: Confiteria botiga + convenience: Botiga de conveniència + copyshop: Copisteria + cosmetics: Botiga Cosmètica + department_store: Department Store + discount: Botiga d'articles de descompte + doityourself: Bricolatge + drugstore: Farmàcia + dry_cleaning: Tintoreria + electronics: Botiga d'electrònica + estate_agent: Immobiliària + farm: Agrobotiga + fashion: Botiga de moda fish: Peixateria florist: Floristeria + food: Botiga de menjar + funeral_directors: Funeral d'administració + furniture: Mobles + gallery: Galeria de fotos + garden_centre: Centre de jardí + general: Magatzem General gift: Botiga de regals + greengrocer: Greengrocer + grocery: Botiga de queviures hairdresser: Perruqueria o barberia + hardware: Botiga de maquinari + hifi: Hi-Fi + insurance: Homes For Sale jewelry: Joieria + kiosk: Quiosc botiga laundry: Bugaderia mall: Centre comercial market: Mercat + mobile_phone: Botiga de telèfon mòbil + motorcycle: Botiga de motocicletes + music: Botiga de música + newsagent: Quiosc optician: Òptica + organic: Botiga d'aliments orgànics + outdoor: Botiga exterior + pet: Botiga d'animals + photo: Botiga de foto + salon: Sala d'estar shoes: Sabateria + shopping_centre: Centre comercial + sports: Botiga d'esports + stationery: Botiga de papereria supermarket: Supermercat toys: Botiga de joguines travel_agency: Agència de viatges + video: Video de la botiga + wine: De llicència tourism: alpine_hut: Cabanya alpina artwork: Il·lustració @@ -717,46 +865,105 @@ ca: viewpoint: Mirador zoo: Zoològic waterway: + boatyard: Drassana canal: Canal + connector: Connector de Waterway + dam: Dam + derelict_canal: Hi Canal ditch: Séquia + dock: No obstant això, + drain: De drenatge + lock: Pany + lock_gate: Porta de panys + mineral_spring: Mineral primavera mooring: Amarradors rapids: Ràpids river: Riu + riverbank: Riverbank + stream: Stream wadi: Torrent water_point: Punt d'aigua waterfall: Cascada + weir: Weir javascripts: map: base: cycle_map: Cycle Map - noname: NoName + mapquest: MapQuest Open + transport_map: Mapa de transports + site: + edit_disabled_tooltip: Augmenteu el zoom per modificar el mapa + edit_tooltip: Modifica el mapa + edit_zoom_alert: Heu d'ampliar el zoom per editar el mapa + history_disabled_tooltip: Amplia per visualitzar les modificacions de l'àrea + history_tooltip: Mostra les modificacions de l'àrea + history_zoom_alert: Heu d'ampliar el zoom per veure les modificacions de l'àrea layouts: + community_blogs: Blocs de comunitat + community_blogs_title: Blogs dels membres de la comunitat OpenStreetMap + copyright: Drets d'autor i llicència documentation: Documentació + documentation_title: Documentació del projecte + donate: Suport OpenStreetMap % {enllaç} el fons de rampa de maquinari. donate_link_text: donatius edit: Modificació + edit_with: Modifica amb % {editor} export: Exporta + export_tooltip: Exporta les dades del mapa + foundation: Fundació + foundation_title: La Fundació OpenStreetMap gps_traces: Traces de GPS + gps_traces_tooltip: Gestiona registres GPS help: Ajuda + help_centre: Centre d'ajuda + help_title: Lloc d'ajuda per al projecte history: Historial home: Inici + home_tooltip: Vés a la posició inicial + inbox: safata d'entrada (% {count}) + inbox_tooltip: + other: one no llegits = el seu inbox conté 1 message + zero: el seu inbox conté cap messages intro_1: L'OpenStreetMap és un mapa editable i lliure de tot el món. Està fet per gent com vós. + intro_2: OpenStreetMap us permet veure, editar i utilitzar informació geogràfica comunitària de qualsevol lloc del planeta + intro_3: OpenStreetMap hosting és amable amb el suport de % {ucl}, % {ic} i % {bytemark}. Altres partidaris del projecte s'enumeren en el % {socis}. + intro_3_ic: Imperial College de Londres intro_3_partners: wiki + license: + title: OpenStreetMap dades es concedeix una llicència sota la llicència Creative Commons Reconeixement-Compartir Igual 2.0 genèrica + log_in: inicia una sessió + log_in_tooltip: Inicia una sessió amb un compte existent logo: alt_text: logotip de l'OpenStreetMap logout: sortir logout_tooltip: Sortir make_a_donation: - text: Fer una donació + text: Feu una donació + title: Ajuda OpenStreetMap amb una donació exonòmica + osm_offline: La base de dades OpenStreetMap està fora de línia, mentre que les actuacions de manteniment essencials de base de dades es porta a terme. + osm_read_only: La base de dades OpenStreetMap actualment és en el mode read-only mentre que les actuacions de manteniment essencials de base de dades es porta a terme. + sign_up: registre + sign_up_tooltip: Crea un usuari per editar + sotm2011: Vine a la conferència de OpenStreetMap de 2011, L'estat del mapa, 9-11 de setembre a Denver! + tag_line: El mapa wiki lliure mundial user_diaries: DIaris de usuari - view: Veure - view_tooltip: Visualitza els mapes + user_diaries_tooltip: Mostra els diaris d'usuari + view: Mostra + view_tooltip: Mostra el mapa welcome_user: Benvingut/da, %{user_link} welcome_user_link_tooltip: La teva pàgina d'usuari + wiki: Wikia + wiki_title: Lloc web de wiki per al projecte license_page: foreign: english_link: l'original en anglès - title: Sobre aquesta traducció + text: En cas de conflicte entre aquesta pàgina traduïda i % {english_original_link}, la pàgina en anglès tindrà prioritat + title: Quant a la traducció + legal_babble: "

    Drets d'autor i llicència

    \n

    \n OpenStreetMap és obrir dades, concedeix una llicència sota el Creative\n Llicència Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Vostè és lliure de copiar, distribuir, transmetre i adaptar-se a nostres mapes\n i les dades, sempre que li doni crèdit OpenStreetMap i la seva\n col. laboradors. Si alterar o construir sobre els nostres mapes o dades, vostè\n distribuir el resultat només sota la mateixa llicència. La\n Full legal\n codi explica els seus drets i responsabilitats.\n

    \n\n

    Com a crèdit OpenStreetMap

    \n

    \n Si està utilitzant imatges de mapa de OpenStreetMap, us preguem que\n el seu crèdit llegeix com a mínim \"© OpenStreetMap\n col. laboradors, CC-BY-SA\". Si està utilitzant les dades de mapa només\n demanem \"mapa dades © OpenStreetMap col·laboradors\n CC-BY-SA\".\n

    \n

    \n Sempre que sigui possible, OpenStreetMap ha de ser un hipervincle a http://www.openstreetmap.org/\n i CC-BY-SA a http://creativecommons.org/licenses/by-sa/2.0/. Si\n està utilitzant un mitjà on enllaços no són possibles (per exemple, un\n treball impresa), us suggerim que directa als seus lectors a\n www.OpenStreetMap.org (potser per l'ampliació\n 'OpenStreetMap' a aquesta adreça completa) i a\n www.creativecommons.org.\n

    \n\n

    Saber-ne més

    \n

    \n Llegiu més informació sobre com utilitzar les nostres dades a les Legal\n PREGUNTES MÉS FREQÜENTS.\n

    \n

    \n Col. laboradors OSM se li va recordar mai per afegir les dades des de qualsevol\n drets d'autor fonts (p. ex. Google Maps o mapes impreses) sense\n permís explícit dels titulars del copyright.\n

    \n

    \n Encara que OpenStreetMap és oberts les dades, no podem oferir un\n mapa de Free-of-charge API per a desenvolupadors de tercera festa.\n\n Consulti la nostra Política d'ús de l'API\n Política d'ús de rajoles\n i política d'ús de Nominatim.\n

    \n\n

    Nostres col. laboradors

    \n

    \n La nostra llicència CC-BY-SA requereix que \"doni l'Original\n Autor de crèdit raonable per al suport i mitjà que ets\n utilització\". No tornis a sol·licitar individuals dibuixants de mapes de OSM un\n de crèdit més enllà de que a \"OpenStreetMap\n col. laboradors\", però on les dades des d'un mapatge Nacional\n Agència o l'altra font important ha estat inclòs en\n OpenStreetMap, pot ser raonable per crèdit per directament\n reproduir el seu crèdit o per vincular-hi d'aquesta pàgina.\n

    \n\n\n\n
      \n
    • Austràlia: conté dades suburbi basats\n en les dades d'Austràlia Oficina d'estadístiques.
    • \n
    • Àustria: conté dades de\n Stadt Wien sota\n CC-BY.
    • \n
    • Canadà: conté dades de\n GeoBase ®, GeoGratis (© Departament de Natural\n Recursos Canadà), CanVec (© Departament de Natural\n Recursos Canadà) i StatCan (Divisió de Geografia,\n Canadà de Estadístiques).
    • \n
    • França: conté dades d'origen de\n Direcció Générale des Impôts.
    • \n
    • Nova Zelanda: conté dades d'origen de\n Informació Nova Zelanda de la terra. Corona de drets d'autor reservat.
    • \n
    • Polònia: conté dades de mapes de UMP-pcPL. Drets d'autor\n Col. laboradors de la UMP-pcPL.
    • \n
    • Regne Unit: conté cartografia\n Enquesta dades © Crown copyright i base de dades correcte\n 2010.
    • \n
    \n\n

    \n Inclusió de dades en OpenStreetMap no implica que l'original\n el proveïdor de dades recolza OpenStreetMap, proporciona cap garantia, o\n accepta qualsevol responsabilitat.\n

    " native: + mapping_link: Inici d'assignació + native_link: Versió THIS_LANGUAGE_NAME_HERE + text: Estàs veient la versió anglesa de la pàgina de drets d'autor. Es pot tornar posterior al % {native_link} d'aquesta pàgina o vostè pot deixar de llegir sobre el copyright i % {mapping_link}. title: Sobre aquesta pàgina message: delete: @@ -764,9 +971,16 @@ ca: inbox: date: Data from: De + my_inbox: La meva safata d'entrada + no_messages_yet: No tens missatges encara. Per què no entrar en contacte amb alguns dels % {people_mapping_nearby_link}? outbox: sortida + people_mapping_nearby: Cartografia de prop la gent subject: Assumpte title: Safata d'entrada + you_have: Teniu missatges nous % {new_count} i els missatges antics % {old_count} + mark: + as_read: Missatge marcat com a llegits + as_unread: Missatge marcat com a no llegit message_summary: delete_button: Suprimeix read_button: Marca com a llegit @@ -775,85 +989,270 @@ ca: new: back_to_inbox: Tornar a la safata d'entrada body: Cos + limit_exceeded: He enviat un munt de missatges recentment. Si us plau, espereu una estona abans d'intentar d'enviar qualsevol més. message_sent: S'ha enviat el missatge send_button: Envia + send_message_to: Enviar un missatge nou a % {name} subject: Assumpte title: Enviar missatge no_such_message: + body: Trist que no hi ha cap missatge amb que id. heading: No existeix aquest missatge title: No existeix aquest missatge + no_such_user: + body: Trist que no hi ha cap usuari amb aquest nom. + heading: Aquest usuari no + title: Aquest usuari no outbox: date: Data inbox: Entrada my_inbox: El meu %{inbox_link} + no_sent_messages: Encara no has cap els missatges enviats. Per què no entrar en contacte amb alguns dels % {people_mapping_nearby_link}? outbox: sortida + people_mapping_nearby: Cartografia de prop la gent subject: Assumpte title: Sortida to: A + you_have_sent_messages: Tens % {count} enviar missatges read: + back_to_inbox: Torna a la safata d'entrada + back_to_outbox: Torna a la safata de sortida date: Data from: De + reading_your_messages: Llegir els missatges + reading_your_sent_messages: Llegir els missatges enviats reply_button: Respon subject: Assumpte title: Llegir missatge to: Per a unread_button: Marca com a no llegit + wrong_user: Heu iniciat la sessió com "% {user}", però el missatge que han demanat a llegir a no va ser enviat per o a que l'usuari. Si us plau connecti's com l'usuari correcte per a llegir-lo. + reply: + wrong_user: Heu iniciat la sessió com "% {user}", però el missatge que han demanat que respongui a no s'ha enviat a que l'usuari. Si us plau connecti's com l'usuari correcte per a respondre. sent_message_summary: delete_button: Suprimeix notifier: diary_comment_notification: + footer: També podeu llegir el comentari a les % {readurl} i es pot comentar als % {commenturl} o respondre a les % {replyurl} + header: "% {from_user} ha comentat en el seu recent entrada del diari OpenStreetMap amb el tema % {tema}:" hi: Hola %{to_user}, + subject: "[OpenStreetMap] % (usuari), va comentar sobre la seva entrada del diari" email_confirm: subject: "[OpenStreetMap] Confirmeu l'adreça de correu" email_confirm_html: + click_the_link: Si això és vostè, si us plau, feu clic a l'enllaç sota per confirmar el canvi. greeting: Hola, + hopefully_you: Algú (esperem que vostè) com canviar la seva adreça d'e-mail % {server_url} % {new_address}. email_confirm_plain: + click_the_link: Si això és vostè, si us plau, feu clic a l'enllaç sota per confirmar el canvi. greeting: Hola, + hopefully_you_1: Algú (esperem que vostè) li agradaria canviar la seva adreça d'e-mail a + hopefully_you_2: "% {server_url} % {new_address}." + friend_notification: + befriend_them: També el pots afegir com a amic a % {befriendurl}. + had_added_you: "% {user} t'ha afegit com a amic a OpenStreetMap." + see_their_profile: Pots veure el seu perfil a %{userurl}. + subject: "[OpenStreetMap] %{user} t'ha afegit a la llista d'amics" gpx_notification: + and_no_tags: i cap etiqueta. + and_the_tags: "i les etiquetes següents:" + failure: + failed_to_import: "no es pot importar. Aquí està l'error:" + more_info_1: Més informació en relació a GPX d'importació fracassos i com evitar + more_info_2: "ells es pot trobar a:" + subject: "[OpenStreetMap] Error d'importació de GPX" greeting: Hola, + success: + loaded_successfully: carregat amb % {trace_points} fora d'un punts possibles % {possible_points}. + subject: "[OpenStreetMap] L'èxit de GPX importació" + with_description: amb la descripció + your_gpx_file: Sembla que el seu arxiu GPX + lost_password: + subject: "[OpenStreetMap] Sol. licitud de reinicialització de contrasenya" lost_password_html: + click_the_link: Si això és vostè, si us plau, feu clic a l'enllaç de sota per restaurar la seva contrasenya. greeting: Hola, + hopefully_you: Algú (possiblement vostè) ha demanat per a la contrasenya restaurar el compte de openstreetmap.org d'aquesta adreça de correu electrònic. lost_password_plain: + click_the_link: Si això és vostè, si us plau, feu clic a l'enllaç de sota per restaurar la seva contrasenya. greeting: Hola, + hopefully_you_1: Algú (possiblement vostè) ha demanat per a la contrasenya restaurar en això + hopefully_you_2: adreces d'e-mail openstreetmap.org compte. message_notification: + footer1: També pots llegir el missatge a %{readurl} + footer2: i el pots replicar a %{replyurl} + header: "% {from_user} ha enviat un missatge a través de OpenStreetMap amb el tema % {tema}:" hi: Hola %{to_user}, + signup_confirm: + subject: "[OpenStreetMap] Confirmeu la vostra adreça electrònica" signup_confirm_html: + ask_questions: Pot fer qualsevol pregunta que tingui sobre OpenStreetMap a la nostra pregunta i resposta lloc. + click_the_link: Si això és vostè, Benvingut! Si us plau, feu clic a l'enllaç de sota per confirmar que compte i seguiu llegint per obtenir més informació sobre OpenStreetMap + current_user: "Una llista d'usuaris actuals en categories, basades en on en el món que són, està disponible des de Categoria: Users_by_geographical_region." + get_reading: Obtenir de lectura sobre OpenStreetMap al wiki, posarà al dia amb les últimes notícies via OpenStreetMap bloc o Twittero navegar a través de OpenStreetMap fundador Steve Costa OpenGeoData blog per a la breu història del projecte, que disposa de podcasts d'escoltar ! + greeting: Hola, què tal? + hopefully_you: Algú (esperem que vostè) would com crear un compte per a les + introductory_video: Vostè pot veure un % {introductory_video_link}. + more_videos: Hi ha % {more_videos_link}. more_videos_here: més de vídeos aquí + user_wiki_page: "Es recomana que es crea una pàgina de wiki de l'usuari, que inclou Etiquetes de categoria assenyalant on estàs, com [[Categoria: Users_in_London]]." + video_to_openstreetmap: vídeo d'introducció a OpenStreetMap + wiki_signup: Vostè també pot inscriure s a la wiki OpenStreetMap. signup_confirm_plain: + ask_questions: "Pot fer qualsevol pregunta que tingui sobre OpenStreetMap a les nostres preguntes i lloc de resposta:" + blog_and_twitter: "Posarà al dia amb les últimes notícies via el blog de OpenStreetMap o Twitter:" + click_the_link_1: Si això és vostè, Benvingut! Si us plau, feu clic a l'enllaç sota per confirmar el seu + click_the_link_2: compte i seguiu llegint per obtenir més informació sobre OpenStreetMap. + current_user_1: Una llista d'usuaris actuals en categories, basades en on en el món + current_user_2: "ells són, està disponible des de:" + greeting: Hola, què tal? + hopefully_you: Algú (esperem que vostè) would com crear un compte per a les + introductory_video: "Podeu veure un vídeo d'introducció a OpenStreetMap aquí:" more_videos: "Hi ha més videos aquí:" + opengeodata: "OpenGeoData.org és blog fundador OpenStreetMap Steve Costa, i té podcasts també:" + the_wiki: "Obtenir llegint sobre OpenStreetMap al wiki:" + user_wiki_1: Es recomana que es crea una pàgina de wiki de l'usuari, que inclou + user_wiki_2: "Categoria Etiquetes assenyalant on es troba, com [[Categoria: Users_in_London]]." + wiki_signup: "Vostè també pot inscriure s a la wiki OpenStreetMap a:" + oauth: + oauthorize: + allow_read_gpx: llegir el seu privats traces GPS. + allow_read_prefs: llegir les seves preferències d'usuari. + allow_to: "Permet la sol·licitud de client per:" + allow_write_api: modificar el mapa. + allow_write_diary: crear entrades de diari, comentaris i fer amics. + allow_write_gpx: carregar traces GPS. + allow_write_prefs: modificar les seves preferències d'usuari. + request_access: L'aplicació % {app_name} sol·licita accés al seu compte, % (usuari). Si us plau marqui si vostè would com l'aplicació té les següents capacitats. Vostè pot triar tantes o tan poc com vulgui. + revoke: + flash: He estat revocat el símbol % {aplicació} oauth_clients: + create: + flash: Registrar la informació amb èxit + destroy: + flash: Destruït la matrícula d'aplicació de client edit: submit: Modificació + title: Editar la seva aplicació form: + allow_read_gpx: llegir les seves traces GPS privats. + allow_read_prefs: llegir les seves preferències d'usuari. + allow_write_api: modificar el mapa. + allow_write_diary: crear entrades de diari, comentaris i fer amics. + allow_write_gpx: carregar traces GPS. + allow_write_prefs: modificar les seves preferències d'usuari. + callback_url: Resposta d'URL name: Nom + requests: "Sol·licitar els permisos següents des de l'usuari:" required: Requerit + support_url: URL de suport + url: Principal aplicació URL + index: + application: Nom d'aplicació + issued_at: Emès A + list_tokens: "Les fitxes següents s'han emès per aplicacions en el seu nom:" + my_apps: Meves aplicacions de Client + my_tokens: Meves aplicacions autoritzada + no_apps: Té una aplicació que li agradaria inscriure's per al seu ús amb nosaltres utilitzant l'estàndard % {oauth}? Heu de registrar la seva aplicació web abans que pugui fer peticions OAuth a aquest servei. + register_new: Registrar-se l'aplicació + registered_apps: "Vostè té les següents aplicacions client registrats:" + revoke: Revocar! + title: Les meves dades OAuth + new: + submit: Registrar-se + title: Registrar-se una nova aplicació + not_found: + sorry: Ho sento, que no s'ha pogut trobar el que % {tipus}. + show: + access_url: "Accés Fitxa URL:" + allow_read_gpx: llegir les seves traces GPS privats. + allow_read_prefs: llegir les seves preferències d'usuari. + allow_write_api: modificar el mapa. + allow_write_diary: crear entrades de diari, comentaris i fer amics. + allow_write_gpx: carregar traces GPS. + allow_write_prefs: modificar les seves preferències d'usuari. + authorize_url: "Autoritzar URL:" + edit: Editar els detalls + key: "Clau de consum:" + requests: "Sol·licitar els permisos següents des de l'usuari:" + secret: "Secret de consum:" + support_notice: Donem suport a HMAC-SHA1 (recomanat), així com text sense format en el mode de ssl. + title: OAuth detalls % {app_name} + url: "Sol. licitud Token URL:" + update: + flash: La informació de client ha actualitzat correctament site: edit: + anon_edits_link_text: Esbrinar per què aquest és el cas. + flash_player_required: Vostè necessita un intèrpret de flaix per utilitzar Potlatch, l'editor de OpenStreetMap Flash. Vostè pot Descarregar Flash Player des de Adobe.com. També hi ha diverses altres opcions per editar-lo OpenStreetMap. + no_iframe_support: El seu navegador no suporta iframes HTML, que són necessàries per a aquest tret. + not_public: No ha posat les modificacions per ser públic. + not_public_description: Ja no es pot editar el mapa a menys que vostè fer-ho. Pot configurar les modificacions com a públic del seu % {user_page}. + potlatch2_not_configured: No s'ha configurat Potlatch 2 - si us plau, veure http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 per a més informació + potlatch2_unsaved_changes: Vostè té canvis no desats. (D'estalviar en Potlatch 2, hauria de fer clic Salvar.) + potlatch_unsaved_changes: Vostè té canvis no desats. (Per salvar a Potlatch, vostè ha desseleccionar la manera actual o punt, si d'edició en mode en viu, o clic Salvar si vostè té un salvar botó.) user_page_link: pàgina d'usuari index: + js_1: Tampoc està utilitzant un navegador que no suporta JavaScript o té deshabilitat JavaScript. + js_2: OpenStreetMap utilitza JavaScript per a la seva mapa slippy. + js_3: Pot voler provar el navegador mosaic estàtica de Tiles@Home si és incapaç d'activar JavaScript. license: license_name: Creative Commons Reconeixement-Compartir Igual 2.0 + notice: Llicenciat sota la llicència % {license_name} per % {project_name} i els seus contribuents. project_name: projecte OpenStreetMap permalink: Enllaç permanent + remote_failed: Edició ha fallat - assegureu-vos que JOSM o Merkaartor es carrega i l'opció de comandament a distància és habilitat shortlink: Enllaç curt key: + map_key: Mapa clau + map_key_tooltip: Clau per al mapa table: entry: + admin: Límits administratius + allotments: Horts apron: - 1: terminal + - Davantal de l'Aeroport + - terminal + bridge: Embolcall negre = bridge + bridleway: Bridleway + brownfield: Lloc Brownfield + building: Edifici significatiu + byway: Byway + cable: + - Cable car + - telecadira cemetery: Cementiri centre: Centre esportiu + commercial: Zona comercial + common: + - Comú + - Prat + construction: Carreteres en construcció + cycleway: Cycleway + destination: Accés de destinació farm: Granja + footway: Footway forest: Bosc golf: Camp de golf + heathland: Bruguerar industrial: Zona industrial lake: - Llac + - Embassament military: Àrea militar + motorway: L'autopista + park: Parc + permissive: Permissiva accés + pitch: Camp d'esports + primary: Carretera principal private: Accés privat rail: Ferrocarril reserve: Reserva natural resident: Zona residencial + retail: Zona de venda al detall + runway: + - Pista d'Aeroport + - TAXIWAY school: - Escola - Universitat @@ -861,13 +1260,24 @@ ca: station: Estació de tren subway: Metro summit: - 1: pic + - Cimera + - pic + tourist: Atracció turística track: Pista + tram: + - Tren lleuger + - tramvia + trunk: Autovia de + tunnel: Carcassa de guions = túnel + unclassified: Sense classificar road + unsurfaced: Unsurfaced road wood: Fusta search: search: Cerca + search_help: "exemples: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ' o 'oficines de CORREOS a prop Lünen' més exemples..." submit_text: Vés-hi where_am_i: On sóc? + where_am_i_title: Descriure la localització actual que utilitzen el motor de cerca sidebar: close: Tanca search_results: Resultats de la cerca @@ -876,7 +1286,10 @@ ca: friendly: "%e %B %Y a les %H.%M" trace: create: + trace_uploaded: El seu arxiu GPX s'ha pujat i està pendent d'inserció a la base de dades. Això passarà en general dins d'una mitja hora, i s'enviarà un correu electrònic a vostè en finalitzar. upload_trace: Pujar traça de GPS + delete: + scheduled_for_deletion: Water programat per a la supressió edit: description: "Descripció:" download: descàrrega @@ -896,11 +1309,20 @@ ca: visibility_help: Què vol dir això? list: public_traces: Traces GPS públiques + public_traces_from: Públics traces GPS de % (usuari) tagged_with: " etiquetat amb %{tags}" your_traces: Les teves traces GPS + make_public: + made_public: Water fet públic no_such_user: + body: Ho sentim, no hi ha cap usuari amb el nom % (usuari). Si us plau, comproveu l'ortografia, o potser l'enllaç que es fa clic està malament. heading: No existeix l'usuari %{user} title: No existeix l`usuari + offline: + heading: GPX emmagatzematge fora de línia + message: Al GPX d'emmagatzematge i carregar sistema d'arxiu no està disponible actualment. + offline_warning: + message: El sistema de càrrega de fitxers GPX no està disponible actualment trace: ago: fa %{time_in_words_ago} by: en @@ -918,22 +1340,24 @@ ca: trackable: RASTREABLE view_map: Visualitza el mapa trace_form: - description: Descripció + description: "Descripció:" help: Ajuda - tags: Etiquetes + tags: "Etiquetes:" tags_help: separat per comas upload_button: Pujar - upload_gpx: Carregar arxiu GPX - visibility: Visibilitat + upload_gpx: "Carregui l'arxiu GPX:" + visibility: "Visibilitat:" visibility_help: què significa això? trace_header: - see_all_traces: Veure totes les traces - see_your_traces: Veure totes les teves traces + see_all_traces: Mostra totes les traces + see_your_traces: Mostra totes les vostres traces + traces_waiting: Vostè té % {count} traces d'espera per a carregar. Si us plau consideri espera per a aquests per acabar abans de pujar més, per tal de bloquejar la cua per a altres usuaris. + upload_trace: Carregar una traça trace_optionals: tags: Etiquetes trace_paging_nav: - next: Següent » - previous: "« Previ" + next: Següent » + previous: « Previ showing_page: Mostrant pàgina %{page} view: delete_track: Elimina aquesta traça @@ -942,7 +1366,7 @@ ca: edit: modificació edit_track: Edita aquesta traça filename: "Nom del fitxer:" - heading: Veient traça %{name} + heading: S'està mostrant la traça %{name} map: mapa none: Ningú owner: "Propietari:" @@ -950,92 +1374,226 @@ ca: points: "Punts:" start_coordinates: "coordenada de inici:" tags: "Etiquetes:" - title: Veient traça %{name} + title: S'està mostrant la traça %{name} trace_not_found: No s'ha trobat la traça! uploaded: "Pujat el:" visibility: "Visibilitat:" + visibility: + identifiable: Identifiable (mostrat en llista de traça i com a punts d'identificació, ordenades amb timestamps) + private: Privat (només compartit com anònims, desordenada punts) + public: Públic (mostrat en llista de traça i com anònims, desordenada punts) + trackable: Seguiments (només compartit com punts anònims, ordenades amb timestamps) user: account: contributor terms: + agreed: Que han accedit a les noves condicions de col. laborador. + agreed_with_pd: També heu declarat que considereu que les vostres modificacions han d'estar en el domini públic. + heading: "Col. laborador termes:" link text: què és això? + not yet agreed: Que han no encara s'ha accedit a les noves condicions de col. laborador. + review link text: Si us plau, seguiu aquest enllaç a la seva conveniència de revisar i acceptar els termes de col. laborador nou. current email address: "Adreça de correu electrònic actual:" + delete image: Treure la imatge actual email never displayed publicly: (no es mostrarà mai en públic) + flash update success: Informació de l'usuari ha actualitzat correctament. + flash update success confirm needed: Informació de l'usuari ha actualitzat correctament. Comprovi el seu e-mail per a una nota per confirmar la seva adreça de correu electrònic nou. + home location: "Ubicació inicial:" image: "Imatge:" + image size hint: (Plaça imatges com a mínim 100 x 100 treball millor) + keep image: Conserva la imatge actual latitude: "Latitud:" longitude: "Longitud:" + make edits public button: Fes totes les meves modificacions públiques my settings: Preferències - new image: Afegir una imatge + new email address: "Nova adreça d'E-mail:" + new image: Afegeix una imatge + no home location: No heu especificat la ubicació d'origen. + openid: + link: http://wiki.OpenStreetMap.org/wiki/OpenID + link text: què és això? + openid: "OpenID:" + preferred editor: "Editor preferit:" preferred languages: "Llengües preferents:" profile description: "Descripció del perfil:" public editing: + disabled: Impossibilitat i no es pot editar les dades, totes les anteriors edicions són anònims. + disabled link text: per què no es pot editar? + enabled: Permès. No anònims i editar les dades. enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits enabled link text: què és això? heading: "Edició pública:" public editing note: - heading: Edició pública + heading: Modificació pública + text: Actualment les vostres modificacions estan anònims i la gent no pot enviar missatges o veure la vostra ubicació. Per mostrar el que editat i permetre que la gent en contacte amb vostè a través del web, feu clic al botó de sota. Des de canvi de l'API 0.6, només els usuaris públics pot editar les dades de mapa. (esbrinar per què).
    • Adreces de correu electrònic no serà revelada per convertir-se en públic.
    • Aquesta acció no es pot fer la inversió i els nous usuaris ara són públics per defecte.
    + replace image: Substituir la imatge actual return to profile: Torna al perfil save changes button: Desa els canvis title: Edita el compte + update home location on click: Localització de casa d'actualització quan faig clic al mapa? confirm: - button: Confirmar + already active: Aquest compte ja ha estat confirmat. + before you start: Sabem que vostè està probablement en una pressa per començar a mapatge, però abans de fer que t'agradaria omplir una mica més informació sobre si mateix en el formulari a continuació. + button: Confirma + heading: Confirmar un compte d'usuari + press confirm button: Premeu el botó de confirmar sota per activar el seu compte. + reconfirm: Si ha estat una estona ja que s'inscrivia podria necessitar enviar-se un nou correu electrònic de confirmació. + success: Confirmar el seu compte, gràcies per registrar-te! + unknown token: Aquesta mostra no sembla que hi ha. confirm_email: - button: Confirmar + button: Confirma + failure: Una adreça de correu electrònic ja ha estat confirmat amb aquesta fitxa. + heading: Confirma un canvi d'adreça electrònica + press confirm button: Premeu el botó de confirmar sota per confirmar la seva adreça de correu electrònic nou. + success: S'ha confirmat l'adreça electrònica, gràcies per registrar-vos-hi! + confirm_resend: + failure: L'usuari % {name} no s'ha trobat. + success: Hem enviat un bitllet de confirmació nou per % {email} i tan aviat com vostè confirmar el seu compte es podrà aconseguir d'assignació.

    Si utilitzeu un sistema que envia les sol·licituds de confirmació llavors si us plau fer segur whitelist webmaster@openstreetmap.org com som capaços de respondre a qualsevol sol·licituds de confirmació. + filter: + not_an_administrator: Cal que sigueu administrador per dur a terme aquesta acció. go_public: flash success: Ara totes les teves edicions són públiques i ja estàs autoritzat per a editar list: + confirm: Confirmar usuaris seleccionats + empty: No hi ha usuaris que coincideixin s'ha trobat heading: Usuaris + hide: Amaga els usuaris seleccionats + showing: + one: "mostrant pàgina % {page} (% {first_item} de % {elements}) " + other: Mostrant pàgina % {page} ( %{first_item}-% {last_item} de % {elements}) + summary: "% {name} creat a partir de % {direcciónIP} el % {data}" + summary_no_ip: "% {name} creat el % {data}" title: Usuaris login: + account not active: Ho sentim, el teu compte encara no està actiu.
    Si us plau utilitzi l'enllaç a l'e-mail de confirmació de compte d'activar el seu compte, o demanar un nou correu electrònic de confirmació. + account suspended: Ho sentim, el seu compte ha estat suspès a causa de l'activitat sospitosa.
    Si us plau contacti's amb % {webmaster} si vostè desitja discutir això. + auth failure: Ho sentim, no pot registrar en amb els detalls. + create account minute: Crear un compte. Només es triga un minut. email or username: "Adreça de correu o usuari:" heading: Accés login_button: Accés lost password link: Heu perdut la contrasenya? + new to osm: Nou a OpenStreetMap? + notice: Esbrinar més sobre el canvi de llicència futura de OpenStreetMap (traduccions) (discussió) + openid: "% {logo} OpenID:" + openid invalid: Ho sentim, el seu OpenID sembla ser no vàlida + openid missing provider: Ho sento, podria no en contacte amb el seu proveïdor d'OpenID + openid_logo_alt: Connecti's amb un OpenID + openid_providers: + aol: + alt: Connecti's amb un AOL OpenID + title: Connecti's amb AOL + google: + alt: Connecti's amb un OpenID de Google + title: Connecti's amb Google + myopenid: + alt: Connecti's amb un myOpenID OpenID + title: Connecti's amb myOpenID + openid: + alt: Connecti's amb un URL d'OpenID + title: Connecti's amb OpenID + wordpress: + alt: Connecti's amb un Wordpress OpenID + title: Connecti's amb Wordpress + yahoo: + alt: Connecti's amb un OpenID Yahoo + title: Connecti's amb Yahoo password: "Contrasenya:" + register now: Registreu-vos-hi ara + remember: "Recorda'm:" title: Accés + to make changes: Per fer canvis a les dades de OpenStreetMap, ha de tenir un compte. webmaster: webmestre + with openid: "Alternativament, si us plau utilitzi el seu OpenID per connectar-se:" + with username: "Ja teniu un compte de OpenStreetMap? Si us plau connecti's amb el seu nom d'usuari i contrasenya:" logout: - heading: Sortir d'OpenStreetMap - logout_button: Sortir - title: Sortir + heading: Finalitza la sessió d'OpenStreetMap + logout_button: Finalitza la sessió + title: Finalitza la sessió lost_password: email address: "Adreça de correu electrònic:" heading: Heu oblidat la contrasenya? - new password button: Restablir contrasenya + help_text: Introduïu l'adreça de correu electrònic que va utilitzar per registrar-se, us enviarem un enllaç a ella que pot utilitzar per restablir la contrasenya. + new password button: Restableix la contrasenya + notice email cannot find: Podria no trobar que l'e-mail adreçar, ho sento. + notice email on way: Trist que perdia:-(però un correu electrònic està en camí així pot restaurar això aviat. title: contrasenya perduda make_friend: + already_a_friend: Que ja són amics amb % {name}. + failed: Ho sentim, no afegir % {name} com un amic. success: "%{name} ara és el vostre amic." new: + confirm email address: "Confirmar adreça de correu electrònic:" confirm password: "Confirmeu la contrasenya:" + contact_webmaster: Si us plau, contactar amb el webmaster per organitzar un compte de ser creat - anem a provar i tractar amb la sol. licitud tan aviat com sigui possible. continue: Continua display name: "Nom en pantalla:" + display name description: El vostre usuari mostrat públicament. Això pot canviar més tard en les preferències. email address: "Adreça de correu:" + fill_form: Ompli el formulari i us enviarem un correu electrònic ràpid per activar el seu compte. + flash create success message: Gràcies per registrar-se. Hem enviat un bitllet de confirmació a % {email} i tan aviat com vostè confirmar el seu compte es podrà aconseguir d'assignació.

    Si utilitzeu un sistema que envia les sol·licituds de confirmació llavors si us plau fer segur whitelist webmaster@openstreetmap.org com som capaços de respondre a qualsevol sol·licituds de confirmació. heading: Crea un compte d'usuari + license_agreement: Quan vostè confirmar el seu compte necessita estar d'acord amb els termes de col. laborador. + no_auto_account_create: Per desgràcia no som actualment capaços de crear un compte per a vostè automàticament. + not displayed publicly: No mostraran públicament (vegeu la política de privacitat) + openid: "% {logo} OpenID:" + openid association: "

    El seu OpenID encara no està associat a un compte de OpenStreetMap.

    \n
      \n
    • Si sou nous a OpenStreetMap, si us plau, crear un compte nou utilitzant el formulari a continuació.
    • \n
    • \n Si ja teniu un compte, es pot connectar al seu compte\n utilitzant el seu nom d'usuari i contrasenya i llavors associat el compte\n amb el seu OpenID en les seves escenes d'usuari.\n
    • \n
    " + openid no password: Amb OpenID una contrasenya no és necessària, però algunes eines extres o servidor pot encara necessita un. password: "Contrasenya:" + terms accepted: Gràcies per a l'acceptació de les condicions de col. laborador nou! + terms declined: Lamentem que vostè ha decidit no acceptar els nous termes de col. laborador. Per a més informació, si us plau vegi aquesta pàgina de wiki. + title: Crear compte + use openid: Alternativament, utilitzi % {logo} OpenID per connectar-se no_such_user: + body: Ho sentim, no hi ha cap usuari amb el nom % (usuari). Si us plau, comproveu l'ortografia, o potser l'enllaç que es fa clic està malament. + heading: No existeix l'usuari % (usuari) title: No existeix aquest usuari popup: friend: Amic - your location: La teva situació + nearby mapper: L'Assignador proper + your location: La vostra ubicació + remove_friend: + not_a_friend: "% {name} no és un dels seus amics." + success: "% {name} s'ha suprimit dels teus amics." reset_password: confirm password: "Confirmeu la contrasenya:" flash changed: S'ha canviat la contrasenya. + flash token bad: No ha trobat que comproven token, l'URL potser? heading: Restablir la contrasenya per %{user} password: "Contrasenya:" - reset: Restablir contrasenya + reset: Restableix la contrasenya title: Restablir la contrasenya + set_home: + flash success: Localització de casa desat correctament + suspended: + body: "

    \n Ho sentim, el seu compte ha estat automàticament suspès a causa de\n l'activitat sospitosa.\n

    \n

    \n Aquesta decisió serà revisat per un administrador en breu, o\n es pot contactar amb el % {webmaster} si vostè desitja discutir això.\n

    " + heading: Compte suspès + title: Compte suspès + webmaster: per a administradors web terms: agree: D'acord + consider_pd: A més de l'acord de dalt, que considero el meu contribucions d'estar en el domini públic + consider_pd_why: què és això? decline: Declinar + guidance: "Informació per ajudar a entendre aquestes condicions: un resum llegible humà i algunes traduccions informals" + heading: Termes de col. laborador legale_names: france: França italy: Itàlia rest_of_world: Resta del món + legale_select: "Si us plau seleccioni el seu país de residència:" + read and accept: Si us plau llegeixi l'acord de sota i premeu el botó d'acord per confirmar que vostè accepta els termes d'aquest acord per les seves contribucions existents i futures. + title: Termes de col. laborador + you need to accept or decline: Si us plau, llegiu i llavors acceptar o disminució de les condicions de col. laborador nou per continuar. view: activate_user: activa aquest usuari add as friend: afegir com a amic ago: (fa %{time_in_words_ago}) - confirm: Confirmeu - create_block: boca aquest usuari + block_history: veure blocs va rebre + blocks by me: blocs per mi + blocks on me: blocs en mi + confirm: Confirma + confirm_user: confirma aquest usuari + create_block: bloca aquest usuari created from: "Creat a partir de:" deactivate_user: desactiva aquest usuari delete_user: Suprimeix aquest usuari @@ -1044,39 +1602,128 @@ ca: edits: modificacions email address: "Adreça de correu:" hide_user: amagar aquest usuari + if set location: Si establiu la vostra ubicació, un mapa força i matèria es mostrarà aquí. Podeu configurar la vostra ubicació de casa a la seva pàgina % {settings_link}. km away: "%{count}km de distància" + latest edit: "Últimes editar % {fa}:" m away: "%{count}m de distància" mapper since: "Mapejant des de:" + moderator_history: veure blocs donats my diary: el meu diari my edits: les meves edicions my settings: les meves preferències my traces: les meves traces nearby users: Altres usuaris propers + new diary entry: Nova entrada del diari + no friends: No has afegit cap amics encara. + no nearby users: Hi ha altres usuaris que admetre a Cartografia prop encara. oauth settings: configuració OAuth + remove as friend: Elimina com a amic role: administrator: Aquest usuari és administrador + grant: + administrator: Concedir accés d'administrador + moderator: Concedir accés de moderador moderator: Aquest usuari és moderador + revoke: + administrator: Revocar l'accés d'administrador + moderator: Revocar l'accés de moderador send message: enviar missatge settings_link_text: preferències + spam score: "Spam Puntuació:" status: "Estat:" traces: traces + unhide_user: Inamagui's d'aquest usuari user location: Ubicació de l'usuari your friends: Els vostres amics user_block: + blocks_by: + empty: "% {name} no ha fet cap blocs encara." + heading: Llista de blocs % {name} + title: Blocs % {name} + blocks_on: + empty: "% {name} no ha estat bloquejat encara." + heading: Llista de quadres a % {name} + title: Blocs en % {name} + create: + flash: Crear un bloc a l'usuari % {name}. + try_contacting: Si us plau, intentar contactar-se amb l'usuari abans de bloqueig d'ells i donar-los un termini raonable per respondre. + try_waiting: Si us plau tracti de donar l'usuari d'un termini raonable per respondre abans de bloqueig d'ells. + edit: + back: Mostra tots els blocs + heading: Bloc d'edició en % {name} + needs_view: L'usuari necessita connectar abans d'aquest bloc se suprimiran? + period: Quant de temps, a partir d'ara, l'usuari es bloqueja des de l'API per a. + reason: La raó per què està sent bloquejat % {name}. Si us plau, ser tan tranquil i tan raonable com sigui possible, donant amb tant detall com sigui possible sobre la situació. Tingueu en compte que no tots els usuaris de comprendre l'argot de la comunitat, així que si us plau, intenti utilitzar termes de l'home comú. + show: Mostra el bloc + submit: Bloc d'Actualització + title: Bloc d'edició en % {name} + filter: + block_expired: El bloc ja ha expirat i no es pot editar. + block_period: El període de blocatge ha de ser un dels valors seleccionables de la llista desplegable. + not_a_moderator: Vostè necessita ser un moderador per dur a terme aquesta acció. + helper: + time_future: Finalitza en % {time}. + time_past: Va acabar % {time} fa. + until_login: Activa fins que l'usuari es connecta. + index: + empty: No hi ha blocs s'han fet encara. + heading: Llista de quadres de l'usuari + title: Blocs de l'usuari + model: + non_moderator_revoke: Ha de ser un moderador per crear o un bloc d'actualització. + non_moderator_update: Ha de ser un moderador per crear o un bloc d'actualització. + new: + back: Veure tots els blocs + heading: Creació de bloc % {name} + needs_view: L'usuari necessita connectar abans d'aquest bloc se suprimirà + period: Quant de temps, a partir d'ara, l'usuari es bloqueja des de l'API per a. + reason: La raó per què està sent bloquejat % {name}. Si us plau, ser tan tranquil i tan raonable com sigui possible, donant amb tant detall com sigui possible sobre la situació, recordant que el missatge serà visible públicament. Tingueu en compte que no tots els usuaris de comprendre l'argot de la comunitat, així que si us plau, intenti utilitzar termes de l'home comú. + submit: Crear bloc + title: Creació de bloc % {name} + tried_contacting: Vaig posar en contacte amb l'usuari i els va demanar d'aturar. + tried_waiting: Li he donat una quantitat raonable de temps per a l'usuari per a respondre a aquestes comunicacions. + not_found: + back: Torna a l'índex + sorry: Ho sentim, que el bloc de l'usuari amb ID % {id} no s'ha pogut trobar. partial: confirm: N'esteu segur? creator_name: Creador - edit: Edició + display_name: S'ha blocat l'usuari + edit: Modifica + not_revoked: (no revocat) + reason: Motiu del blocatge + revoke: Revoca! + revoker_name: Revocat per show: Mostra - status: Estatus + status: Estat period: one: 1 hora other: "%{count} hores" + revoke: + confirm: Esteu segur que voleu revocar aquest bloc? + flash: Aquest bloc ha estat revocat. + heading: Revocació de bloc en % {block_on} % {block_by} + past: Aquest bloc va acabar % {time} fa i no pot ser revocat ara. + revoke: Revocar! + time_future: Aquest bloc va a acabar en % {time}. + title: Revocació de bloc en % {block_on} show: + back: Mostra tots els blocs confirm: N'esteu segur? edit: Edició + heading: "% {block_on} bloquejat per % {block_by}" + needs_view: L'usuari ha d'iniciar una sessió abans que es netegi el bloc. + reason: "Raó de bloc:" + revoke: Revoca-ho! + revoker: "Revoker:" show: Mostra status: Estat + time_future: Finalitza en % {time} + time_past: Va acabar % {time} fa + title: "% {block_on} bloquejat per % {block_by}" + update: + only_creator_can_edit: Només el moderador que ha creat aquest bloc pot editar-lo. + success: Bloc d'actualització. user_role: filter: already_has_role: L'usuari ja té un rol %{role}. @@ -1084,11 +1731,14 @@ ca: not_a_role: La cadena `%{role}' no és un rol vàlid. not_an_administrator: Només els administradors poden realitzar l'administració de rols de usuaris, i vosté no és un administrador. grant: - confirm: Confirmar + are_you_sure: Esteu segur que voleu concedir el paper "% {paper}" a l'usuari "% {name}"? + confirm: Confirma + fail: Podria concedeix paper "% {paper}" a l'usuari "% {name}". Si us plau, comproveu que l'usuari i el paper són vàlids. heading: Confirmi la concessió de rol title: Confirmi la concessió de rol revoke: are_you_sure: Esteu segur que voleu revocar el rol `%{role}' de l'usuari `%{name}'? - confirm: Confirmar + confirm: Confirma + fail: No s'ha pogut revocar el paper "% {paper}" des de l'usuari "% {name}". Si us plau, comproveu que l'usuari i el paper són vàlids. heading: Confirmar revocació de rol title: Confirmar revocació de rol diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 71e143bdc..84aafcbb2 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -278,8 +278,8 @@ cs: still_editing: (stále se upravuje) view_changeset_details: Zobrazit detaily sady změn changeset_paging_nav: - next: Následující » - previous: "« Předchozí" + next: Následující » + previous: « Předchozí showing_page: Zobrazuji stranu %{page} changesets: area: Oblast @@ -894,7 +894,8 @@ cs: map: base: cycle_map: Cyklomapa - noname: Nepojmenované ulice + mapquest: MapQuest Open + transport_map: Dopravní mapa site: edit_disabled_tooltip: Pro editaci mapy přejděte na větší měřítko edit_tooltip: Upravit mapu @@ -905,7 +906,7 @@ cs: layouts: community_blogs: Komunitní blogy community_blogs_title: Blogy členů komunity OpenStreetMap - copyright: Copyright & licence + copyright: Copyright & licence documentation: Dokumentace documentation_title: Dokumentace k projektu donate: Podpořte OpenStreetMap %{link} Fondu na upgrady hardwaru @@ -1366,8 +1367,8 @@ cs: trace_optionals: tags: Å títky trace_paging_nav: - next: Následující » - previous: "« Předchozí" + next: Následující » + previous: « Předchozí showing_page: Zobrazuji stranu %{page} view: delete_track: Smazat tuto stopu diff --git a/config/locales/da.yml b/config/locales/da.yml index bacf6c2c4..de3c7f7e4 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -6,6 +6,7 @@ # Author: Freek # Author: Hylle # Author: OleLaursen +# Author: The real emj # Author: Winbladh da: activerecord: @@ -271,8 +272,8 @@ da: still_editing: (redigerer stadig) view_changeset_details: Vis detaljer for ændringssæt changeset_paging_nav: - next: Næste » - previous: "« Forrige" + next: Næste » + previous: « Forrige showing_page: Viser side %{page} changesets: area: OmrÃ¥de @@ -886,7 +887,6 @@ da: map: base: cycle_map: Cykelkort - noname: IntetNavn site: edit_disabled_tooltip: Zoom ind for at rette kortet edit_tooltip: Ret kortet @@ -897,7 +897,7 @@ da: layouts: community_blogs: Blogs fra bidragydere community_blogs_title: Blogs fra medlemmer af OpenStreetMap-fællesskabet - copyright: Ophavsret & licens + copyright: Ophavsret & licens documentation: Dokumentation documentation_title: Dokumentation for projektet donate: Støt OpenStreetMap med en %{link} til Hardware-upgradefonden. @@ -1301,8 +1301,8 @@ da: trace_optionals: tags: Egenskaber trace_paging_nav: - next: Næste » - previous: "« Forrige" + next: Næste » + previous: « Forrige showing_page: Viser side %{page} view: delete_track: Slet dette spor diff --git a/config/locales/de-AT.yml b/config/locales/de-AT.yml new file mode 100644 index 000000000..53a08d1f8 --- /dev/null +++ b/config/locales/de-AT.yml @@ -0,0 +1,2 @@ +de-AT: + dummy: dummy diff --git a/config/locales/de-CH.yml b/config/locales/de-CH.yml new file mode 100644 index 000000000..ea1f5574e --- /dev/null +++ b/config/locales/de-CH.yml @@ -0,0 +1,2 @@ +de-CH: + dummy: dummy diff --git a/config/locales/de.yml b/config/locales/de.yml index c26bcb9ea..47799b9e3 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -8,6 +8,7 @@ # Author: Candid Dauth # Author: ChrisiPK # Author: CygnusOlor +# Author: Daswaldhorn # Author: Fujnky # Author: Grille chompa # Author: Holger @@ -18,6 +19,7 @@ # Author: McDutchie # Author: Michi # Author: Pill +# Author: Purodha # Author: Raymond # Author: Str4nd # Author: The Evil IP address @@ -59,8 +61,8 @@ de: pass_crypt: Passwort models: acl: Liste für Zugangskontrolle - changeset: Changeset - changeset_tag: Changeset-Tag + changeset: Änderungssatz + changeset_tag: Änderungssatz-Tag country: Staat diary_comment: Blog-Kommentar diary_entry: Blogeintrag @@ -99,14 +101,14 @@ de: need_to_see_terms: Dein Zugriff auf die API wurde vorübergehend ausgesetzt. Bitte melde Dich in Deinem Benutzerkonto an, um die „Bedingungen für Mitwirkende“ einzusehen. Du musst nicht einverstanden sein, aber Du musst sie gesehen haben. browse: changeset: - changeset: "Changeset: %{id}" - changesetxml: Changeset XML + changeset: "Änderungssatz: %{id}" + changesetxml: Änderungssatz-XML download: Als %{changeset_xml_link} oder %{osmchange_xml_link} herunterladen. feed: - title: Changeset %{id} - title_comment: Changeset %{id} - %{comment} + title: "Änderungssatz: %{id}" + title_comment: Änderungssatz %{id} - %{comment} osmchangexml: osmChange XML - title: Changeset + title: Änderungssatz changeset_details: belongs_to: "Erstellt von:" bounding_box: "Bereich:" @@ -122,7 +124,7 @@ de: has_ways: one: "Enthält folgenden Weg:" other: "Enthält folgende %{count} Wege:" - no_bounding_box: Für dieses Changeset wurde kein Bereich gespeichert. + no_bounding_box: Für diesen Änderungssatz wurde kein Bereich gespeichert. show_area_box: Bereichsgrenze anzeigen common_details: changeset_comment: "Kommentar:" @@ -130,7 +132,7 @@ de: deleted_by: "Gelöscht von:" edited_at: "Bearbeitet am:" edited_by: "Bearbeitet von:" - in_changeset: "Im Changeset:" + in_changeset: "Im Änderungssatz:" version: "Version:" containing_relation: entry: Relation %{relation_name} @@ -147,14 +149,14 @@ de: node: Knoten auf größerer Karte relation: Relation auf größerer Karte way: Weg auf größerer Karte - loading: Laden … + loading: Am Laden … navigation: all: - next_changeset_tooltip: Nächstes Changeset + next_changeset_tooltip: Nächster Änderungssatz next_node_tooltip: Nächster Knoten next_relation_tooltip: Nächste Relation next_way_tooltip: Nächster Weg - prev_changeset_tooltip: Vorheriges Changeset + prev_changeset_tooltip: Vorheriger Änderungssatz prev_node_tooltip: Vorheriger Knoten prev_relation_tooltip: Vorherige Relation prev_way_tooltip: Vorheriger Weg @@ -179,12 +181,12 @@ de: node_history_title: "Knoten-Chronik: %{node_name}" view_details: Detailseite anzeigen not_found: - sorry: Wir konnten den %{type} mit der Nummer %{id} leider nicht finden. Du hast dich möglicherweise vertippt oder bist einem ungültigem Link gefolgt. + sorry: "%{type} mit der Nummer %{id} konnte leider nicht gefunden werden. Du hast dich möglicherweise vertippt oder bist einem ungültigem Link gefolgt." type: - changeset: Menge von Änderungen - node: Knoten - relation: Relation - way: Weg + changeset: Der Änderungssatz + node: Der Knoten + relation: Die Relation + way: Der Weg paging_nav: of: von showing_page: Zeige Seite @@ -222,7 +224,7 @@ de: history_for_feature: Chronik für [[feature]] load_data: Daten laden loaded_an_area_with_num_features: Du hast einen Bereich geladen, der [[num_features]] Elemente enthält. Manche Browser haben Probleme bei der Darstellung einer so großen Datenmenge. Normalerweise ist es am besten, nur weniger als 100 Elemente zu betrachten; alles andere macht deinen Browser langsam bzw. lässt ihn nicht mehr auf Eingaben reagieren. Wenn du sicher bist, dass du diese Daten darstellen willst, klicke auf „Daten laden“ unten. - loading: Laden … + loading: Am Laden … manually_select: Einen anderen Kartenausschnitt manuell auswählen object_list: api: Diesen Bereich von der API abfragen @@ -253,12 +255,12 @@ de: tag: Erläuterungsseite für das %{key}=%{value}-Tag wikipedia_link: Artikel zu %{page} in der Wikipedia timeout: - sorry: Entschuldigung, es dauerte zu lange die Daten für den/die %{type} mit der ID %{id} abzurufen. + sorry: Entschuldigung, es dauerte zu lange die Daten für %{type} mit der ID %{id} abzurufen. type: - changeset: Änderungssatz - node: Knoten - relation: Relation - way: Weg + changeset: den Änderungssatz + node: den Knoten + relation: die Relation + way: den Weg way: download: "%{download_xml_link}, %{view_history_link} oder %{edit_link}" download_xml: Als XML herunterladen @@ -286,10 +288,10 @@ de: no_edits: (keine Bearbeitung) show_area_box: Bereich anzeigen still_editing: (in Bearbeitung) - view_changeset_details: Details des Changesets + view_changeset_details: Details des Änderungssatzes changeset_paging_nav: - next: Nächste » - previous: "« Vorige" + next: Nächste » + previous: « Vorige showing_page: Seite %{page} changesets: area: Bereich @@ -302,16 +304,16 @@ de: description_bbox: Letzte Änderungen in %{bbox} description_user: Letzte Änderungen von %{user} description_user_bbox: Letzte Änderungen von %{user} in %{bbox} - heading: Changesets - heading_bbox: Changesets - heading_user: Changesets - heading_user_bbox: Changesets - title: Changesets - title_bbox: Changesets in %{bbox} - title_user: Changesets von %{user} - title_user_bbox: Changesets von %{user} in %{bbox} + heading: Änderungssätze + heading_bbox: Änderungssätze + heading_user: Änderungssätze + heading_user_bbox: Änderungssätze + title: Änderungssätze + title_bbox: Änderungssätze in %{bbox} + title_user: Änderungssätze von %{user} + title_user_bbox: Änderungssätze von %{user} in %{bbox} timeout: - sorry: Es hat leider zu lange gedauert, die von dir angeforderten Changesets abzurufen. + sorry: Es hat leider zu lange gedauert, die von dir angeforderten Änderungssätze abzurufen. diary_entry: diary_comment: comment_from: Kommentar von %{link_user} am %{comment_created_at} @@ -451,7 +453,7 @@ de: zero: weniger als 1 km results: more_results: Mehr Treffer - no_results: Keine Ergebnisse + no_results: Keine Ergebnisse gefunden search: title: ca_postcode: Suchergebnisse von Geocoder.CA @@ -903,7 +905,8 @@ de: map: base: cycle_map: Radfahrerkarte - noname: Straßen ohne Name + mapquest: MapQuest Open + transport_map: Verkehrskarte site: edit_disabled_tooltip: Reinzoomen zum Editieren der Karte edit_tooltip: Karte bearbeiten @@ -1080,9 +1083,9 @@ de: hopefully_you_1: Jemand (hoffentlich du) möchte seine E-Mail-Adresse bei hopefully_you_2: "%{server_url} zu %{new_address} ändern." friend_notification: - befriend_them: Du kannst sie / ihn unter %{befriendurl} ebenfalls als Freund hinzufügen. + befriend_them: Du kannst sie/ihn unter %{befriendurl} ebenfalls als Freund hinzufügen. had_added_you: "%{user} hat dich als Freund hinzugefügt." - see_their_profile: Du kannst sein / ihr Profil unter %{userurl} ansehen. + see_their_profile: Du kannst sein/ihr Profil unter %{userurl} ansehen. subject: "[OpenStreetMap] %{user} hat dich als Freund hinzugefügt" gpx_notification: and_no_tags: und ohne Tags. @@ -1149,12 +1152,12 @@ de: wiki_signup_url: http://wiki.openstreetmap.org/index.php?title=Special:Userlogin&type=signup&returnto=Hauptseite oauth: oauthorize: - allow_read_gpx: Deine privaten GPS-Tracks auszulesen + allow_read_gpx: Deine privaten GPS-Tracks auslesen allow_read_prefs: Deine Benutzereinstellungen zu lesen allow_to: "Erlaube der Anwendung:" allow_write_api: Die OSM-Datenbank zu ändern allow_write_diary: Blogeinträge und Kommentare zu schreiben und Freunde einzutragen - allow_write_gpx: GPS-Tracks hochzuladen + allow_write_gpx: GPS-Tracks hochladen allow_write_prefs: Deine Benutzereinstellungen zu verändern request_access: "Die Anwendung %{app_name} möchte auf dein OpenStreetMap-Konto %{user} zugreifen. Bitte entscheide, ob du der Anwendung die folgenden Berechtigungen gewähren möchtest. Du kannst ihr entweder alle oder einige der folgenden Berechtigungen gewähren:" revoke: @@ -1177,41 +1180,41 @@ de: callback_url: Callback-URL name: Name requests: "Die Benutzer um die folgenden Dinge um Erlaubnis bitten:" - required: Erforderlich - support_url: Support URL - url: Applikations URL + required: erforderlich + support_url: Support-URL + url: Applikations-URL index: application: Anwendungsname - issued_at: Ausgestellt Am - list_tokens: "Die folgenden Token wurde an Applikationen in Ihrem Namen vergeben:" + issued_at: Ausgestellt am + list_tokens: "Die folgenden Token wurde an Anwendungen in Ihrem Namen vergeben:" my_apps: Meine Client-Anwendungen my_tokens: Meine autorisierten Anwendungen no_apps: Wenn du mit einer Anwendung gerne den %{oauth}-Standard verwenden würdest, musst du sie hier registrieren. register_new: Anwendung registrieren registered_apps: "Du hast die folgenden Client-Anwendungen registriert:" revoke: Widerrufen! - title: Meine OAuth Details + title: Meine OAuth-Details new: submit: Registrieren title: Eine neue Anwendung registrieren not_found: sorry: Es tut mir leid, aber %{type} wurde nicht gefunden. show: - access_url: "Zugriffstoken URL:" + access_url: "Zugriffstoken-URL:" allow_read_gpx: Zugriff auf ihre privaten GPS-Tracks. allow_read_prefs: Ihre Einstellungen auslesen. allow_write_api: Karte ändern allow_write_diary: Tagebucheinträge und -kommentare schreiben und Freunde hinzufügen. allow_write_gpx: GPS-Spuren hochladen allow_write_prefs: Nutzereinstellungen verändern. - authorize_url: "Berechtigungs URL:" + authorize_url: "Berechtigungs-URL:" edit: Details bearbeiten key: "Schlüssel:" requests: "Die Benutzer werden um Folgendes um Erlaubnis gebeten:" secret: "Geheimnis:" support_notice: Wir unterstützen HMAC-SHA1 (empfolen) und Reintext im SSL-Modus. - title: OAuth Details für %{app_name} - url: "Tokenanfrage URL:" + title: OAuth-Details für %{app_name} + url: "Tokenanfrage-URL:" update: flash: Client-Informationen erfolgreich aktualisiert site: @@ -1248,7 +1251,7 @@ de: - Terminal bridge: Dicker Rand = Brücke bridleway: Reitweg - brownfield: Brachland + brownfield: Industriebrachfläche building: Besonderes Gebäude byway: Nebenweg cable: @@ -1343,7 +1346,7 @@ de: list: public_traces: Öffentliche GPS-Tracks public_traces_from: Öffentliche GPS-Tracks von %{user} - tagged_with: " Gekennzeichnet mit %{tags}" + tagged_with: " gekennzeichnet mit %{tags}" your_traces: Eigene GPS-Tracks make_public: made_public: veröffentlichter Track @@ -1370,7 +1373,7 @@ de: private: PRIVAT public: ÖFFENTLICH trace_details: Track-Details - trackable: TRACK + trackable: VERFOLGBAR view_map: Karte anzeigen trace_form: description: "Beschreibung:" @@ -1433,20 +1436,20 @@ de: flash update success confirm needed: Benutzerinformationen erfolgreich aktualisiert. Du erhältst eine E-Mail, um deine neue E-Mail-Adresse zu bestätigen. home location: "Standort:" image: "Bild:" - image size hint: (quadratische Bilder mit zumindes 100x100 funktionieren am Besten) + image size hint: (quadratische Bilder mit zumindest 100x100 Pixel funktionieren am besten) keep image: Aktuelles Bild beibehalten latitude: "Breitengrad:" longitude: "Längengrad:" make edits public button: Alle meine Bearbeitungen öffentlich machen my settings: Eigene Einstellungen - new email address: "Neue E-Mail Adresse:" + new email address: "Neue E-Mail-Adresse:" new image: Bild einfügen no home location: Du hast noch keinen Standort angegeben. openid: link: http://wiki.openstreetmap.org/wiki/OpenID link text: Worum handelt es sich? openid: "OpenID:" - preferred editor: "Bevorzugten Editor:" + preferred editor: "Bevorzugter Editor:" preferred languages: "Bevorzugte Sprachen:" profile description: "Profil-Beschreibung:" public editing: @@ -1461,7 +1464,7 @@ de: text: Im Moment sind deine Beiträge anonym und man kann dir weder Nachrichten senden noch deinen Wohnort sehen. Um sichtbar zu machen, welche Arbeit von dir stammt, und um kontaktierbar zu werden, klicke auf den Button unten. Seit Version 0.6 der API aktiv ist, können unangemeldete Benutzer die Karte nicht mehr bearbeiten (Warum?).
    • Deine E-Mail-Adresse wird bei Verlassen des anonymen Status nicht veröffentlicht.
    • Die Aktion kann nicht rückgängig gemacht werden. Für neu registrierte Benutzer besteht die Möglichkeit des anonymen Benutzerkontos nicht mehr.
    replace image: Aktuelles Bild austauschen return to profile: Zurück zum Profil - save changes button: Speichere Änderungen + save changes button: Änderungen speichern title: Benutzerkonto bearbeiten update home location on click: Standort bei Klick auf die Karte aktualisieren? confirm: @@ -1650,7 +1653,7 @@ de: new diary entry: Neuer Blogeintrag no friends: Du hast bis jetzt keine Freunde hinzugefügt. no nearby users: Es gibt bisher keine Benutzer, die einen Standort in deiner Nähe angegeben haben. - oauth settings: oauth Einstellungen + oauth settings: OAuth-Einstellungen remove as friend: Als Freund entfernen role: administrator: Dieser Benutzer ist ein Administrator @@ -1663,7 +1666,7 @@ de: moderator: Moderator-Rechte entziehen send message: Nachricht senden settings_link_text: Einstellungen - spam score: "Spam Bewertung:" + spam score: "Spam-Bewertung:" status: "Status:" traces: Tracks unhide_user: Benutzer nicht mehr verstecken diff --git a/config/locales/dsb.yml b/config/locales/dsb.yml index 28d7556ae..988502922 100644 --- a/config/locales/dsb.yml +++ b/config/locales/dsb.yml @@ -76,6 +76,7 @@ dsb: cookies_needed: Zda se, až cookieje su znjemóžnjone - pÅ¡osym zmóžni cookieje w swójom wobglědowaku, nježli až pókÅ¡acujoÅ¡. setup_user_auth: blocked: Twój pśistup k API jo se zablokěrował. PÅ¡osym pśizjaw se do webpówjercha, aby wěcej zgónił. + need_to_see_terms: Twój pśistup na API jo nachylu wusajźony. PÅ¡osym pśizjaw se k webpówjerchoju, aby se wužywarske wuměnjenja woglědał. NjetrjebaÅ¡ zwóliś do nich, musyÅ¡ se je jano woglědaś. browse: changeset: changeset: "Sajźba změnow: %{id}" @@ -111,6 +112,8 @@ dsb: show_area_box: Wobłukowy kašćik pokazaś common_details: changeset_comment: "Komentar:" + deleted_at: "WulaÅ¡owany:" + deleted_by: "WulaÅ¡owany wót:" edited_at: "Wobźěłany:" edited_by: "Wobźěłany wót:" in_changeset: "W sajźbje změnow:" @@ -120,6 +123,11 @@ dsb: entry_role: Relacija %{relation_name} (ako %{relation_role}) map: deleted: WulaÅ¡owany + edit: + area: Wobcerk wobźěłaś + node: Suk wobźěłaś + relation: Relaciju wobźěłaś + way: Puś wobźěłaś larger: area: Wurězk na wětÅ¡ej kórśe pokazaś node: Suk na wětÅ¡ej kórśe pokazaś @@ -196,6 +204,7 @@ dsb: details: Drobnostki drag_a_box: Wobłuk nad kórtu rozćěgnuś, aby se wurězk wubrał edited_by_user_at_timestamp: Wobźěłany wót [[user]] [[timestamp]] + hide_areas: Wobcerki schowaś history_for_feature: Historija za [[feature]] load_data: Daty zacytaś loaded_an_area_with_num_features: "Sy zacytał wurězk, kótaryž wopśimujo [[num_features]] elementow. Někotare wobglědowaki maju śěžkosći pśi zwobraznjowanju takeje kopice datow. ZwětÅ¡ego wobglědowaki źěłaju nejlěpjej pśi zwobraznjowanju mjenjej ako 100 elementow naraz: howac twój wobglědowak spomałšujo se abo samo wěcej njereagěrujo. Jolic sy se wěsty, až coÅ¡ toś te daty zwobrazniś, móžoÅ¡ dołojce na tłocaÅ¡k kliknuś." @@ -218,6 +227,7 @@ dsb: node: Suk way: Puś private_user: priwatny wužywaŕ + show_areas: Wobcerki pokazaś show_history: Historiju pokazaś unable_to_load_size: "Njejo móžno zacytaś: Wjelikosć wobłuka [[bbox_size]] jo pśewjelika (musy mjeńša ako %{max_bbox_size} byś)" wait: Cakaś... @@ -266,8 +276,8 @@ dsb: still_editing: (wobźěłujo se) view_changeset_details: Drobnostki sajźbow změnow pokazaś changeset_paging_nav: - next: Pśiducy » - previous: "« PjerwjejÅ¡ny" + next: Pśiducy » + previous: « PjerwjejÅ¡ny showing_page: Pokazujo se bok %{page} changesets: area: Wurězk @@ -883,7 +893,8 @@ dsb: map: base: cycle_map: Kórta za kolesowarjow - noname: ŽednoMě + mapquest: MapQuest Open + transport_map: Wobchadowa kórta site: edit_disabled_tooltip: Za wobźěłowanje kórty powětÅ¡yś edit_tooltip: Kórtu wobźěłaś @@ -922,7 +933,8 @@ dsb: zero: Twój postowy kašćik njewopśimujo žedne njepśecytane powěsći intro_1: OpenStreetMap jo licho wobźěłujobna kórta cełego swěta. Jo se za luźi ako ty napórała. intro_2: OpenStreetMap śi dowólujo, geografiske daty wóte wÅ¡uźi na zemi zgromadnje se woglědaś, wobźěłaś a wužywaś. - intro_3: Hostowanje OpenStreetMap pśijaznosću pódpěra se wót %{ucl} a %{bytemark}. Druge pódpěrarje projekta su w %{partners} nalicone. + intro_3: Hostowanje serwerow OpenStreetMap pśijaznosću pódpěra se wót %{ucl}, %{ic} a %{bytemark}. Druge pódpěrarje projekta su w %{partners} nalicone. + intro_3_ic: Imperial College London intro_3_partners: wiki license: title: Daty OpenStreetMap licencěruju se pód licencu Creative Commons Attribution-Share Alike 2.0 Generic @@ -939,6 +951,7 @@ dsb: osm_read_only: Datowa banka OpenStreetMap jo tuchylu w modusu "Jano cytaś", dokulaž se wažne źěło za wótglědowanje datoweje banki pśewjedujo. sign_up: registrěrowaś sign_up_tooltip: Konto za wobźěłowanje załožyś + sotm2011: Dojź ku konference OpenStreetMap 2011, "the State of the Map", 9 - 11. septembra w Denverje! tag_line: Licha wikikórta swěta user_diaries: Dnjowniki user_diaries_tooltip: Wužywarske dnjowniki cytaś @@ -953,7 +966,7 @@ dsb: english_link: engelskim originalom text: W paźe konflikta mjazy pśełožonym bokom a %{english_original_link}, engelski bok ma prědnosć měś title: Wó toś tom pśełožku - legal_babble: "

    Awtorske pšawo a licenca

    \n

    \n OpenStreetMap jo zjawne daty, licencěrowane pód licencu Creative\n Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Móžoš naše kórty a daty kopěrowaś, rozdźělić, pśenjasć a pśiměriś, tak dłujko ako naspomnjejoš OpenStreetMap a jich pśinosowarjow. Jolic změnjaš naše kórty abo daty abo zepěraš se na nje, móžoš wuslědk jano pód teju samkeju licencu rozdźěliś. Dopołny pšawniski kod wujasnjujo twóje pšawa a zagronitosći.\n

    \n\n

    Kak OpenStreetMap naspomnjeś

    \n

    \n Jolic wužywaÅ¡ kórtowe wobraze z OpenStreetMap, pominamy, až twójo źěkowanje zni nanejmjenjej “© OpenStreetMap contributors, CC-BY-SA”. Jolic jano wužywaÅ¡ kórtowe daty, pominamy “Map data © OpenStreetMap contributors, CC-BY-SA”.\n

    \n

    \n Gaž jo móžno, OpenStreetMap měł wótkaz do http://www.openstreetmap.org/\n a CC-BY-SA to http://creativecommons.org/licenses/by-sa/2.0/ měś. Jolic wužywaÅ¡ medij, źož wótkaze njejsu móžno (na pś. śišćane źěło), naraźujomy, až pokazujoÅ¡ swójich cytarjow na www.openstreetmap.org (snaź pśez wuměnjenje ‘OpenStreetMap’ pśez półnu adresu) a na www.creativecommons.org.\n

    \n\n

    Dalšne informacije

    \n

    \n Cytaj wěcej wó wužywanju našych datow Ceste pšawniske pšašanja.\n

    \n

    \n Pśinosowarjow OSM dopominaju, až njepśidawaju nigda daty ze žrědło, kótarež su pśez awtorske pšawo šćitane, (na pś. z Google Maps abo z śišćanych kórtow) bźez eksplicitnego dowolenja awtorow.\n

    \n

    \n Lěcrownož OpenStreetMap jo zjawne daty, njamóžomy dermotny kórtowy API za wuwiwarjow tśeśich pobitowaś.\n\n Glědaj na Pšawidła za wužywanje API,\n Pšawidła za wužywanje polow\n a Pšawidła za wužywanje Nominatim.\n

    \n\n

    Naše pśinosowarje

    \n

    \n NaÅ¡a licenca CC-BY-SA pomina, až “daÅ¡ spócetnemu awtoroju źěk, pśiměrjony medijeju abo srědkoju, kótaryž wužywaÅ¡”. Jadnotliwe kartěrowarje OSM njepominaju pśidatne źěkowanje k “OpenStreetMap contributors”, ale gaž se daty zapśimuju z narodnego kartěrowańskego pśedewześa abo z drugego wuznamnego žrědła w OpenStreetMap, jo pśiměrjone, se jim pśez direktne pśewześe jich źěkowanja abo pśez wótkazowanje na njo na toś tym boku źěkowaś.\n

    \n\n\n\n
      \n
    • Australska: Wopśimujo pśedměsćańske daty na zakłaźe datow Australian Bureau of Statistics (Awstralski amt za statistiku).
    • \n
    • Kanada: Wopśimujo daty z GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), a StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Nowoseelandska: Wopśimujo daty ze žrědłow wót Land Information New Zealand. Awtorske pÅ¡awo wuměnjone.
    • \n
    • Pólska: Wopśimujo daty z UMP-pcPL maps. Awtorske pÅ¡awo pśinosowarjow UMP-pcPL.
    • \n
    • Zjadnośone kralojstwo: Wopśimujo daty z Ordnance\n Survey (Amtske rozměrjenje kraja) © Awtorske pÅ¡awo a p3awo za datowe banki 2010.
    • \n
    \n\n

    \n Zapśijimanje datow do OpenStreetMap njegroni, až póbitowaŕ originalnych datow pśipóznawa OpenStreetMap, dawa někaku garantiju abo pśewzejo rukowanje.\n

    " + legal_babble: "

    Awtorske pšawo a licenca

    \n

    \nOpenStreetMap wobstoj ze zjawnych datow, licencěrowanych pód licencu Creative Commons Attribution-ShareAlike 2.0 (CC-BY-SA).

    Móžoš naše kórty a daty kopěrowaś, rozdźěliś, pśenjasć a pśiměriś, tak dłujko ako naspomnjejoš OpenStreetMap a jich sobustatkujucych. Jolic změnijoš naše kórty abo daty abo zepěraš se na nje, móžoš wuslědk jano pód teju sameju licencu rozdźěliś. Dopołny pšawniski code wujasnjujo twóje pšawa a zagronitosći.

    \n\n

    Kak naspomnjeś awtorstwo OpenStreetMap

    \n

    Jolic wužywaÅ¡ kórtowe wobraze z OpenStreetMap, pominamy se, až nanejmjenjej pódawaÅ¡ “© OpenStreetMap a sobustatkujucych, CC-BY-SA”. Jolic wužywaÅ¡ jano kórtowe daty, musyÅ¡ “kórtowe daty © OpenStreetMap a sobustatkujucych, CC-BY-SA” pódaś.

    Źož jo móžno, OpenStreetMap by měł wótkaz do http://www.openstreetmap.org/ a CC-BY-SA do http://creativecommons.org/licenses/by-sa/2.0/ měś. Jolic wužywaš medij, źož wótkaze njejsu móžno (na pś. wuśišćane źěło), naraźujomy, až pokazujoš swójich cytarjow na www.openstreetmap.org a na www.creativecommons.org.

    \n\n

    Dalšne informacije

    \n

    Cytaj wěcej wó wužywanju našych datow Ceste pšawniske pšašenja.

    Sobustatkujucych OSM napominamy, až njedodawaju nigda daty ze žrědłow, kótarež su pśez awtorske pšawo šćitane (na pś. z Google Maps abo z wuśišćanych kórtow) bźez wurazneje dowólnosći awtorow.

    Lěcrownož OpenStreetMap wobstoj ze zjawnych datow, njamóžomy dermotny kórtowy API za wuwiwarjow třeśich póbitowaś. \n\nGlědaj naše pšawidła za wužywanje API, Pšawidła za wužywanje pólow a Pšawidła za wužywanje Nominatim.

    \n\n

    Naše sobustatkujuce

    \n

    NaÅ¡a licenca CC-BY-SA pomina se, až “dajoÅ¡ spócetnemu awtoroju źěk pśiměrjonemu medijoju abo srědkoju, kótaryž wužywaÅ¡”. Jadnotliwe kartěrowarje OSM njepominaju se pśidatne źěkowanje k “sobustatkujucym OpenStreetMap”, ale gaž se daty z narodnego kartěrowańskego předewześa abo z drugego wuznamnego žrědła w OpenStreetMap zapśimuju, jo pśiměrjone, jim pśez direktne pśewzeće jich źěkowanja abo pśez wótkazowanje na njo na toś tom boku wuźěkowaś.

    \n\n \n
    • Awstralska: Wopśimujo pśedměsćańske daty na zakłaźe datow awstralskego amta za statistiku (Australian Bureau of Statistics).
    • \n
    • Awstriska: Wopśimujo daty z Stadt Wien pód CC-BY.
    • \n
    • Kanada: Wopśimujo daty z GeoBase®, GeoGratis (© Department of Natural Resources Canada), CanVec (© Department of Natural Resources Canada), a StatCan (Geography Division, Statistics Canada).
    • \n
    • Francojska: Wopśimujo daty z Direction Générale des Impôts.
    • \n
    • Nowoseelandska: Wopśimujo daty ze žrědłow wót Land Information New Zealand. Awtorske pÅ¡awo wuměnjone.
    • \n
    • Pólska: Wopśimujo daty z UMP-pcPL maps. Awtorske pÅ¡awo sobustatkujucych UMP-pcPL.
    • \n
    • Zjadnośone kralojstwo: Wopśimujo daty z Ordnance Survey (Amtske rozměrjenje kraja) © Awtorske pÅ¡awo a pÅ¡awo za datowe banki 2010.
    \n\n

    Zapśimowanje datow do OpenStreetMap njegroni, až póbitowaŕ originalnych datow pśipóznawa OpenStreetMap, dawa někaku garantiju abo pśewzejo rukowanje.

    " native: mapping_link: kartěrowanje zachopiś native_link: dolnoserbskej wersiji @@ -1117,7 +1130,7 @@ dsb: allow_write_diary: zapiski dnjownika a komentary spisaś a pśijaśelow zapisaś allow_write_gpx: GPS-slědy nagraś. allow_write_prefs: twóje wužywarske nastajenja změniś - request_access: "Aplikacija %{app_name} pÅ¡osy wó pśistup na twójo konto. PÅ¡osym pśeglědaj, lěc aplikacija móžo slědujuce pÅ¡awa měś. MóžoÅ¡ ze slědujucych pÅ¡awow jadne pÅ¡awo abo teke někotare z nich wubraś:" + request_access: Aplikacija %{app_name} pÅ¡osy wó pśistup na twójo konto, %{user}. PÅ¡osym pśeglědaj, lěc aplikacija móžo slědujuce pÅ¡awa měś. MóžoÅ¡ ze slědujucych pÅ¡awow jadne pÅ¡awo abo teke někotare z nich wubraś. revoke: flash: Sy token za %{application} anulěrował. oauth_clients: @@ -1182,6 +1195,7 @@ dsb: no_iframe_support: Twój wobglědowak njepódpěrujo HTML-elementy iframe, kótarež su trěbne za toś tu funkciju. not_public: Njejsy swóje změny ako zjawne markěrował. not_public_description: NjamóžoÅ¡ wěcej kórtu wobzěłaś, snaźkuli cyniś to rowno. MóžoÅ¡ swóje změny na swójom %{user_page} ako zjawne markěrowaś. + potlatch2_not_configured: Potlach 2 njejo se konfigurěrował - pÅ¡osym glědaj http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 za dalÅ¡ne informacije potlatch2_unsaved_changes: Sy njeskładowane změny. (Aby je w Potlatch 2 składował, klikni na "Składowaś".) potlatch_unsaved_changes: MaÅ¡ njeskłaźone změny. (Aby składował w Potlatch, ty by dejał aktualny puś abo dypk wótwóliś, jolic wobźěłujoÅ¡ w livemodusu, abo klikni na Składowaś, jolic maÅ¡ tłocaÅ¡k Składowaś.) user_page_link: wužywarskem boku @@ -1333,13 +1347,13 @@ dsb: trackable: SLĚDUJOBNY view_map: Kórtu pokazaś trace_form: - description: Wopisanje + description: "Wopisanje:" help: Pomoc - tags: Atributy + tags: "Atributy:" tags_help: pśez komu wótźělony upload_button: Nagraś - upload_gpx: GPX-dataju nagraś - visibility: Widobnosć + upload_gpx: "GPX-dataju nagraś:" + visibility: "Widobnosć:" visibility_help: Co to groni? trace_header: see_all_traces: WÅ¡ykne slědy pokazaś @@ -1349,8 +1363,8 @@ dsb: trace_optionals: tags: Atributy trace_paging_nav: - next: Pśiducy » - previous: "« PjerwjejÅ¡ny" + next: Pśiducy » + previous: « PjerwjejÅ¡ny showing_page: Pokazujo se bok %{page} view: delete_track: Toś tu ceru wulaÅ¡owaś @@ -1401,6 +1415,10 @@ dsb: new email address: "Nowa e-mailowa adresa:" new image: Wobraz pśidaś no home location: Njejsy swóje bydlišćo zapódał. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: Co to jo? + openid: "OpenID:" preferred editor: "Preferěrowany editor :" preferred languages: "Preferěrowane rěcy:" profile description: "Profilowe wopisanje:" @@ -1463,12 +1481,37 @@ dsb: lost password link: Sy swójo gronidło zabył? new to osm: Nowy w OpenStreetMap? notice: Wěcej wó pśichodnej licencnej změnje OpenStreetMap (pśełožki) (diskusija) + openid: "%{logo} OpenID:" + openid invalid: Bóžko zda se, až twój OpenID jo njepłaśiwy + openid missing provider: Bóžko njejsmy mógli z twójim OpenID-póbitowarjom zwězaś + openid_logo_alt: Z OpenID se pśizjawiś + openid_providers: + aol: + alt: Z OpenID z AOL pśizjawiś + title: Z AOL pśizjawiś + google: + alt: Z OpenID z Google pśizjawiś + title: Z Google pśizjawiś + myopenid: + alt: Z OpenID z myOpenID pśizjawiś + title: Z myOpenID pśizjawiś + openid: + alt: Z OpenID-URL se pśizjawiś + title: Z OpenID se pśizjawiś + wordpress: + alt: Z OpenID z Wordpress pśizjawiś + title: Z Wordpress pśizjawiś + yahoo: + alt: Z OpenID z Yahoo pśizjawiś + title: Z Yahoo pśizjawiś password: "Gronidło:" register now: Něnto registrěrowaś remember: "Spomnjeś se:" title: Pśizjawjenje to make changes: Aby daty OpenStreetMap změnił, musyÅ¡ konto měś. webmaster: webmejstaŕ + with openid: "Alternatiwnje móžoÅ¡ swój OpenID za pśizjawjenje wužywaś:" + with username: "MaÅ¡ južo konto pla OpenStreetMap? PÅ¡osym pśizjaw se ze swójim wužywarskim mjenim a gronidłom:" logout: heading: Z OpenStreetMap se wótzjawiś logout_button: Wótzjawjenje @@ -1499,9 +1542,14 @@ dsb: license_agreement: Z wobkÅ¡uśenim twójogo konta dejÅ¡ wuměnjenjam pśinosowarjow pśigłosowaś. no_auto_account_create: Bóžko njamóžomy tuchylu za tebje konto awtomatiski załožyś. not displayed publicly: Njejo zjawnje widobny (glědaj pÅ¡awidła priwatnosći) + openid: "%{logo} OpenID:" + openid association: "

    Twój OpenID hyšći njejo zwězany z kontom OpenStreetMap.

    \n
      \n
    • Jolic sy nowy w OpenStreetMap, załož nowe konto z pomocu slědujucego formulara.
    • \n
    • \nJolic maÅ¡ južo konto, móžoÅ¡ se z wužywarskim mjenim a gronidłom pśizjawiś a pótom konto ze swójim OpenID w swójich wužywarskich nastajenjach zwězaś.\n
    • \n
    " + openid no password: Za OpenID gronidło njejo trěbne, ale někotare wósebne rědy abo serwer by mógli gronidło pótrjebaś. password: "Gronidło:" terms accepted: Źěkujomy se, až sy nowe wuměnjenja za sobuskutkajucuch akceptěrował! + terms declined: Woblutujomy, až sy se rozsuźił, nowe wužywarske wuměnjenja njeakceptěrowaś. Za dalšne informacije glědaj pšosym toś ten wikibok. title: Konto załožyś + use openid: Alternatiwnje móžoš OpenID %{logo} za pśizjawjenje wužywaś no_such_user: body: Bóžko njejo wužywaŕ z mjenim %{user}. Pšosym pśekontrolěruj swój pšawopis, abo wótkaz, na kótaryž sy kliknuł, jo njepłaśiwy. heading: Wužywaŕ %{user} njeeksistěrujo @@ -1533,6 +1581,7 @@ dsb: consider_pd: Pśidatnje ku górjejce dojadnanjeju, mam swóje pśinoski za zjawnosć pśistupne. consider_pd_why: Co to jo? decline: Wótpokazaś + guidance: "Informacije, kótarež pomagaju toś te wuměnjenja rozměś: zbadne zespominanje a někotare njeoficielne pśełožki" heading: Wuměnjenja za pśinosowarjow legale_names: france: Francojska @@ -1541,6 +1590,7 @@ dsb: legale_select: "Pšosym wubjeŕ kraj swójogo bydleńskego sedla:" read and accept: Pšosym pśecytaj slědujuce dojadnanje a klikni na tłocašk Akceptěrowaś, aby wobkšuśił, až akceptěrujoš wuměnjenja toś togo dojadnanja za twóje eksistěrowace a pśichodne pśinoski. title: Wuměnjenja za sobustatkujucych + you need to accept or decline: Pšosym pśecytaj nowe wužywarske wuměnjenja a akceptěruj abo wótpokaž je, nježli až dalej cyniš. view: activate_user: toś togo wužywarja aktiwěrowaś add as friend: ako pśijaśela pśidaś diff --git a/config/locales/el.yml b/config/locales/el.yml index 464ded671..a6f04572a 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1,12 +1,14 @@ # Messages for Greek (Ελληνικά) # Exported from translatewiki.net # Export driver: syck-pecl +# Author: Aitolos # Author: Consta # Author: Crazymadlover # Author: Evropi # Author: Kiriakos # Author: Logictheo # Author: Omnipaedista +# Author: Zserdx el: activerecord: attributes: @@ -23,7 +25,7 @@ el: user: Χρήστης message: body: Σώμα - recipient: Λήπτης + recipient: Παραλήπτης sender: Αποστολέας title: Τίτλος trace: @@ -44,25 +46,25 @@ el: pass_crypt: Κωδικός models: acl: Πρόσβαση στη λίστα ελέγχου - changeset: Αλλαγή συλλογής - changeset_tag: Ετικέτα αλλαγής συλλογής + changeset: Ομάδα αλλαγών + changeset_tag: Ετικέτα ομάδας αλλαγών country: Χώρα diary_comment: Σχόλιο στο blog diary_entry: Καταχώρηση blog friend: Φίλος language: Γλώσσα message: Μήνυμα - node: Σημείο - node_tag: Σημείο ετικέτα + node: Κόμβος + node_tag: Ετικέτα Κόμβου notifier: Ειδοποιητής - old_node: Παλιό σημείο - old_node_tag: Παλιό σημείο ετικέτα - old_relation: Παλιά σχέση + old_node: Παλιός Κόμβος + old_node_tag: Παλιά Ετικέτα Κόμβου + old_relation: Παλιά Σχέση old_relation_member: Παλιό μέλος της σχέσης old_relation_tag: Παλιά ετικέτα της σχέσης - old_way: Παλία κατεύθυνση - old_way_node: Σημείο παλίας κατεύθυνσης - old_way_tag: Ετικέτα παλίας κατεύθυνσης + old_way: Παλιά Διαδρομή + old_way_node: Κόμβος Παλιάς Διαδρομής + old_way_tag: Ετικέτα Παλιάς Διαδρομής relation: Σχέση relation_member: Μέλος της σχέσης relation_tag: Ετικέτα σχέσης @@ -73,173 +75,237 @@ el: user: Χρήστης user_preference: Προτιμήσεις χρήστη user_token: Τεκμήριο χρήστη - way: Κατεύθυνση - way_node: Κατεύθυνση σημείου - way_tag: Ετικέτα κατεύθυνσης + way: Διαδρομή + way_node: Κόμβος Διαδρομής + way_tag: Ετικέτα Διαδρομής application: require_cookies: cookies_needed: Φαίνεται ότι έχετε τα cookies απενεργοποιημένα - παρακαλούμε ενεργοποιήστε τα cookies στο πρόγραμμα περιήγησής σας πριν συνεχίσετε. browse: changeset: - changeset: "Αλλαγή συλλογης: %{id}" - changesetxml: Αλλαγή συλλογης XML - osmchangexml: osmαλλαγή XML - title: Αλλαγή συλλογης + changeset: "Ομάδα αλλαγών: %{id}" + changesetxml: Ομάδα αλλαγών XML + download: Λήψη %{changeset_xml_link} ή %{osmchange_xml_link} + feed: + title: Ομάδα αλλαγών %{id} + title_comment: Ομάδα αλλαγών %{id} - %{comment} + osmchangexml: osmChange XML + title: Ομάδα αλλαγών changeset_details: belongs_to: "Ανήκει στον/στην:" - box: κουτι + bounding_box: "Πλαίσιο οριοθέτησης:" + box: κουτί closed_at: "Έκλεισε στις:" - created_at: "Δημοιουργήθηκε στις:" - has_nodes: "Έχει τα επόμενα %{count} σημεία:" + created_at: "Δημιουργήθηκε στις:" + has_nodes: + one: "Έχει τον επόμενο %{count} κόμβο:" + other: "Έχει τους επόμενους %{count} κόμβους:" has_relations: "Έχει τις επόμενες %{count} σχέσεις:" - has_ways: "Έχει τις επόμενες %{count} κατευθήνσεις:" - show_area_box: Δείξε κούτι περιοχής + has_ways: "Έχει τις επόμενες %{count} διαδρομές:" + no_bounding_box: Δεν αποθηκεύτηκε πλαίσιο οριοθέτησης για αυτή την ομάδα αλλαγών. + show_area_box: Δείξε κουτί περιοχής common_details: changeset_comment: "Σχόλιο:" - edited_at: "Αλλάξε στις:" - edited_by: "Αλλαγή έγινε από:" - in_changeset: "Στην αλλαγή συλλογης:" + deleted_at: "Διαγράφηκε στις:" + deleted_by: "Διαγράφηκε από:" + edited_at: "Επεξεργάστηκε στις:" + edited_by: "Επεξεργάστηκε από:" + in_changeset: "Στην ομάδα αλλαγών:" version: "Εκδοχή:" + containing_relation: + entry: Σχέση %{relation_name} + entry_role: Σχέση %{relation_name} (ως %{relation_role}) map: - deleted: Διαγραφή + deleted: Διαγραμμένο + edit: + area: Επεξεργασία περιοχής + node: Επεξεργασία κόμβου + relation: Επεξεργασία σχέσης + way: Επεξεργασία διαδρομής larger: area: Δείτε την περιοχή σε μεγαλύτερο χάρτη. node: Προβολή του κόμβου σε μεγαλύτερο χάρτη relation: Δείτε την σχέση σε μεγαλύτερο χάρτη way: Δείτε την διαδρομή σε μεγαλύτερο χάρτη. loading: Φόρτωση... + navigation: + all: + next_changeset_tooltip: Επόμενη ομάδα αλλαγών + next_node_tooltip: Επόμενος κόμβος + next_relation_tooltip: Επόμενη σχέση + next_way_tooltip: Επόμενη διαδρομή + prev_changeset_tooltip: Προηγούμενη ομάδα αλλαγών + prev_node_tooltip: Προηγούμενος κόμβος + prev_relation_tooltip: Προηγούμενη σχέση + prev_way_tooltip: Προηγούμενη διαδρομή + user: + name_changeset_tooltip: Προβολή αλλαγών από %{user} + next_changeset_tooltip: Επόμενη επεξεργασία από %{user} + prev_changeset_tooltip: Προηγούμενη επεξεργασία από %{user} node: - download: "%{download_xml_link} ή %{view_history_link}" + download: "%{download_xml_link}, %{view_history_link} ή %{edit_link}" download_xml: Λήψη XML - edit: Τροποποίηστε - node: Σημείο - node_title: "Σήμεο: %{node_name}" - view_history: Δες ιστορία + edit: επεξεργαστείτε + node: Κόμβος + node_title: "Κόμβος: %{node_name}" + view_history: δες ιστορία node_details: coordinates: "Συντεταγμένες:" part_of: "Κομμάτι του:" node_history: download: "%{download_xml_link} ή %{view_details_link}" download_xml: Λήψη XML - node_history: Ιστορία σημείου + node_history: Ιστορικό Κόμβου + node_history_title: "Ιστορικό Κόμβου: %{node_name}" view_details: Δες λεπτομέρειες not_found: - sorry: Συγγνώμη, η %{type} με την ταυτότητα %{id}, δε μπορεί να βρεθεί. + sorry: Συγγνώμη, ο/η %{type} με την ταυτότητα %{id}, δε μπορεί να βρεθεί. type: - changeset: Αλλαγή πλατώ - node: Σημείο + changeset: ομάδα αλλαγών + node: Κόμβος relation: σχέση - way: Κατεύθηνση + way: διαδρομή paging_nav: - of: του - showing_page: Δείχνει σελίδα + of: από + showing_page: Εμφάνιση σελίδας relation: download: "%{download_xml_link} ή %{view_history_link}" download_xml: Λήψη XML relation: Σχέση relation_title: "Σχέση: %{relation_name}" - view_history: δες ιστορία + view_history: δες ιστορικό relation_details: members: "Μέλη:" - part_of: "Κομμάτι του:" + part_of: "Μέρος του:" relation_history: + download: "%{download_xml_link} ή %{view_details_link}" download_xml: Λήψη XML - relation_history: Ιστορια σχέσης - relation_history_title: "Ιστορια σχέσης: %{relation_name}" + relation_history: Ιστορικό Σχέσης + relation_history_title: "Ιστορικό σχέσης: %{relation_name}" view_details: προβολή λεπτομερειών relation_member: + entry_role: "%{type} %{name} ως %{role}" type: node: Κόμβος relation: Σχέση way: Διαδρομή start: - manually_select: Διάλεξε διαφορετική περιοχή δια χειρός - view_data: Δες στοιχεία για αυτο το χάρτη + manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής + view_data: Προβολή δεδομένων για την τρέχουσα προβολή χάρτη start_rjs: - data_frame_title: Στοιχεία - data_layer_name: Στοιχεία + data_frame_title: Δεδομένα + data_layer_name: Δεδομένα details: Λεπτομέρειες - drag_a_box: Τράβα το κοθτί στο χάρτη για να διαλεξείς περιοχή - edited_by_user_at_timestamp: Αλλαγή έγινε από [[user]] στις [[timestamp]] - history_for_feature: Ιστορία του [[feature]] - load_data: Φόρτωσε στοιχεία - loaded_an_area_with_num_features: "¨Εχεις φορτώσει μια περιοχή που εχει [[num_features]] χαρακτηριστικά. Γενικά, μερικοί browsers μπορεί να μην αντέχουν να δείξουν τόσα πολλά στοίχεια. Γενικά, οι browsers δουλεύουν καλύτερα δείχνωντας λιγότερα από 100 χαρακτηριστικά τη φορά: με οτιδήποτε άλλο ο browser μπορεί να γίνει αργός ή να μην αντιδρά. Αν είσαι σίγουρος οτι θες να δεις αυτά τα στοιχεία, κάνε κλικ στο επόμενο κουμπί." + drag_a_box: Σύρετε ένα πλαίσιο στο χάρτη για να επιλέξετε μια περιοχή + edited_by_user_at_timestamp: Επεξεργάστηκε από [[user]] στις [[timestamp]] + hide_areas: Απόκρυψη περιοχών + history_for_feature: Ιστορικό για [[feature]] + load_data: Φόρτωση δεδομένων + loaded_an_area_with_num_features: "Έχεις φορτώσει μια περιοχή που περιέχει [[num_features]] χαρακτηριστικά. Γενικά, μερικοί browsers μπορεί να μην αντέχουν να δείξουν τόσα πολλά στοιχεία. Γενικά, οι browsers δουλεύουν καλύτερα δείχνοντας λιγότερα από 100 χαρακτηριστικά τη φορά: με οτιδήποτε άλλο ο browser μπορεί να γίνει αργός ή να μην αντιδρά. Αν είσαι σίγουρος ότι θες να δεις αυτά τα δεδομένα, κάνε κλικ στο επόμενο κουμπί." loading: Φόρτωση... - manually_select: Διάλεξε διαφορετική περιοχή δια χειρός + manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής object_list: - api: Επανάκτηση περιοχής από το API - back: Δείξε λίστα αντικειμένων + api: Ανάκτηση περιοχής από το API + back: Εμφάνιση λίστας αντικειμένων details: Λεπτομέρειες heading: Λίστα αντικειμένων history: type: - node: Σημείο [[id]] - way: Κατεύθηνση [[id]] + node: Κόμβος [[id]] + way: Διαδρομή [[id]] selected: type: - node: Σημείο [[id]] - way: Κατεύθηνση [[id]] + node: Κόμβος [[id]] + way: Διαδρομή [[id]] type: - node: Σημείο - way: Κατεύθηνση + node: Κόμβος + way: Διαδρομή private_user: ιδιωτικός χρήστης - show_history: Δείξε ιστορία - unable_to_load_size: "Δεν μπορεί να φορτώσει: Το μέγεθος του bounding box [[bbox_size]] είναι πολύ μεγάλο (πρέπει να είναι μικρότερο απο %{max_bbox_size})" + show_areas: Εμφάνιση περιοχών + show_history: Προβολή ιστορικού + unable_to_load_size: "Δεν είναι δυνατή η φόρτωση: το μέγεθος [[bbox_size]] του πλαισίου οριοθέτησης είναι πολύ μεγάλο (πρέπει να είναι μικρότερο από %{max_bbox_size})" wait: Αναμονή... - zoom_or_select: Εστίασε ή διάλεξε περιοχή απο το χάρτη + zoom_or_select: Μεγέθυνση ή επιλογή περιοχής του χάρτη για να δείτε tag_details: tags: "Ετικέτες:" + wiki_link: + key: Η wiki σελίδα περιγραφής για την ετικέτα %{key} + tag: Η wiki σελίδα περιγραφής για την ετικέτα %{key}=%{value} + wikipedia_link: Το άρθρο %{page} στη Βικιπαίδεια timeout: + sorry: Συγγνώμη, τα δεδομένα για το/τη %{type} με αναγνωριστικό %{id}, χρειάστηκε πολύ χρόνο για να ανακτηθεί. type: - changeset: Αλλαγή πλατώ + changeset: ομάδα αλλαγών node: Κόμβος - relation: Σχέση + relation: σχέση way: Διαδρομή way: - download: "%{download_xml_link} ή %{view_history_link}" + download: "%{download_xml_link}, %{view_history_link} ή %{edit_link}" download_xml: Λήψη XML - edit: Τροποποίηστε - view_history: δες ιστορία - way: Κατεύθυνση - way_title: "Κατεύθυνση: %{way_name}" + edit: επεξεργασία + view_history: Προβολή ιστορικού + way: Διαδρομή + way_title: "Διαδρομή: %{way_name}" way_details: also_part_of: - one: επίσης κομμάτι κατεύθυνσης %{related_ways} - other: επίσης κομμάτι κατευθύνσεων %{related_ways} - nodes: "Σημεία:" - part_of: Κομμάτι του + one: επίσης μέρος της διαδρομής %{related_ways} + other: επίσης μέρος των διαδρομών %{related_ways} + nodes: "Κόμβοι:" + part_of: "Μέρος του:" way_history: download: "%{download_xml_link} ή %{view_details_link}" download_xml: Λήψη XML - view_details: δες λεπτομέρειες - way_history: Ιστορία κατεύθηνσης - way_history_title: "Ιστορία κατεύθηνσης: %{way_name}" + view_details: Προβολή λεπτομερειών + way_history: Ιστορικό Διαδρομής + way_history_title: "Ιστορικό Διαδρομής: %{way_name}" changeset: changeset: - anonymous: Ανόνυμος - show_area_box: δείξε περιοχή κουτιού - view_changeset_details: Δες αλλαγή συλλογής λεπτομερειών + anonymous: Ανώνυμος + big_area: (μεγάλο) + no_comment: (κανένα) + no_edits: (χωρίς τροποποιήσεις) + show_area_box: δείξε κουτί περιοχής + still_editing: (ακόμη σε επεξεργασία) + view_changeset_details: Προβολή λεπτομερειών ομάδας αλλαγών changeset_paging_nav: - showing_page: Eμφάνιση σελίδας %{page} + next: Επόμενο » + previous: « Προηγούμενο + showing_page: Εμφάνιση σελίδας %{page} changesets: area: Περιοχή comment: Σχόλιο + id: ID saved_at: Αποθήκευση στις user: Χρήστης + list: + description: Πρόσφατες αλλαγές + description_bbox: Ομάδες αλλαγών μεταξύ %{bbox} + description_user: Ομάδες αλλαγών από %{user} + description_user_bbox: Ομάδες αλλαγών από %{user} μεταξύ %{bbox} + heading: Ομάδες αλλαγών + heading_bbox: Ομάδες αλλαγών + heading_user: Ομάδες αλλαγών + heading_user_bbox: Ομάδες αλλαγών + title: Ομάδες αλλαγών + title_bbox: Ομάδες αλλαγών μεταξύ %{bbox} + title_user: Ομάδες αλλαγών από %{user} + title_user_bbox: Ομάδες αλλαγών από %{user} μεταξύ %{bbox} + timeout: + sorry: Λυπάμαι, ο κατάλογος των ομάδων αλλαγών που ζητήσατε χρειάστηκε πολύ χρόνο να ανακτηθεί. diary_entry: diary_comment: - comment_from: Σχόλιο απο τον %{link_user} στις %{comment_created_at} + comment_from: Σχόλιο από τον %{link_user} στις %{comment_created_at} confirm: Επιβεβαίωση hide_link: Απόκρυψη αυτού του σχολίου diary_entry: comment_count: one: 1 σχόλιο other: "%{count} σχόλια" - comment_link: Σχόλια για τη καταχώρηση + comment_link: Σχόλιο για τη καταχώρηση confirm: Επιβεβαίωση - edit_link: Αλλαγή καταχώρησης + edit_link: Επεξεργασία καταχώρησης hide_link: Απόκρυψη αυτής της καταχώρησης - posted_by: Γράφτηκε απο το χρήστη %{link_user} στις %{created} στα %{language_link} + posted_by: Γράφτηκε από το χρήστη %{link_user} στις %{created} στα %{language_link} reply_link: Απάντηση στη καταχώρηση edit: body: "Σώμα:" @@ -247,82 +313,107 @@ el: latitude: Γεωγραφικό πλάτος location: "Τοποθεσία:" longitude: Γεωγραφικό μήκος - marker_text: Τοποθεσία καταχώρησης blog + marker_text: Τοποθεσία καταχώρησης ημερολογίου save_button: Αποθήκευση subject: "Θέμα:" title: Επεξεργασία καταχώρησης ημερολογίου - use_map_link: χρησημοποίησε το χάρτη + use_map_link: χρήση του χάρτη + feed: + all: + description: Πρόσφατες καταχωρήσεις ημερολογίου από χρήστες του OpenStreetMap + title: Καταχωρήσεις ημερολογίου OpenStreetMap + language: + description: Πρόσφατες καταχωρήσεις ημερολογίου από χρήστες του OpenStreetMap στα %{language_name} + title: Καταχωρήσεις ημερολογίου OpenStreetMap στα %{language_name} + user: + description: Πρόσφατες καταχωρίσεις ημερολογίου OpenStreetMap από %{user} + title: Καταχωρίσεις ημερολογίου OpenStreetMap για %{user} list: in_language_title: Καταχωρήσεις Ημερολογίων στα %{language} - new: Νέα καταχώρηση ημερολογίου - new_title: Σύνθεση καινούργια καταχώρηση στο blog χρήστη - newer_entries: Πρόσφατες Καταχωρήσεις - no_entries: Καμία καταχώρηση blog - older_entries: Παλίες Καταχωρήσεις - recent_entries: "Πρόσοφατες καταχωρήσεις blog:" - title: Blog χρηστών - user_title: Blog %{user} + new: Νέα Καταχώρηση Ημερολογίου + new_title: Συνθέστε μια νέα καταχώρηση στο ημερολόγιο χρήστη σας + newer_entries: Νεότερες Καταχωρήσεις + no_entries: Καμία καταχώρηση ημερολογίου + older_entries: Παλιότερες Καταχωρήσεις + recent_entries: "Πρόσφατες καταχωρήσεις ημερολογίου:" + title: Ημερολόγια χρηστών + user_title: ημερολόγιο του %{user} location: edit: Επεξεργασία location: "Τοποθεσία:" view: Προβολή new: - title: Νέα καταχώρηση ημερολογίου + title: Νέα Καταχώρηση Ημερολογίου no_such_entry: - body: Συγγνώμη, δεν υπάρχει καταχώρηση ημερολογίου ή σχόλιο με τη ταυτότητα %{id}. Είναι πιθανό να υπάρχουν ορθογραφικά λάθη ή να είναι λάθος ο συνδεσμος μέσο του οπίου φτάσατε σε αυτήν την σελίδα. + body: Συγγνώμη, δεν υπάρχει καταχώρηση ημερολογίου ή σχόλιο με τη ταυτότητα %{id}. Είναι πιθανό να υπάρχουν ορθογραφικά λάθη ή να είναι λάθος ο σύνδεσμος μέσο του οπίου φτάσατε σε αυτήν την σελίδα. heading: "Καμία καταχώρηση με τη ταυτότητα: %{id}" + title: Δεν υπάρχει τέτοια εγγραφή ημερολογίου no_such_user: - body: Συγγνώμη, δεν υπάρχει χρήστης με το όνομα %{user}. Είναι πιθανό να υπάρχουν ορθογραφικά λάθη ή να είναι λάθος ο σύνδεσμος μέσο του οπίου φτάσατε σε αυτήν την σελίδα. + body: Λυπούμαστε, δεν υπάρχει χρήστης με το όνομα %{user}. Είναι πιθανό να υπάρχουν ορθογραφικά λάθη ή να είναι λάθος ο σύνδεσμος μέσο του οπίου φτάσατε σε αυτήν την σελίδα. heading: Ο χρήστης %{user} δεν υπάρχει - title: Άγνωστος χρήστηςr + title: Άγνωστος χρήστης view: - leave_a_comment: Εγγραφή σχόλιου - login: Είσοδος - login_to_leave_a_comment: "%{login_link} για εγγραφή σχόλιου" + leave_a_comment: Αφήστε ένα σχόλιο + login: Σύνδεση + login_to_leave_a_comment: "%{login_link} για να αφήσετε ένα σχόλιο" save_button: Αποθήκευση - title: το ημερολόγιου το %{user} | %{title} - user_title: Blog %{user} + title: το ημερολόγιο του %{user} | %{title} + user_title: ημερολόγιο του %{user} editor: - default: Προεπιλογή (τώρα είναι το %{name}) + default: Προεπιλογή (τώρα είναι %{name}) potlatch: - description: Potlatch 1 (επεξεργαστής του χάρτη μέσα στο περιηγητή ιστού) + description: Potlatch 1 (επεξεργαστής μέσα στο περιηγητή ιστού) name: Potlatch 1 potlatch2: - description: Potlatch 2 (επεξεργαστής του χάρτη μέσα στο περιηγητή ιστού) + description: Potlatch 2 (επεξεργαστής μέσα στο περιηγητή ιστού) name: Potlatch 2 remote: description: Απομακρυσμένος έλεγχος (JOSM ή Merkaartor) name: Απομακρυσμένος έλεγχος export: start: - add_marker: Πρόσθεση markerστο χάρτη - area_to_export: Εξαγωγή περιοχής + add_marker: Προσθέστε ένα δείκτη στο χάρτη + area_to_export: Περιοχή προς εξαγωγή + embeddable_html: Ενσωματούμενη HTML export_button: Εξαγωγή - export_details: OpenStreetMap data are licensed under the Creative Commons Attribution-ShareAlike 2.0 license. + export_details: Τα δεδομένα OpenStreetMap είναι αδειοδοτημένα κάτω από την άδεια Creative Commons Attribution-ShareAlike 2.0. format: Μορφοποίηση - format_to_export: Εξαγωγή τρόπου παρουσίασης - image_size: Μέγεθος εικόνας - latitude: "Γ. Π.:" + format_to_export: Μορφή προς εξαγωγή + image_size: Μέγεθος Εικόνας + latitude: "Γεω. Πλ:" licence: Άδεια - longitude: "Γ. Μ.:" - manually_select: Διάλεξε καινούργια περιοχή δια χειρός - mapnik_image: Mapnik εικόνα + longitude: "Γεω. Μη.:" + manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής + mapnik_image: Εικόνα Mapnik + max: μεγ options: Επιλογές - osm_xml_data: OpenStreetMap XML στοιχεία - osmarender_image: Osmarender εικόνα + osm_xml_data: Δεδομένα OpenStreetMap XML + osmarender_image: Εικόνα Osmarender output: Απόδοση + paste_html: Επικόλληση HTML για ενσωμάτωση στην ιστοσελίδα scale: Κλίμακα + too_large: + body: Αυτή η περιοχή είναι πολύ μεγάλη για να εξαχθεί ως δεδομένα OpenStreetMap XML. Παρακαλώ κάνετε μεγέθυνση ή επιλέξτε μικρότερη περιοχή. + heading: Πολύ Μεγάλη Περιοχή zoom: Εστίαση start_rjs: + add_marker: Προσθέστε ένα δείκτη στο χάρτη + change_marker: Αλλαγή θέσης δείκτη + click_add_marker: Κάντε κλικ στο χάρτη για να προσθέσετε ένα δείκτη + drag_a_box: Σύρετε ένα πλαίσιο στο χάρτη για να επιλέξετε μια περιοχή export: Εξαγωγή + manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής + view_larger_map: Προβολή Μεγαλύτερου Χάρτη geocoder: description: title: geonames: Τοποθεσία από το GeoNames + osm_namefinder: "%{types} από OpenStreetMap Namefinder" + osm_nominatim: Τοποθεσία από OpenStreetMap Nominatim types: cities: Πόλεις places: Μέρη - towns: Μικρές Πόλεις + towns: Κωμοπόλεις direction: east: ανατολικά north: βόρεια @@ -332,41 +423,69 @@ el: south_east: νοτιοανατολικά south_west: νοτιοδυτικά west: δυτικά + distance: + one: περίπου 1χλμ + other: περίπου %{count}χλμ + zero: λιγότερο από 1χλμ results: more_results: Περισσότερα αποτελέσματα no_results: Δεν βρέθηκε κανένα αποτέλεσμα + search: + title: + ca_postcode: Αποτελέσματα από Geocoder.CA + geonames: Αποτελέσματα από GeoNames + latlon: Εσωτερικά αποτελέσματα + osm_namefinder: Αποτελέσματα από OpenStreetMap Namefinder + osm_nominatim: Αποτελέσματα από OpenStreetMap Nominatim + uk_postcode: Αποτέλεσμα από NPEMap / FreeThe Postcode + us_postcode: Αποτελέσματα από Geocoder.us + search_osm_namefinder: + prefix: "%{type}" + suffix_parent: "%{suffix} (%{parentdistance} %{parentdirection} από %{parentname})" + suffix_place: ", %{distance} %{direction} από %{placename}" search_osm_nominatim: prefix: amenity: airport: Αεροδρόμιο arts_centre: Κέντρο Τεχνών + atm: ATM auditorium: Αμφιθέατρο bank: Τράπεζα bar: Μπαρ bench: Πάγκος - brothel: Πορνείο + bicycle_parking: Στάθμευση Ποδηλάτων + bicycle_rental: Ενοικίαση Ποδηλάτων + brothel: Οίκος ανοχής + bureau_de_change: Ανταλλακτήριο Συναλλάγματος bus_station: Σταθμός Λεωφορείου cafe: Καφετέρια car_rental: Ενοικίαση αυτοκινήτου + car_sharing: Κοινή χρήση αυτοκινήτων car_wash: Πλύσιμο Αυτοκινήτων casino: Καζίνο cinema: Κινηματογράφος clinic: Κλινική club: Club college: Κολέγιο + community_centre: Κοινοτικό Κέντρο courthouse: Δικαστήριο crematorium: Κρεματόριο dentist: Οδοντίατρος doctors: Ιατροί + dormitory: Κοιτώνας drinking_water: Πόσιμο Νερό driving_school: Σχολή Οδηγών embassy: Πρεσβεία emergency_phone: Τηλέφωνο Έκτακτης Ανάγκης fast_food: Ταχυφαγείο + ferry_terminal: Σταθμός Πορθμείων + fire_hydrant: Κρουνός πυροσβεστικής + fire_station: Πυροσβεστικός σταθμός fountain: Συντριβάνι fuel: Καύσιμα grave_yard: Νεκροταφείο gym: Γυμναστήριο + health_centre: Κέντρο Υγείας hospital: Νοσοκομείο hotel: Ξενοδοχείο ice_cream: Παγωτό @@ -374,69 +493,122 @@ el: library: Βιβλιοθήκη market: Αγορά marketplace: Αγορά - nightclub: Night Club + nightclub: Νυχτερινό Κέντρο + nursery: Παιδικός σταθμός + nursing_home: Οίκος Ευγηρίας office: Γραφείο park: Πάρκο + parking: Χώρος στάθμευσης + pharmacy: Φαρμακείο + place_of_worship: Τόπος λατρείας police: Αστυνομία post_box: Ταχυδρομική Θυρίδα post_office: Ταχυδρομείο preschool: Προσχολική Εκπαίδευση prison: Φυλακή pub: Παμπ + public_building: Δημόσιο κτίριο + public_market: Δημόσια αγορά reception_area: Χώρος Υποδοχής + recycling: Σημείο Ανακύκλωσης restaurant: Εστιατόριο sauna: Σάουνα school: Σχολείο + shelter: Καταφύγιο shop: Κατάστημα + shopping: Αγορές studio: Στούντιο supermarket: Σουπερμάρκετ taxi: Ταξί + telephone: Δημόσιο Τηλέφωνο theatre: Θέατρο toilets: Τουαλέτες townhall: Δημαρχείο university: Πανεπιστήμιο + vending_machine: Μηχάνημα Αυτόματης Πώλησης veterinary: Κτηνιατρική Χειρουργική + waste_basket: Καλάθι Απορριμμάτων wifi: Πρόσβαση WiFi - youth_centre: Πολύκεντρο Νεολαίας + youth_centre: Κέντρο Νεολαίας + boundary: + administrative: Διοικητικό Όριο building: + block: Οικοδομικό Τετράγωνο bunker: Οχυρό chapel: Παρεκκλήσι church: Εκκλησία + city_hall: Δημαρχείο dormitory: Κοιτώνας + entrance: Είσοδος Κτιρίου flats: Διαμερίσματα garage: Γκαράζ + hospital: Κτήριο Νοσοκομείου hotel: Ξενοδοχείο house: Σπίτι + industrial: Βιομηχανικό Κτήριο + office: Κτήριο Γραφείων + public: Δημόσιο κτήριο residential: Πολυκατοικία + school: Σχολικό Κτήριο + shop: Κατάστημα stadium: Στάδιο tower: Πύργος train_station: Σιδηροδρομικός Σταθμός + university: Κτήριο Πανεπιστημίου highway: bridleway: Μονοπάτι για άλογα bus_stop: Στάση Λεωφορείου + construction: Δρόμος υπό κατασκευή + distance_marker: Δείκτης Απόστασης + emergency_access_point: Σημείο Πρόσβασης Έκτακτης Ανάγκης footway: Μονοπάτι + ford: Κοιτόστρωση gate: Πύλη + motorway: Αυτοκινητόδρομος + motorway_junction: Διασταύρωση Αυτοκινητόδρομου + motorway_link: Αυτοκινητόδρομος path: Διαδρομή - pedestrian: Πεζόδρομιο + pedestrian: Πεζόδρομος + platform: Πλατφόρμα + primary: Κύρια Οδός + primary_link: Κύρια Οδός + raceway: Αυτοκινητοδρόμιο residential: Κατοικίες road: Δρόμος + secondary: Δευτερεύουσα Οδός + secondary_link: Δευτερεύουσα Οδός + services: Υπηρεσίες Αυτοκινητοδρόμου + steps: Σκαλοπάτια trail: Διαδρομή + unclassified: Αταξινόμητη Οδός + unsurfaced: Δρόμος χωρίς Επίστρωση historic: archaeological_site: Αρχαιολογικός Χώρος + battlefield: Πεδίο μάχης building: Κτίριο - memorial: Μνημόσυνο + castle: Κάστρο + church: Εκκλησία + house: Σπίτι + icon: Εικονίδιο + memorial: Μνημείο mine: Ορυχείο monument: Μνημείο museum: Μουσείο + ruins: Ερείπια + tower: Πύργος + wreck: Ναυάγιο landuse: basin: Λεκανοπέδιο cemetery: Κοιμητήριο commercial: Εμπορική Περιοχή + construction: Κατασκευές farm: Αγρόκτημα - farmland: Αγρόκτημα + farmland: Γεωργική γη farmyard: Αγρόκτημα forest: Δάσος grass: Γρασίδι + industrial: Βιομηχανική Περιοχή + meadow: Λιβάδι military: Στρατιωτική Περιοχή mine: Ορυχείο mountain: Βουνό @@ -444,8 +616,11 @@ el: plaza: Πλατεία quarry: Λατομείο railway: Σιδηρόδρομος + recreation_ground: Χώρος Αναψυχής + reservoir: Ταμιευτήρας residential: Κατοικημένη Περιοχή vineyard: Αμπέλι + wetland: Υγρότοπος wood: Μη προσεγμένο δάσος leisure: fishing: Αλιευτική Περιοχή @@ -455,41 +630,50 @@ el: miniature_golf: Μίνι Γκολφ park: Πάρκο playground: Παιδική Χαρά + recreation_ground: Χώρος Αναψυχής sports_centre: Αθλητικό Κέντρο stadium: Στάδιο swimming_pool: Πισίνα natural: + bay: Κόλπος beach: Παραλία cape: Ακρωτήριο cave_entrance: Είσοδος Σπηλιάς channel: Κανάλι cliff: Γκρεμός + coastline: Ακτογραμμή crater: Κρατήρας feature: Χαρακτηριστικό fjord: Φιόρδ + geyser: Θερμοπίδακας glacier: Παγετώνας hill: Λόφος island: Νησί + land: Ξηρά marsh: Βάλτος mud: Λάσπη peak: Κορυφή + point: Σημείο reef: Ύφαλος + ridge: Σκόπελος river: Ποτάμι rock: Βράχος + scrub: Θαμνότοπος strait: Πορθμός tree: Δέντρο valley: Κοιλάδα volcano: Ηφαίστειο water: Νερό + wetland: Υγρότοπος wetlands: Υγρότοποι - wood: Μη προσεγμένο δάσος + wood: Δάσος place: airport: Αεροδρόμιο city: Πόλη country: Χώρα county: Κομητεία farm: Αγρόκτημα - hamlet: Χωριουδάκι + hamlet: Οικισμός house: Σπίτι houses: Σπίτια island: Νησί @@ -502,67 +686,123 @@ el: state: Πολιτεία subdivision: Υποδιαίρεση suburb: Προάστιο - town: Μικρή Πόλη + town: Κωμόπολη village: Χωριό railway: abandoned: Εγκαταλελειμμένος Σιδηρόδρομος construction: Σιδηρόδρομος Υπό Κατασκευή disused: Σιδηρόδρομος Εκτός Χρήσης disused_station: Σιδηροδρομικός Σταθμός Εκτός Χρήσης + halt: Σταθμός Τραίνου historic_station: Ιστορική Σιδηροδρομικός Σταθμός + junction: Σιδηροδρομικός Κόμβος + level_crossing: Ισόπεδη Διάβαση station: Σιδηροδρομικός Σταθμός subway: Σταθμός Μετρό subway_entrance: Είσοδος Στο Μετρό + tram: Τραμ tram_stop: Στάση Τραμ shop: bakery: Φούρνος + bicycle: Κατάστημα Ποδηλάτων books: Βιβλιοπωλείο butcher: Κρεοπωλείο + car_dealer: Μεταπωλητής Αυτοκινήτων car_parts: Εξαρτήματα Αυτοκινήτου + car_repair: Επισκευή Αυτοκινήτων + carpet: Κατάστημα Χαλιών + chemist: Χημικός + clothes: Κατάστημα Ρούχων + computer: Κατάστημα Υπολογιστών confectionery: Ζαχαροπλαστική + convenience: Παντοπωλείο + copyshop: Κατάστημα φωτοαντιγράφων + cosmetics: Κατάστημα Καλλυντικών + department_store: Πολυκατάστημα + doityourself: Ιδιοκατασκευές drugstore: Φαρμακείο dry_cleaning: Στεγνό Καθάρισμα + electronics: Κατάστημα Ηλεκτρονικών + estate_agent: Κτηματομεσίτης fish: Ιχθυοπωλείο - florist: Ανθοκομείο + florist: Ανθοπώλης + food: Κατάστημα Τροφίμων + furniture: Έπιπλα + gift: Κατάστημα Δώρων greengrocer: Μανάβης + grocery: Οπωροπωλείο hairdresser: Κομμωτήριο insurance: Ασφαλιστική jewelry: Κοσμηματοπωλείο kiosk: Περίπτερο + laundry: Πλυντήριο mall: Εμπορικό Κέντρο + market: Αγορά + music: Κατάστημα Μουσικής + optician: Οπτικός + photo: Φωτογραφείο + shoes: Κατάστημα Υποδημάτων sports: Κατάστημα Αθλητικών + stationery: Κατάστημα γραφικής ύλης supermarket: Σουπερμάρκετ + toys: Κατάστημα Παιγνιδιών travel_agency: Ταξιδιωτικό Πρακτορείο tourism: + camp_site: Χώρος Κατασκήνωσης + guest_house: Ξενώνας + hostel: Ξενώνας hotel: Ξενοδοχείο + information: Πληροφορίες museum: Μουσείο + picnic_site: Τοποθεσία για πικ-νικ + theme_park: Θεματικό Πάρκο + valley: Κοιλάδα + zoo: Ζωολογικός κήπος waterway: boatyard: Ναυπηγείο + canal: Κανάλι dam: Φράγμα ditch: Χαντάκι river: Ποτάμι - waterfall: Καταράχτης + riverbank: Όχθη ποταμού + stream: Ρέμα + waterfall: Καταρράχτης javascripts: site: edit_disabled_tooltip: Κάνετε μεγέθυνση για να επεξεργαστείτε το χάρτη edit_tooltip: Επεξεργασία του χάρτη + edit_zoom_alert: Πρέπει να μεγεθύνετε για να επεξεργαστείτε το χάρτη + history_disabled_tooltip: Μεγέθυνση για να δείτε τις αλλαγές για αυτή την περιοχή + history_tooltip: Προβολή αλλαγών για αυτή την περιοχή + history_zoom_alert: Πρέπει να μεγεθύνετε για να δείτε τις αλλαγές για αυτή την περιοχή layouts: + community_blogs: Ιστολόγια της Κοινότητας community_blogs_title: Blogs από τα μέλη της κοινότητας του OpenStreetMap - copyright: Πνευματικά δικαιώματα & Άδειας χρήσης + copyright: Πνευματικά δικαιώματα & Άδεια χρήσης documentation: Τεκμηρίωση documentation_title: Τεκμηρίωση για το έργο + donate: Υποστηρίξτε το OpenStreetMap %{link} στον Έρανο Αναβάθμισης Υλικού. + donate_link_text: δωρίζοντας edit: Επεξεργασία edit_with: Επεξεργασία με %{editor} export: Εξαγωγή + export_tooltip: Εξαγωγή δεδομένων χάρτη foundation: Ίδρυμα foundation_title: Το Ίδρυμα OpenStreetMap + gps_traces: Ίχνη GPS + gps_traces_tooltip: Διαχείριση ιχνών GPS help: Βοήθεια help_centre: Κέντρο Βοήθειας help_title: Ιστοσελίδα βοήθειας για το έργο history: Ιστορικό - home: κύρια σελίδα + home: σπίτι + home_tooltip: Μετάβαση στην τοποθεσία σπιτιού inbox: εισερχόμενα (%{count}) - intro_1: Ο OpenStreetMap είναι δώρεαν, επεξεργάσιμος χάρτης ολόκληρου του κόσμος. Είναι κατασκευασμένο από ανθρώπους σαν κι εσάς. + inbox_tooltip: + one: Τα εισερχόμενα σας περιέχουν 1 αδιάβαστο μήνυμα + other: Τα εισερχόμενα σας περιέχουν %{count} αδιάβαστα μηνύματα + zero: Τα εισερχόμενα σας δεν περιέχουν κανένα αδιάβαστο μήνυμα + intro_1: Ο OpenStreetMap είναι δωρεάν, επεξεργάσιμος χάρτης ολόκληρου του κόσμου. Είναι κατασκευασμένο από ανθρώπους σαν κι εσάς. intro_2: Το OpenStreetMap σάς επιτρέπει να προβάλετε, να επεξεργαστείτε και να χρησιμοποιήσετε τα γεωγραφικά δεδομένα με ένα συνεργατικό τρόπο από οπουδήποτε στη Γη. intro_3_partners: βίκι log_in: είσοδος @@ -571,6 +811,9 @@ el: alt_text: Λογότυπο OpenStreetMap logout: έξοδος logout_tooltip: Έξοδος + make_a_donation: + text: Κάντε μια Δωρεά + title: Υποστήριξε το OpenStreetMap με δωρεά χρημάτων sign_up: εγγραφή sign_up_tooltip: Δημιουργήστε λογαριασμό για επεξεργασία tag_line: Ο Ελεύθερος Παγκόσμιος Χάρτης Βίκι @@ -584,23 +827,73 @@ el: wiki_title: Ιστοσελίδα βίκι για το έργο license_page: foreign: + english_link: της πρωτότυπης Αγγλικής + text: Σε περίπτωση διένεξης μεταξύ αυτής της μεταφρασμένης σελίδας και %{english_original_link}, Η Αγγλική σελίδα θα προτιμηθεί title: Σχετικά με αυτή την μετάφραση native: mapping_link: αρχίστε τη χαρτογράφηση native_link: ελληνική έκδοση - text: Προβάλλετε η αγγλική έκδοση της σελίδας πνευματικών δικαιωμάτων. Μπορείτε να επιστρέψετε στην %{native_link} της σελίδας ή να σταματήσετε να διαβάζετε για τα πνευματικά δικαιώματα και %{mapping_link}. + text: Προβάλλετε η αγγλική έκδοση της σελίδας πνευματικών δικαιωμάτων. Μπορείτε να επιστρέψετε στην %{native_link} της σελίδας ή να σταματήσετε να διαβάζετε για τα πνευματικά δικαιώματα και να %{mapping_link}. title: Σχετικά με αυτήν τη σελίδα message: + inbox: + date: Ημ/νία + from: Από + my_inbox: Τα Εισερχόμενα μου + outbox: εξερχόμενα + subject: Θέμα + title: Εισερχόμενα + you_have: Έχεις %{new_count} νέα μηνύματα και %{old_count} παλιά μηνύματα message_summary: delete_button: Διαγραφή + read_button: Σήμανση ως διαβασμένο + reply_button: Απάντηση + unread_button: Σήμανση ως αδιάβαστο + new: + back_to_inbox: Πίσω στα Εισερχόμενα + body: Κείμενο + message_sent: Αποστολή μηνύματος + send_button: Αποστολή + send_message_to: Αποστολή νέου μηνύματος προς %{name} + subject: Θέμα + title: Αποστολή μηνύματος + no_such_message: + heading: Κανένα τέτοιο μήνυμα + title: Κανένα τέτοιο μήνυμα + no_such_user: + body: Συγνώμη, δεν υπάρχει κανένας χρήστης με αυτό το όνομα. + heading: Άγνωστος χρήστης + title: Άγνωστος χρήστης + outbox: + date: Ημ/νία + inbox: εισερχόμενα + my_inbox: Τα %{inbox_link} μου + no_sent_messages: Δεν έχεις στείλει κανένα μήνυμα ακόμα. Γιατί δεν έρχεσαι σε επαφή με μερικά %{people_mapping_nearby_link}? + outbox: εξερχόμενα + people_mapping_nearby: άτομα που χαρτογραφούν κοντά σου + subject: Θέμα + title: Εξερχόμενα + to: Προς + read: + back_to_inbox: Πίσω στα Εισερχόμενα + back_to_outbox: Πίσω στα Εξερχόμενα + date: Ημ/νία + from: Από + reply_button: Απάντηση + subject: Θέμα + title: Ανάγνωση μηνύματος + to: Προς + unread_button: Σήμανση ως αδιάβαστο sent_message_summary: delete_button: Διαγραφή notifier: diary_comment_notification: footer: Μπορείτε επίσης να διαβάσετε το σχόλιο στο %{readurl} και μπορείτε να σχολιάσετε στο %{commenturl} ή να απαντήσετε στο %{replyurl} - header: "Ο χρήστης %{from_user} έχει σχολιάσει τη πρόσφατη καταχώρηση ημερολόγιου σας στο OpenStreetMap με το θέμα %{subject}:" - hi: Γεια %{to_user}, + header: "Ο χρήστης %{from_user} έχει σχολιάσει τη πρόσφατη καταχώρηση ημερολογίου σας στο OpenStreetMap με θέμα %{subject}:" + hi: Γεια σου %{to_user}, subject: "[OpenStreetMap] Ο χρήστης %{user} σχολίασε την καταχώριση ημερολογίου σας" + email_confirm: + subject: "[OpenStreetMap] Επιβεβαιώστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας" email_confirm_html: greeting: Γεια, email_confirm_plain: @@ -608,10 +901,21 @@ el: friend_notification: befriend_them: Μπορείτε επίσης να τους προσθέσετε ως φίλους στο %{befriendurl}. had_added_you: Ο χρήστης %{user} σας πρόσθεσε ως φίλο στο OpenStreetMap. - see_their_profile: Μπορείτε να δείτε το προφίλ τους στο %{userurl}. + see_their_profile: Μπορείτε να δείτε το προφίλ του στο %{userurl}. subject: "[OpenStreetMap] Ο χρήστης %{user} σας προσθέσε ως φίλο" gpx_notification: + and_no_tags: χωρίς ετικέτες + and_the_tags: και τις παρακάτω ετικέτες + failure: + failed_to_import: "Απέτυχε η εισαγωγή. Το σφάλμα είναι:" + more_info_1: Περισσότερες πληροφορίες σχετικά με τα σφάλματα εισαγωγής GPX και πως να τα αποφύγετε + more_info_2: "μπορούν να βρεθούν στο:" + subject: "[OpenStreetMap] Η εισαγωγή GPX απέτυχε" greeting: Γεια, + success: + subject: "[OpenStreetMap] Η εισαγωγή GPX πέτυχε" + with_description: με περιγραφή + your_gpx_file: Μοιάζει με δικό σας αρχείο GPX lost_password_html: greeting: Γεια, lost_password_plain: @@ -620,22 +924,42 @@ el: footer1: Μπορείτε επίσης να διαβάσετε το μήνυμα στο %{readurl} footer2: και μπορείτε να απαντήσετε στο %{replyurl} header: "Ο χρήστης %{from_user} σάς έχει στείλει ένα μήνυμα μέσω του OpenStreetMap με θέμα %{subject}:" - hi: Γεια σας %{to_user}, + hi: Γεια σου %{to_user}, signup_confirm: subject: "[OpenStreetMap] Επιβεβαιώστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας" signup_confirm_html: + click_the_link: Εάν πρόκειται για σας, Καλώς ήρθατε! Κάντε κλικ στο σύνδεσμο παρακάτω, για να επιβεβαιωθεί ο λογαριασμό σας και διαβάστε για περισσότερες πληροφορίες σχετικά με το OpenStreetMap greeting: Γεια! + hopefully_you: Κάποιος (ελπίζουμε εσύ) θέλει να δημιουργήσει ένα λογαριασμό στο + introductory_video: Μπορείτε να παρακολουθήσετε ένα %{introductory_video_link}. + more_videos: Υπάρχουν {more_videos_link} %. + more_videos_here: περισσότερα βίντεο εδώ + video_to_openstreetmap: εισαγωγικό βίντεο για το OpenStreetMap signup_confirm_plain: + click_the_link_1: Αν αυτός είσαι εσύ, καλώς ήρθες! Παρακαλώ κάνε κλίκ στο σύνδεσμο από κάτω ώστε να επιβεβαιωθεί + click_the_link_2: ο λογαριασμός σου και διάβασε για περισσότερες πληροφορίες σχετικά με το OpenStreetMap. greeting: Γεια! + hopefully_you: Κάποιος (ελπίζουμε εσύ) θέλει να δημιουργήσει ένα λογαριασμό στο + introductory_video: "Μπορείς να παρακολουθήσεις ένα εισαγωγικό βίντεο για το OpenStreetMap εδώ:" + more_videos: "Υπάρχουν περισσότερα βίντεο εδώ:" + opengeodata: "Το OpenGeoData.org είναι το ιστολόγιο του ιδρυτή του OpenStreetMap Steve Coast's , έχει επίσης και podcasts:" + the_wiki: "Διάβασε σχετικά με το OpenStreetMap στο wiki:" oauth_clients: edit: submit: Επεξεργασία title: Επεξεργασία της αίτησής σας + form: + name: Όνομα + required: Απαιτείται index: + application: Όνομα Εφαρμογής register_new: Εγγραφή αίτησής revoke: Ανάκληση! new: submit: Εγγραφή + printable_name: + with_id: "%{id}" + with_name: "%{name} (%{id})" site: edit: anon_edits_link_text: Μάθετε γιατί συμβαίνει αυτό. @@ -643,11 +967,12 @@ el: potlatch2_unsaved_changes: Έχετε μη αποθηκευμένες αλλαγές. (Για να αποθηκεύσετε στο Potlatch 2, πρέπει να κάνετε κλικ στο «Αποθήκευση».) user_page_link: σελίδα χρήστη index: - js_1: Είτε χρησιμοποιείτε πρόγραμμα περιήγησης που δεν υποστηρίζει το JavaScript ή έχετε απενεργοποιήσει το JavaScript. + js_1: Είτε χρησιμοποιείτε πρόγραμμα περιήγησης που δεν υποστηρίζει JavaScript ή έχετε απενεργοποιήσει την JavaScript. license: notice: Υπό την άδεια του %{license_name} άδεια από το %{project_name} και τους χρήστες του. project_name: έργο OpenStreetMap key: + map_key: Υπόμνημα table: entry: bridleway: Μονοπάτι για Άλογα @@ -660,12 +985,14 @@ el: commercial: Εμπορική περιοχή common: 1: λιβάδι + construction: Δρόμοι υπό κατασκευή farm: Αγρόκτημα forest: Δάσος golf: Γήπεδο γκολφ industrial: Βιομηχανική περιοχή lake: - Λίμνη + - Ταμιευτήρας military: Στρατιωτική περιοχή motorway: Αυτοκινητόδρομος park: Πάρκο @@ -686,7 +1013,7 @@ el: tourist: Τουριστικό αξιοθέατο tram: 1: τραμ - wood: Μη προσεγμένο δάσος + wood: Φυσικό Δάσος search: search: Αναζήτηση search_help: "παραδείγματα: «Alkmaar», «Regent Street, Cambridge», «CB2 5AQ», ή «ταχυδρομεία κοντά στο Lünen» περισσότερα παραδείγματα..." @@ -700,45 +1027,77 @@ el: friendly: "%e %B %Y στις %H:%M" trace: edit: + description: "Περιγραφή:" download: λήψη edit: επεξεργασία filename: "Όνομα αρχείου:" map: χάρτης owner: "Ιδιοκτήτης:" points: "Σημεία:" - tags_help: οριοθετημένο από τα κόμματα + save_button: Αποθήκευση Αλλαγών + tags: "Ετικέτες:" + tags_help: οριοθετημένο με κόμματα visibility: "Ορατότητα:" visibility_help: τι σημαίνει αυτό; + no_such_user: + body: Λυπούμαστε, δεν υπάρχει κανένας χρήστης με το όνομα % {user}. Παρακαλούμε ελέγξτε την ορθογραφία, ή ίσως ο σύνδεσμος ήταν λάθος. + heading: Ο χρήστης % {user} δεν υπάρχει + title: Άγνωστος χρήστης trace: + ago: "%{time_in_words_ago} πριν" + by: από count_points: "%{count} σημεία" + edit: επεξεργασία edit_map: Επεξεργασία Χάρτη map: χάρτης private: ΙΔΙΩΤΙΚΟ public: ΔΗΜΟΣΙΟ + view_map: Προβολή Χάρτη trace_form: - description: Περιγραφή + description: "Περιγραφή:" help: Βοήθεια - tags: Ετικέτες - visibility: Ορατότητα + tags: "Ετικέτες:" + tags_help: οριοθετημένο με κόμματα + upload_button: Αποστολή + visibility: "Ορατότητα:" + visibility_help: τι σημαίνει αυτό; trace_optionals: tags: Ετικέτες + trace_paging_nav: + next: Επόμενο » + previous: « Προηγούμενο + showing_page: Εμφάνιση σελίδας %{page} view: description: "Περιγραφή:" download: λήψη edit: επεξεργασία filename: "Όνομα αρχείου:" map: χάρτης + none: Κανένα owner: "Ιδιοκτήτης:" + points: "Σημεία:" tags: "Ετικέτες:" visibility: "Ορατότητα:" user: account: + contributor terms: + heading: "Όροι Συνεισφοράς:" + link text: τι είναι αυτό; current email address: "Τωρινή Διεύθυνση ηλεκτρονικού ταχυδρομείου:" + delete image: Αφαίρεση της τρέχουσας εικόνας + email never displayed publicly: (όχι δημόσια εμφάνιση) + flash update success: Οι πληροφορίες χρήστη ενημερώθηκαν με επιτυχία. + home location: "Τοποθεσία Σπιτιού:" image: "Εικόνα:" + image size hint: (τετράγωνες εικόνες τουλάχιστον 100 x 100 λειτουργούν καλύτερα) + keep image: Διατήρηση της τρέχουσας εικόνας + latitude: "Γεωγραφικό πλάτος:" longitude: "Γεωγραφικό μήκος:" my settings: Οι ρυθμίσεις μου new email address: "Νέα Διεύθυνση ηλεκτρονικού ταχυδρομείου:" new image: Προσθήκη εικόνας + openid: + link text: τι είναι αυτό; preferred editor: "Προτιμώμενο πρόγραμμα Επεξεργασίας:" preferred languages: "Προτιμώμενες γλώσσες:" profile description: "Περιγραφή Λογαριασμού:" @@ -747,6 +1106,10 @@ el: enabled: Ενεργοποιήθηκε. Δεν είστε πια ανώνυμος και μπορείτε να επεξεργαστείτε δεδομένα. enabled link text: τι είναι αυτό; heading: "Δημόσια επεξεργασία:" + public editing note: + heading: "Δημόσια επεξεργασία:" + replace image: Αντικατάσταση της τρέχουσας εικόνας + return to profile: Επιστροφή στο προφίλ save changes button: Αποθήκευση Αλλαγών title: Επεξεργασία λογαριασμού confirm: @@ -784,6 +1147,26 @@ el: login_button: Είσοδος lost password link: Ξεχάσατε τον κωδικό; new to osm: Νέος στο OpenStreetMap; + openid_logo_alt: Σύνδεση με ένα OpenID + openid_providers: + aol: + alt: Σύνδεση με AOL OpenID + title: Σύνδεση με AOL + google: + alt: Σύνδεση με ένα Google OpenID + title: Σύνδεση με Google + myopenid: + alt: Σύνδεση με ένα myOpenID OpenID + title: Σύνδεση με myOpenID + openid: + alt: Σύνδεση με ένα URL OpenID + title: Σύνδεση με OpenID + wordpress: + alt: Σύνδεση με ένα Wordpress OpenID + title: Σύνδεση με Wordpress + yahoo: + alt: Σύνδεση με ένα Yahoo OpenID + title: Σύνδεση με Yahoo password: "Κωδικός:" register now: Εγγραφή remember: "Αποθήκευση:" @@ -796,8 +1179,11 @@ el: lost_password: email address: "Διεύθυνση ηλεκτρονικού ταχυδρομείου:" heading: Ξεχάσατε τον κωδικό σας; + help_text: Πληκτρολογήστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου που χρησιμοποιήσατε για να εγγραφείτε, θα στείλουμε ένα σύνδεσμο, ότι μπορείτε να χρησιμοποιήσετε για να επαναφέρετε τον κωδικό πρόσβασής σας. new password button: Επαναφορά κωδικού notice email cannot find: Λυπόμαστε, δεν βρέθηκε αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου. + notice email on way: Λυπάμαι που τον χάσατε:-(, αλλά ένα μήνυμα ηλεκτρονικού ταχυδρομείου βρίσκεται στο δρόμο, ώστε να μπορείτε να τον επαναφέρετε σύντομα. + title: Χάσατε των κωδικό σας make_friend: already_a_friend: Είστε ήδη φίλοι με τον χρήστη %{name}. failed: Λυπούμαστε, απέτυχε η προσθήκη του χρήστη %{name} ως φίλο. @@ -816,13 +1202,14 @@ el: no_such_user: body: Συγγνώμη, δεν υπάρχει χρήστης με το όνομα %{user}. Είναι πιθανό να υπάρχουν ορθογραφικά λάθη ή να είναι λάθος ο σύνδεσμος μέσο του οπίου φτάσατε σε αυτήν την σελίδα. heading: Ο χρήστης %{user} δεν υπάρχει + title: Άγνωστος χρήστης popup: friend: Φίλος nearby mapper: Κοντινός χαρτογράφος your location: Η τοποθεσία σας remove_friend: not_a_friend: Ο χρήστης %{name} δεν είναι ένας από τους φίλους σας. - success: Ο χρήστης %{name} καταργήθηκε ως φίλος. + success: Ο χρήστης %{name} καταργήθηκε από φίλος. reset_password: confirm password: "Επιβεβαίωση Κωδικού:" flash changed: Ο κωδικός σας έχει αλλάξει. @@ -831,20 +1218,24 @@ el: reset: Επαναφορά Κωδικού title: Επαναφορά κωδικού suspended: - body: "

    \nΣυγνώμη, ο λογαριασμός σας έχει αυτόματα ανασταλεί λόγω\nύποπτης δραστηριότητας.\n

    \n

    \nΗ παρούσα απόφαση θα εξεταστεί από ένα διαχειριστή σύντομα, ή\nμπορείτε να επικοινωνήσετε με τον %{webmaster} αν θέλετε να το συζητήσετε αυτό το θέμα.\n

    " - heading: Ο Λογαριασμός Ανασταλεί - title: Ο Λογαριασμός Ανασταλεί + body: "

    \nΣυγνώμη, ο λογαριασμός σας έχει αυτόματα ανασταλεί λόγω\nύποπτης δραστηριότητας.\n

    \n

    \nΗ παρούσα απόφαση θα εξεταστεί από ένα διαχειριστή σύντομα, ή\nμπορείτε να επικοινωνήσετε με τον %{webmaster} αν θέλετε να συζητήσετε αυτό το θέμα.\n

    " + heading: Ο Λογαριασμός έχει Ανασταλεί + title: Ο Λογαριασμός έχει Ανασταλεί terms: agree: Συμφωνώ + consider_pd_why: Τι είναι αυτό? decline: Διαφωνώ heading: Όροι συνεισφοράς legale_names: france: Γαλλία italy: Ιταλία rest_of_world: Υπόλοιπος κόσμος + legale_select: "Επιλέξτε τη χώρα κατοικίας σας:" + title: Όροι συνεισφοράς view: activate_user: ενεργοποίηση αυτού του λογαριασμού χρήστη add as friend: προσθήκη ως φίλος + ago: (%{time_in_words_ago} πριν) confirm: Επιβεβαίωση confirm_user: επιβεβαίωση αυτού το χρήστη create_block: φραγή αυτού του χρήστη @@ -853,28 +1244,32 @@ el: delete_user: διαγραφή αυτού του χρήστη description: Περιγραφή diary: ημερολόγιο - edits: τροποποιήσεις + edits: επεξεργασίες email address: "Διεύθυνση ηλεκτρονικού ταχυδρομείου:" hide_user: απόκρυψη αυτού του χρήστη km away: "%{count}χλμ μακριά" + latest edit: "Τελευταία επεξεργασία %{ago}:" m away: "%{count}μ μακριά" mapper since: "Χαρτογράφος από:" my diary: το ημερολόγιό μου my edits: οι επεξεργασίες μου my settings: οι ρυθμίσεις μου + my traces: τα ίχνη μου + nearby users: Άλλοι κοντινοί χρήστες new diary entry: νέα καταχώρηση ημερολογίου no friends: Δεν έχετε προσθέσει φίλους ακόμα. no nearby users: Δεν υπάρχουν άλλοι χρήστες που παραδέχονται ότι χαρτογραφούν κοντά σας προς το παρόν. oauth settings: ρυθμίσεις oauth + remove as friend: αφαίρεση από φίλος role: - administrator: Αυτός ο χρήστης είναι ο διαχειριστής + administrator: Αυτός ο χρήστης είναι διαχειριστής grant: administrator: Χορήγηση πρόσβασης διαχειριστή - moderator: Χορήγηση πρόσβασης μεσολαβητή - moderator: Αυτός ο χρήστης είναι μεσολαβητής + moderator: Χορήγηση πρόσβασης συντονιστή + moderator: Αυτός ο χρήστης είναι συντονιστής revoke: administrator: Ανάκληση πρόσβασης διαχειριστή - moderator: Ανάκληση πρόσβασης μεσολαβητή + moderator: Ανάκληση πρόσβασης συντονιστή send message: αποστολή μηνύματος settings_link_text: ρυθμίσεις status: "Κατάσταση:" @@ -882,28 +1277,51 @@ el: user location: Τοποθεσία χρήστη your friends: Οι φίλοι σας user_block: + blocks_on: + heading: Κατάλογος φραγών στον %{name} + title: Φραγές στον %{name} + edit: + back: Προβολή όλων των φραγών helper: time_future: Τελειώνει σε %{time}. time_past: Τελείωση %{time} πριν. until_login: Ενεργό έως ότου ο χρήστης συνδεθεί. + new: + back: Προβολή όλων των φραγών partial: confirm: Είστε σίγουροι; creator_name: Δημιουργός edit: Επεξεργασία not_revoked: (δεν έχει ανακληθεί) + reason: Αιτία φραγής revoke: Ανάκληση! + revoker_name: Ανακλήθηκε από show: Εμφάνιση status: Κατάσταση + period: + one: 1 ώρα + other: "%{count} ώρες" revoke: + flash: Αυτή η φραγή έχει ανακληθεί. revoke: Ανάκληση! show: + back: Προβολή όλων των φραγών + confirm: Είσαι σίγουρος? edit: Επεξεργασία + reason: "Αιτία φραγής:" revoke: Ανάκληση! + show: Εμφάνιση status: Κατάσταση time_future: Τελειώνει σε %{time} - time_past: Τελείωση %{time} πριν + time_past: Τελείωσε %{time} πριν user_role: + filter: + already_has_role: Ο χρήστης έχει ήδη ρόλο %{role}. + doesnt_have_role: Ο χρήστης δεν έχει ρόλο %{role}. grant: + are_you_sure: Είστε βέβαιοι ότι θέλετε να εκχωρήσετε το ρόλο `%{role}' στον χρήστη `%{name}'? confirm: Επιβεβαίωση + heading: Επιβεβαίωση χορήγησης ρόλου + title: Επιβεβαίωση χορήγησης ρόλου revoke: confirm: Επιβεβαίωση diff --git a/config/locales/en-AU.yml b/config/locales/en-AU.yml new file mode 100644 index 000000000..e1b4a23a3 --- /dev/null +++ b/config/locales/en-AU.yml @@ -0,0 +1,2 @@ +en-AU: + dummy: dummy diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml new file mode 100644 index 000000000..6a3f3cb2a --- /dev/null +++ b/config/locales/en-GB.yml @@ -0,0 +1,2 @@ +en-GB: + dummy: dummy diff --git a/config/locales/en-US.yml b/config/locales/en-US.yml new file mode 100644 index 000000000..1e1b393da --- /dev/null +++ b/config/locales/en-US.yml @@ -0,0 +1,2 @@ +en-US: + dummy: dummy diff --git a/config/locales/en.yml b/config/locales/en.yml index 63b15233f..58965def1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -103,11 +103,11 @@ en: navigation: paging: user: - prev: "« %{id}" - next: "%{id} »" + prev: "« %{id}" + next: "%{id} »" all: - prev: "« %{id}" - next: "%{id} »" + prev: "« %{id}" + next: "%{id} »" user: name_changeset_tooltip: "View edits by %{user}" prev_changeset_tooltip: "Previous edit by %{user}" @@ -296,8 +296,8 @@ en: changeset: changeset_paging_nav: showing_page: "Showing page %{page}" - next: "Next »" - previous: "« Previous" + next: "Next »" + previous: "« Previous" changeset: id: "#%{id}" still_editing: "(still editing)" @@ -318,16 +318,19 @@ en: title_user: "Changesets by %{user}" title_bbox: "Changesets within %{bbox}" title_user_bbox: "Changesets by %{user} within %{bbox}" + title_friend: "Changesets by your friends" heading: "Changesets" heading_user: "Changesets" heading_bbox: "Changesets" heading_user_bbox: "Changesets" + heading_friend: "Changesets" description: "Recent changes" description_user: "Changesets by %{user}" description_bbox: "Changesets within %{bbox}" description_user_bbox: "Changesets by %{user} within %{bbox}" + description_friend: "Changesets by your friends" timeout: sorry: "Sorry, the list of changesets you requested took too long to retrieve." diary_entry: @@ -966,7 +969,7 @@ en: wiki_title: Wiki site for the project documentation: Documentation documentation_title: Documentation for the project - copyright: "Copyright & License" + copyright: "Copyright & License" community_blogs: "Community Blogs" community_blogs_title: "Blogs from members of the OpenStreetMap community" foundation: Foundation @@ -1434,8 +1437,8 @@ en: visibility: "Visibility:" trace_paging_nav: showing_page: "Showing page %{page}" - next: "Next »" - previous: "« Previous" + next: "Next »" + previous: "« Previous" trace: pending: "PENDING" count_points: "%{count} points" @@ -1498,7 +1501,7 @@ en: url: "Request Token URL:" access_url: "Access Token URL:" authorize_url: "Authorise URL:" - support_notice: "We support HMAC-SHA1 (recommended) as well as plain text in ssl mode." + support_notice: "We support HMAC-SHA1 (recommended) as well as plain text in SSL mode." edit: "Edit Details" requests: "Requesting the following permissions from the user:" allow_read_prefs: "read their user preferences." @@ -1560,6 +1563,7 @@ en: webmaster: webmaster auth failure: "Sorry, could not log in with those details." notice: "Find out more about OpenStreetMap's upcoming license change (translations) (discussion)" + notice_terms: "OpenStreetMap is moving to a new licence on 1st April 2012. It's just as open as our current one, but the legal bits are much better suited to our map database. We'd love to keep your contributions in OpenStreetMap, but we can only do so if you agree to let us distribute them under the new licence. Otherwise, we'll have to remove them from the database.

    Please log in, then take a few seconds to review and accept the new terms. Thank you!" openid missing provider: "Sorry, could not contact your OpenID provider" openid invalid: "Sorry, your OpenID seems to be malformed" openid_logo_alt: "Log in with an OpenID" @@ -1674,6 +1678,10 @@ en: add as friend: add as friend mapper since: "Mapper since:" ago: "(%{time_in_words_ago} ago)" + ct status: "Contributor terms:" + ct undecided: Undecided + ct declined: Declined + ct accepted: Accepted %{ago} ago latest edit: "Latest edit %{ago}:" email address: "Email address:" created from: "Created from:" @@ -1708,6 +1716,7 @@ en: unhide_user: "unhide this user" delete_user: "delete this user" confirm: "Confirm" + friends_changesets: "Browse all changesets by friends" popup: your location: "Your location" nearby mapper: "Nearby mapper" @@ -1946,7 +1955,8 @@ en: mapnik: Mapnik osmarender: Osmarender cycle_map: Cycle Map - noname: NoName + transport_map: Transport Map + mapquest: MapQuest Open overlays: maplint: Maplint site: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 3f56ab997..98f73d618 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -231,8 +231,8 @@ eo: no_edits: (neniaj redaktoj) still_editing: (estas ankoraÅ­ redaktata) changeset_paging_nav: - next: Sekvanta » - previous: "« AntaÅ­a" + next: Sekvanta » + previous: « AntaÅ­a showing_page: Montrante paĝon changesets: area: Areo diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml new file mode 100644 index 000000000..071a1147d --- /dev/null +++ b/config/locales/es-AR.yml @@ -0,0 +1,2 @@ +es-AR: + dummy: dummy diff --git a/config/locales/es-CL.yml b/config/locales/es-CL.yml new file mode 100644 index 000000000..c5102a108 --- /dev/null +++ b/config/locales/es-CL.yml @@ -0,0 +1,2 @@ +es-CL: + dummy: dummy diff --git a/config/locales/es-CO.yml b/config/locales/es-CO.yml new file mode 100644 index 000000000..f44f89184 --- /dev/null +++ b/config/locales/es-CO.yml @@ -0,0 +1,2 @@ +es-CO: + dummy: dummy diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml new file mode 100644 index 000000000..71ec19581 --- /dev/null +++ b/config/locales/es-MX.yml @@ -0,0 +1,2 @@ +es-MX: + dummy: dummy diff --git a/config/locales/es-PE.yml b/config/locales/es-PE.yml new file mode 100644 index 000000000..3e239253c --- /dev/null +++ b/config/locales/es-PE.yml @@ -0,0 +1,2 @@ +es-PE: + dummy: dummy diff --git a/config/locales/es.yml b/config/locales/es.yml index 8636f4b69..9aa6f274a 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -12,6 +12,7 @@ # Author: Toliño # Author: Translationista # Author: VegaDark +# Author: Vivaelcelta # Author: Xuacu es: activerecord: @@ -277,8 +278,8 @@ es: still_editing: (todavía en edición) view_changeset_details: Ver detalles del conjunto de cambios changeset_paging_nav: - next: Siguiente » - previous: "« Anterior" + next: Siguiente » + previous: « Anterior showing_page: Mostrando página %{page} changesets: area: Área @@ -892,7 +893,8 @@ es: map: base: cycle_map: Mapa ciclista - noname: Sin nombres + mapquest: MapQuest Open + transport_map: Mapa de transporte site: edit_disabled_tooltip: Haga zoom para editar el mapa edit_tooltip: Edita el mapa @@ -1361,8 +1363,8 @@ es: trace_optionals: tags: Etiquetas trace_paging_nav: - next: Siguiente » - previous: "« Anterior" + next: Siguiente » + previous: « Anterior showing_page: Mostrando página %{page} view: delete_track: Borrar esta traza diff --git a/config/locales/et.yml b/config/locales/et.yml index 64be2da4e..6d661ae1e 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -33,6 +33,7 @@ et: visible: Nähtav user: description: Kirjeldus + display_name: Näita nime email: E-posti aadress languages: Keeled pass_crypt: Parool @@ -44,14 +45,18 @@ et: node: Sõlm node_tag: Sõlme silt old_node: Vana sõlm + old_relation: Vana relatsioon old_way: Vana joon + relation: Relatsioon user: Kasutaja way: Joon way_node: Joone sõlm way_tag: Joone silt browse: changeset: + changeset: "Muutustekogu: %{id}" download: Laadi %{changeset_xml_link} või %{osmchange_xml_link} + title: Muutustekogu changeset_details: belongs_to: "Kuulub:" box: ala @@ -59,6 +64,8 @@ et: created_at: "Loodud:" common_details: changeset_comment: "Kommentaar:" + deleted_at: "Kustutamise aeg:" + deleted_by: "Kustutaja:" edited_at: "Muudetud:" edited_by: "Muutja:" version: "Versioon:" @@ -67,6 +74,9 @@ et: entry_role: Relatsioon %{relation_name} (kui %{relation_role}) map: deleted: kustutatud + edit: + area: Muuda ala + relation: Muuda relatsiooni larger: area: Vaata ala suuremal kaardil node: Vaata sõlme suuremal kaardil @@ -75,9 +85,11 @@ et: loading: Laen... navigation: all: + next_changeset_tooltip: Järgmine muutustekogu next_node_tooltip: Järgmine sõlm next_relation_tooltip: Järgmine relatsioon next_way_tooltip: Järgmine joon + prev_changeset_tooltip: Eelmine muutustekogu prev_node_tooltip: Eelmine sõlm prev_relation_tooltip: Eelmine relatsioon prev_way_tooltip: Eelmine joon @@ -200,8 +212,8 @@ et: no_comment: (puudub) still_editing: redigeerimine pooleli changeset_paging_nav: - next: Järgmine » - previous: "« Eelmine" + next: Järgmine » + previous: « Eelmine showing_page: Näitan lehekülge %{page} changesets: area: Ala @@ -231,6 +243,7 @@ et: use_map_link: kasuta kaarti list: new: Uus päeviku sissekanne + new_title: Lisa päevikusse uus sissekanne newer_entries: Uuemad... no_entries: Päevikus pole sissekandeid older_entries: Vanemad... @@ -242,6 +255,7 @@ et: location: "Asukoht:" view: Vaata no_such_user: + body: Kahjuks ei ole meil kasutajat %{user}. Nimes võib olla kirjaviga või link võib olla vigane. heading: Kasutajat %{user} ei ole olemas view: leave_a_comment: Kommenteeri @@ -581,7 +595,7 @@ et: base: cycle_map: Rattakaart site: - edit_disabled_tooltip: Kaardi redigeerimiseks suumi lähemale + edit_disabled_tooltip: Kaardi redigeerimiseks suurenda kaarti edit_tooltip: Töötle kaarti history_tooltip: Vaata tehtud muudatusi layouts: @@ -590,7 +604,8 @@ et: copyright: Autoriõigused ja litsents documentation: Dokumentatsioon documentation_title: Projekti dokumentatsioon - donate_link_text: annetused + donate: Toeta OpenStreetMap'i %{link} Riistvara Uuendamise Fondi. + donate_link_text: annetades edit: Redigeeri edit_with: Redigeeri %{editor}-ga export: Ekspordi @@ -640,11 +655,12 @@ et: date: Kuupäev from: Saatja my_inbox: Minu postkast + no_messages_yet: Sul ei ole veel sõnumeid. Miks mitte kontakteeruda mõne %{people_mapping_nearby_link}? outbox: Saadetud kirjad - people_mapping_nearby: lähedalolevad kaardistajad + people_mapping_nearby: lähedaloleva kaardistajaga subject: Teema title: Saabunud kirjad - you_have: Sul on %{new_count} uusi sõnumeid ja %{old_count} vanad sõnumid + you_have: Sul on %{new_count} uut sõnumit ja %{old_count} vana sõnumit mark: as_read: Sõnum on märgitud loetuks as_unread: Sõnum on märgitud kui lugemata @@ -654,24 +670,36 @@ et: reply_button: Vasta unread_button: Märgi mitteloetuks new: + back_to_inbox: Tagasi saabunud kirjade juurde body: Sisu + limit_exceeded: Sa oled hiljuti saatnud palju sõnumeid. Palun oota mõnda aega enne kui proovid veel sõnumeid saata. message_sent: Sõnum saadetud send_button: Saada send_message_to: Saada kasutajale %{name} uus sõnum subject: Teema title: Saada sõnum + no_such_message: + body: Vabandust kuid sellise id'ga sõnumit ei ole olemas. + heading: Sellist sõnumit ei ole olemas + title: Sellist sõnumit ei ole olemas no_such_user: + body: Vabandust kuid sellise nimega kasutajat ei ole olemas. heading: Kasutajat ei leitud title: Kasutajat ei leitud outbox: date: Kuupäev inbox: saabunud kirjad my_inbox: "%{inbox_link}" + no_sent_messages: Sul ei ole veel saadetud sõnumeid. Miks mitte kontakteeruda mõne %{people_mapping_nearby_link}? + outbox: saadetud sõnumid people_mapping_nearby: lähedalolevad kaardistajad subject: Teema + title: Saadetud sõnumid to: Kellele + you_have_sent_messages: Sul on %{count} saadetud sõnumit read: back_to_inbox: Tagasi postkasti + back_to_outbox: Tagasi saadetud sõnumite juurde date: Kuupäev from: Kellelt reply_button: Vasta @@ -722,7 +750,7 @@ et: edit: user_page_link: kasutajaleht index: - js_1: Sa kas kasutad veebilehitsejat, mis ei toeta JavaScript'i või sa oled JavaScripti' ära keelanud. + js_1: Sa kas kasutad veebilehitsejat, mis ei toeta JavaScript'i või sa oled JavaScript'i ära keelanud. license: project_name: OpenStreetMap projekt permalink: Püsilink @@ -832,10 +860,13 @@ et: edit: redigeeri edit_map: Redigeeri kaarti more: rohkem + pending: OOTEL + trace_details: Vaata Jälje Detaile view_map: Vaata kaarti trace_form: description: Kirjeldus help: Abi + tags: "Sildid:" upload_button: Laadi üles upload_gpx: "Laadi GPX-fail üles:" visibility: Nähtavus @@ -845,17 +876,24 @@ et: trace_optionals: tags: Sildid trace_paging_nav: - next: Järgmine » + next: Järgmine » + previous: « Eelmine + showing_page: Näitan lehekülge %{page} view: + delete_track: Kustuta see jälg description: "Kirjeldus:" download: laadi alla edit: redigeeri + edit_track: Muuda seda jälge filename: "Failinimi:" map: kaardil + none: Puuduvad owner: "Omanik:" + pending: OOTEL points: "Punktid:" start_coordinates: "Alguskoordinaadid:" tags: "Sildid:" + trace_not_found: Jälge ei leitud! uploaded: "Üles laaditud:" visibility: "Nähtavus:" user: @@ -877,6 +915,10 @@ et: new email address: "Uus e-posti aadress:" new image: Lisa pilt no home location: Sa pole oma kodupaika märkinud. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: mis see on? + openid: "OpenID:" preferred editor: "Vaikimisi redaktor:" preferred languages: "Eelistatud keeled:" profile description: "Profiili kirjeldus:" @@ -914,6 +956,7 @@ et: heading: Logi sisse login_button: Logi sisse lost password link: Salasõna ununes? + openid: "%{logo} OpenID:" password: "Parool:" remember: "Jäta mind meelde:" title: Sisselogimise lehekülg @@ -929,6 +972,7 @@ et: title: Unustatud salasõna make_friend: already_a_friend: Sa oled kasutajaga %{name} juba sõber. + failed: Vabandust, kasutaja %{name} sõbraks lisamine ebaõnnestus. success: "%{name} on nüüd Sinu sõber." new: confirm email address: "Kinnita e-posti aadress:" @@ -939,6 +983,7 @@ et: email address: "E-posti aadress:" fill_form: Täitke vorm ning me saadame teile e-posti konto aktiveerimiseks. heading: Loo uus kasutajanimi + openid: "%{logo} OpenID:" password: "Parool:" title: Loo uus konto no_such_user: @@ -951,6 +996,7 @@ et: your location: Sinu asukoht remove_friend: not_a_friend: "%{name} ei ole üks sinu sõpradest." + success: "%{name} eemaldati sinu sõprade hulgast." reset_password: confirm password: "Kinnita parool:" flash changed: Sinu parool on muudetud. @@ -1003,6 +1049,7 @@ et: spam score: "Rämpsposti tulemus:" status: "Staatus:" traces: jäljelogid + unhide_user: muuda see kasutaja nähtavaks user location: Kasutaja asukoht your friends: Sinu sõbrad user_block: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 0ab267969..ba0277633 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -151,8 +151,8 @@ eu: big_area: (handia) no_comment: (bat ere) changeset_paging_nav: - next: Hurrengoa » - previous: "« Aurrekoa" + next: Hurrengoa » + previous: « Aurrekoa changesets: id: ID saved_at: Noiz gordeta @@ -521,10 +521,6 @@ eu: river: Ibai waterfall: Ur-jauzi weir: Uharka - javascripts: - map: - base: - noname: Izenik gabe layouts: edit: Aldatu export: Esportatu @@ -632,7 +628,7 @@ eu: user_page_link: Lankide orria index: license: - license_name: Creative Commons-en Aitortu-Partekatu 2.0 + license_name: Creative Commons Aitortu-PartekatuBerdin 2.0 project_name: OpenStreetMap proiektua key: table: @@ -716,8 +712,8 @@ eu: trace_optionals: tags: Etiketak trace_paging_nav: - next: Hurrengoa » - previous: "« Aurrekoa" + next: Hurrengoa » + previous: « Aurrekoa view: description: "Deskribapena:" download: jaitsi @@ -739,7 +735,7 @@ eu: latitude: "Latitude:" longitude: "Longitude:" my settings: Nire aukerak - new email address: "Eposta helbide berria:" + new email address: "E-posta helbide berria:" new image: Irudi bat gehitu preferred editor: "Lehenetsitako Editorea:" preferred languages: "Hobetsitako hizkuntzak:" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 607c6b2d0..70a3338ec 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -6,9 +6,12 @@ # Author: Reza1615 # Author: Sahim # Author: Wayiran +# Author: ZxxZxxZ fa: activerecord: attributes: + diary_comment: + body: بدنه diary_entry: language: زبان latitude: عرض جغرافیایی @@ -19,28 +22,45 @@ fa: friend: دوست user: کاربر message: + body: بدنه + recipient: گیرنده + sender: فرستنده title: عنوان trace: description: توضیح latitude: عرض جغرافیایی longitude: طول جغرافیایی name: نام + public: عمومی size: اندازه user: کاربر + visible: قابل دیدن user: + active: فعال + description: توضیحات + display_name: نام نمایشی email: پست الکترونیکی languages: زبان ها pass_crypt: کلمه عبور models: + acl: دسترسی به لیست کنترل changeset: مجموعه تغییرات country: کشور friend: دوست language: زبان message: پیغام node: گره + node_tag: تگ گره relation: ارتباط + session: نشست + trace: ردیابی + tracepoint: ردیابی نقطه + tracetag: ردیابی برچسب user: کاربر + user_preference: ترجیحات کاربر way: راه + way_node: گره راه + way_tag: برچسب راه browse: changeset: changeset: "مجموعه تغییرات: %{id}" @@ -67,15 +87,22 @@ fa: show_area_box: نمایش جعبه منطقه common_details: changeset_comment: "نظر:" + deleted_at: "حذف‌شده در:" + deleted_by: "حذف‌شده توسط:" edited_at: "ویرایش در:" edited_by: "ویرایش توسط:" - in_changeset: "تغییرات در :" - version: "نسخه :" + in_changeset: "تغییرات در:" + version: "نسخه:" containing_relation: entry: ارتباطات %{relation_name} entry_role: رابطه %{relation_name} (به عنوان %{relation_role}) map: deleted: حذف + edit: + area: ویرایش منطقه + node: ویرایش گره + relation: ویرایش ارتباط + way: ویرایش راه larger: area: مشاهده منطقه روی نقشه بزرگتر node: مشاهده منطقه روی نقشه بزرگتر @@ -105,7 +132,7 @@ fa: view_history: نمایش تاریخچه node_details: coordinates: "مختصات:" - part_of: "قسمتی از:" + part_of: "بخشی از:" node_history: download: "%{download_xml_link} یا %{view_details_link}" download_xml: بارگیری XML @@ -130,7 +157,7 @@ fa: view_history: نمایش تاریخچه relation_details: members: "اعضا:" - part_of: "قسمتی از:" + part_of: "بخشی از:" relation_history: download: "%{download_xml_link} یا %{view_details_link}" download_xml: بارگیری XML @@ -152,6 +179,7 @@ fa: details: جزئیات drag_a_box: " جعبه‌ای را روی نقشه برای انتخاب یک منطقه بکشید" edited_by_user_at_timestamp: "[[timestamp]] در [[user]] ویرایش توسط" + hide_areas: پنهان‌کردن منطقه‌ها history_for_feature: "[[feature]] تاریخچه برای" load_data: بارگذاری داده ها loaded_an_area_with_num_features: " شما منطقه‌ای را بارگذاری کردید که شامل[[num_features]] می‌شود. به طورکلی بعضی از مرورگرها نمی توانند با این مقدار اطلاعات تصویری کار کنند.کلا مرورگرها برای نمایش اطلاعات کمتر از 100 مورد در زمان در بهترین وضعیت هستند: و هر میزان دیگر میتواند مرورگر ار کند یا قفل کند.اگر شما میخواهید این اطلاعات دیده شود دکمه زیر را فشار دهید." @@ -174,6 +202,7 @@ fa: node: گره way: راه private_user: کاربر شخصی + show_areas: نمایش منطقه‌ها show_history: نمایش سابقه unable_to_load_size: "نمی‌تواند بارگذاری کند: اندازه جعبه ارتباطی [[bbox_size]] خیلی زیاد هست و باید کمتر از %{max_bbox_size} باشد" wait: صبر کنید... @@ -201,24 +230,34 @@ fa: way_details: also_part_of: other: "همچنین بخشی از مسیرها %{related_ways} " - nodes: "گره ها :" - part_of: "قسمتی از:" + nodes: "گره‌ها:" + part_of: "بخشی از:" way_history: download: "%{download_xml_link} یا %{view_details_link}" download_xml: بارگیری XML view_details: نمایش جزئیات - way_history: تاریخچه مسیر - way_history_title: "تاریخچه مسیر : %{way_name}" + way_history: تاریخچهٔ راه + way_history_title: "تاریخچهٔ راه: %{way_name}" changeset: changeset: anonymous: گمنام big_area: (بزرگ) + no_comment: (هیچ) + no_edits: (بدون ویرایش) + show_area_box: نمایش جعبهٔ منطقه + still_editing: (هنوز در حال ویرایش) changeset_paging_nav: - next: بعدی » - previous: "« قبلی" + next: بعدی » + previous: « قبلی + showing_page: نمایش صفحهٔ %{page} changesets: area: منطقه + comment: توضیح + id: شناسه + saved_at: ذخیره شد در user: کاربر + list: + description: تغییرات اخیر diary_entry: diary_comment: confirm: تأیید @@ -227,15 +266,26 @@ fa: one: 1 نظر other: "%{count} نظر" confirm: تأیید + edit_link: ویرایش این مطلب + hide_link: نهفتن این مطلب + reply_link: پاسخ به این پیام edit: + body: "بدنه:" language: "زبان:" latitude: "عرض جغرافیایی:" + location: "مکان:" longitude: "طول جغرافیایی:" save_button: ذخیره + subject: "موضوع:" + use_map_link: استفاده از نقشه location: edit: ویرایش + location: "مکان:" view: نمایش + no_such_user: + title: چنین کاربری وجود ندارد view: + leave_a_comment: ارسال نظر login: ورود به سیستم save_button: ذخیره editor: @@ -276,12 +326,12 @@ fa: heading: منطقه بیش از حد بزرگ zoom: بزگ‌نمایی start_rjs: - add_marker: اضافه کردن نشانگر به نقشه + add_marker: افزودن نشانگر به نقشه change_marker: تغییر موقعیت نشانه‌گذار click_add_marker: برای اضافه کردن نشانگر بر روی نقشه کلیک کنید drag_a_box: " جعبه‌ای را روی نقشه برای انتخاب یک منطقه بکشید" export: صدور - manually_select: به صورت دستی منطقه دیگری را انتخاب کنید + manually_select: به صورت دستی منطقهٔ دیگری را انتخاب کنید view_larger_map: نمایش نقشه بزرگتر geocoder: description: @@ -320,97 +370,218 @@ fa: prefix: amenity: airport: فرودگاه - atm: عابر بانک + arts_centre: هنرکده + atm: عابربانک + auditorium: سالن bank: بانک + bar: کافه bench: نیمکت - brothel: فاحشه خانه + bicycle_parking: پارکینگ دوچرخه + bicycle_rental: اجارهٔ دوچرخه + brothel: فاحشه‌خانه + bureau_de_change: دفتر ارز + bus_station: ایستگاه اتوبوس cafe: کافه + car_rental: اجارهٔ خودرو + car_sharing: خودروی قرضی + car_wash: کارواش + casino: کازینو cinema: سینما clinic: درمانگاه + club: باشگاه + college: کالج + community_centre: مرکز شهر courthouse: دادگاه - dentist: دندانپزشک + crematorium: کوره + dentist: دندانپزشکی + doctors: پزشکان dormitory: خوابگاه دانشجویی + drinking_water: آب آشامیدنی + driving_school: آموزشگاه رانندگی embassy: سفارت - fire_station: آتش نشانی + emergency_phone: تلفن اضطراری + fast_food: فست فود + ferry_terminal: ترمینال کشتی + fire_hydrant: شیر آتش‌نشانی + fire_station: آتش‌نشانی + fountain: چشمه fuel: پمپ بنزین + grave_yard: محوطهٔ گورستان + gym: مرکز تناسب اندام / سالن ورزش + hall: سالن + health_centre: مركز بهداشت hospital: بیمارستان hotel: هتل - ice_cream: بستنی فروشی + hunting_stand: ایستگاه شکار + ice_cream: بستنی‌فروشی kindergarten: کودکستان library: کتابخانه market: بازار marketplace: بازار + mountain_rescue: نجات کوهستان + nightclub: کلوب شبانه + nursery: مهد کودک + nursing_home: خانهٔ سالمندان office: دفتر park: پارک parking: پارکینگ pharmacy: داروخانه + place_of_worship: نیایشگاه police: پلیس post_box: صندوق پست post_office: اداره پست + preschool: پیش‌دبستان prison: زندان pub: میخانه + public_building: ساختمان عمومی + public_market: بازار عمومی + reception_area: محوطه پذیرش recycling: بازیافت restaurant: رستوران + retirement_home: خانهٔ سالمندان + sauna: سونا school: مدرسه + shelter: سایبان shop: فروشگاه + shopping: خرید + social_club: باشگاه اجتماعی + studio: استودیو supermarket: سوپرمارکت taxi: تاکسی + telephone: تلفن عمومی theatre: تئاتر toilets: توالت - townhall: شهر داری + townhall: شهرداری university: دانشگاه - waste_basket: سطل اشغال + vending_machine: عابربانک + veterinary: جراح دامپزشک + village_hall: دهداری + waste_basket: سطل آشغال + wifi: دسترسی وای‌فای + youth_centre: مرکز جوانان + boundary: + administrative: مرز کشوری building: + apartments: بلوک آپارتمان + block: بلوک ساختمان + bunker: پناهگاه + chapel: کلیسا church: کلیسا + city_hall: سالن شهر + commercial: ساختمان تجاری + dormitory: خوابگاه دانشجویی + entrance: ورودی ساختمان + faculty: ساختمان دانشکده + farm: ساختمان در مزرعه + flats: آپارتمان garage: گاراژ + hall: سالن hospital: ساختمان بیمارستان hotel: هتل house: خانه + industrial: ساختمان صنعتی + office: ساختمان اداری + public: ساختمان عمومی + residential: ساختمان مسکونی + retail: معاملات املاک + school: ساختمان مدرسه shop: فروشگاه stadium: ورزشگاه + store: فروشگاه + terrace: تراس tower: برج + train_station: ایستگاه راه‌آهن + university: ساختمان دانشگاه highway: bus_stop: ایستگاه اتوبوس + construction: بزرگراه در دست ساخت + cycleway: مسیر چرخه + distance_marker: نشانگر مسافت + emergency_access_point: نقطهٔ دسترسی اضطراری footway: پیاده رو + ford: فورد gate: دروازه + minor: جادهٔ فرعی motorway: اتوبان + motorway_junction: اتصال بزرگراه‌ها + motorway_link: بزرگراه path: مسیر pedestrian: پیاده راه + platform: پلت‌فرم + primary: جادهٔ اصلی + primary_link: جادهٔ اصلی residential: مسکونی road: جاده + secondary: جادهٔ فرعی + secondary_link: جادهٔ فرعی + services: خدمات بزرگراه‌ها steps: پله + track: ردیابی trunk: بزرگراه trunk_link: بزرگراه + unclassified: جادهٔ طبقه‌بندی‌نشده historic: + archaeological_site: پایگاه باستان‌شناسی + battlefield: میدان جنگ + boundary_stone: سنگ مرزی + building: ساختمان castle: قلعه church: کلیسا + house: خانه + icon: نماد + memorial: یادبود + mine: معدن + monument: یادبود museum: موزه + ruins: خرابه‌ها tower: برج landuse: cemetery: گورستان + commercial: منطقهٔ تجاری + construction: ساخت‌وساز + farm: مزرعه farmland: زمین کشاورزی + farmyard: زمین کشاورزی forest: جنگل + grass: چمن + greenfield: فضای سبز + industrial: ناحیهٔ صنعتی + military: منطقهٔ نظامی mine: معدن mountain: کوه park: پارک - railway: ریل + railway: راه‌آهن + reservoir: مخزن + retail: خرده‌فروشی + vineyard: تاکستان + wetland: تالاب + wood: چوب leisure: - fishing: نواحی ماهی‌گیری + beach_resort: تفریحگاه ساحلی + common: سرزمین مشترک + fishing: منطقهٔ ماهی‌گیری garden: باغ + golf_course: زمین گلف marina: تفریح‌گاه ساحلی + miniature_golf: گلف کوچک park: پارک + pitch: زمین ورزشی + playground: زمین بازی + sports_centre: مرکز ورزشی stadium: ورزشگاه swimming_pool: استخر شنا + water_park: پارک آبی natural: - bay: خالیج + bay: خلیج beach: ساحل cave_entrance: ورودی غار channel: کانال - coastline: ساحل + coastline: خط ساحلی fell: قطع کردن glacier: یخچال طبیعی hill: تپه island: جزیره + land: زمین moor: دشت mud: گل peak: قله @@ -422,6 +593,8 @@ fa: valley: دره volcano: کوه آتشفشان water: اب + wetland: تالاب + wetlands: تالاب‌ها wood: جنگل place: airport: فرودگاه @@ -429,10 +602,13 @@ fa: country: کشور farm: مزرعه house: خانه + houses: خانه‌ها island: جزیره islet: جزیره کوچک locality: محل + moor: دشت postcode: کدپستی + region: منطقه sea: دریا suburb: محله town: شهر @@ -463,28 +639,32 @@ fa: waterway: canal: کانال dam: سد + lock: قفل river: رودخانه waterfall: ابشار html: dir: rtl - javascripts: - map: - base: - noname: بینام layouts: - copyright: کپی رایت و مجوز + copyright: حق تکثیر و مجوز + documentation: مستندات + documentation_title: مستندات برای پروژه edit: ویرایش export: صدور + foundation_title: بنیاد OpenStreetMap help: راهنما history: تاریخچه + home_tooltip: رفتن به مکان خانگی intro_3_partners: ویکی‌ log_in: ورود به سیستم + logo: + alt_text: لوگوی OpenStreetMap logout: خروج logout_tooltip: خروج از سیستم make_a_donation: text: کمک مالی title: OpenStreetMap پشتیبانی با اهداء پولی sign_up: ثبت نام + sign_up_tooltip: ایجاد یک حساب کاربری برای ویرایش user_diaries: یادداشت کاربر view: نمایش view_tooltip: نمایش نقشه @@ -510,10 +690,22 @@ fa: title: صندوق دریافتی message_summary: delete_button: حذف + read_button: علامت‌گذاری به عنوان خوانده‌شده reply_button: پاسخ + unread_button: علامت‌گذاری به عنوان خوانده‌شده new: - send_button: ارسال + back_to_inbox: بازگشت به صندوق پستی + body: بدنه + message_sent: پیام فرستاده شد + send_button: بفرست + send_message_to: فرستادن پیام به %{name} subject: عنوان + title: فرستادن پیام + no_such_message: + title: چنین پیغامی وجود ندارد + no_such_user: + heading: چنین کاربری وجود ندارد + title: چنین کاربری وجود ندارد outbox: date: تاریخ inbox: صندوق دریافتی @@ -523,11 +715,14 @@ fa: title: صندوق خروجی to: به read: + back_to_inbox: بازگشت به صندوق پستی date: تاریخ from: از + reading_your_sent_messages: خواندن پیام‌هایی که فرستاده‌اید reply_button: پاسخ subject: عنوان to: به + unread_button: علامت‌گذاری به عنوان خوانده‌شده sent_message_summary: delete_button: حذف notifier: @@ -539,12 +734,15 @@ fa: greeting: سلام ، gpx_notification: greeting: سلام ، + with_description: با توضیحات lost_password_html: greeting: سلام ، lost_password_plain: greeting: سلام ، message_notification: hi: سلام %{to_user}, + signup_confirm_html: + greeting: سلام! signup_confirm_plain: greeting: سلام! oauth_clients: @@ -659,8 +857,8 @@ fa: trace_optionals: tags: برچسب‌ها trace_paging_nav: - next: بعدی » - previous: "« قبلی" + next: بعدی » + previous: « قبلی showing_page: نمایش صفحه %{page} view: delete_track: حذف این رهگیری @@ -799,7 +997,7 @@ fa: no_such_user: body: با عرض پوزش ، هیچ کاربر با نام %{user} وجود ندارد. لطفا املایی خود نام کاربری را بازبینی کنید یا شاید لینکی که کلیک کردید اشتباه است. heading: کاربر %{user} وجود ندارد - title: چنین کاربری وجود ندارد. + title: چنین کاربری وجود ندارد popup: friend: دوست nearby mapper: نقشه‌ترسیم کننده در این اطراف @@ -906,7 +1104,7 @@ fa: not_an_administrator: فقط مدیران می توانند نقش مدیریت کاربرها را انجام دهند ، و شما مدیر نیستید. grant: are_you_sure: آیا اطمینان دارید که می خواهید نقش '%{role}' از کاربر '%{name}' را اعطا کنید؟ - confirm: تائید + confirm: تأیید fail: نمی‌توان نقش %{role} کاربر %{name} را اهدا کرد . لطفا از معتبر بودن کاربر و نقش اطمینان حاصل نمایید heading: تایید اعطای نقش title: تایید اعطای نقش diff --git a/config/locales/fi.yml b/config/locales/fi.yml index db346b57c..a74300c85 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -263,7 +263,7 @@ fi: view_changeset_details: Näytä muutoskokoelman tarkemmat tiedot changeset_paging_nav: next: Seuraava → - previous: ←Edellinen + previous: ← Edellinen showing_page: Sivu %{page} changesets: area: Alue @@ -843,7 +843,6 @@ fi: map: base: cycle_map: Pyöräilykartta - noname: Nimettömät tiet site: edit_tooltip: Muokkaa karttaa layouts: @@ -1221,13 +1220,13 @@ fi: trackable: SEURATTAVA view_map: Selaa karttaa trace_form: - description: Kuvaus + description: "Kuvaus:" help: Ohje tags: Tägit tags_help: pilkuilla erotettu lista upload_button: Tallenna upload_gpx: Tallenna GPX-jälki - visibility: Näkyvyys + visibility: "Näkyvyys:" visibility_help: mitä tämä tarkoittaa? trace_header: see_all_traces: Näytä kaikki jäljet @@ -1237,8 +1236,8 @@ fi: trace_optionals: tags: Tägit trace_paging_nav: - next: Seuraava » - previous: "« Edellinen" + next: Seuraava » + previous: « Edellinen showing_page: Sivu %{page} view: delete_track: Poista tämä jälki @@ -1284,6 +1283,8 @@ fi: new email address: "Uusi sähköpostiosoite:" new image: Lisää kuva no home location: Et ole määrittänyt kodin sijaintia. + openid: + openid: "OpenID:" preferred languages: "Kielivalinnat:" profile description: "Kuvaustekstisi:" public editing: @@ -1318,6 +1319,7 @@ fi: list: heading: Käyttäjät hide: Piilota valitut käyttäjät + title: Käyttäjät login: account not active: Käyttäjätunnustasi ei ole vielä aktivoitu.
    Aktivoi käyttäjätunnuksesi napsauttamalla sähköpostitse saamaasi vahvistuslinkkiä. auth failure: Kirjautuminen epäonnistui. diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml new file mode 100644 index 000000000..c2b5595e8 --- /dev/null +++ b/config/locales/fr-CA.yml @@ -0,0 +1,2 @@ +fr-CA: + dummy: dummy diff --git a/config/locales/fr-CH.yml b/config/locales/fr-CH.yml new file mode 100644 index 000000000..83d0d7886 --- /dev/null +++ b/config/locales/fr-CH.yml @@ -0,0 +1,2 @@ +fr-CH: + dummy: dummy diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5a07231a5..a795a0c8d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -6,6 +6,7 @@ # Author: Damouns # Author: EtienneChove # Author: F.rodrigo +# Author: Gomoko # Author: Hashar # Author: IAlex # Author: Jean-Frédéric @@ -284,8 +285,8 @@ fr: still_editing: (en cours de modification) view_changeset_details: Afficher les détails du groupe de modifications changeset_paging_nav: - next: Suivant » - previous: "« Précédent" + next: Suivant » + previous: « Précédent showing_page: Affichage de la page %{page} changesets: area: Zone @@ -899,7 +900,8 @@ fr: map: base: cycle_map: Carte cyclable - noname: SansNom + mapquest: MapQuest ouverte + transport_map: Carte de transport site: edit_disabled_tooltip: Zoomez en avant pour modifier la carte edit_tooltip: Modifier la carte @@ -910,7 +912,7 @@ fr: layouts: community_blogs: Blogs de la communauté community_blogs_title: Blogs de membres de la communauté OpenStreetMap - copyright: Copyright & Licence + copyright: Copyright & Licence documentation: Documentation documentation_title: Documentation du projet donate: Soutenez OpenStreetMap, %{link} au fond pour améliorer le matériel. @@ -969,7 +971,7 @@ fr: english_link: original en anglais text: En cas de conflit entre cette page et la page %{english_original_link}, la version anglaise prime title: À propos de cette traduction - legal_babble: "

    Copyright et licence

    \n

    \n OpenStreetMap est un ensemble de données ouvertes, disponibles sous la licence Creative\n Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Vous êtes libre de copier, distribuer, transmettre et adapter nos cartes\n et données, à condition que vous créditiez OpenStreetMap et ses\n contributeurs. Si vous modifiez ou utilisez nos cartes ou données dans d'autres travaux,\n vous ne pouvez distribuer ceux-ci que sous la même licence. Le\n texte\n légal complet détaille vos droits et responsabilités.\n

    \n\n

    Comment créditer OpenStreetMap

    \n

    \n Si vous utilisez les images d'OpenStreetMap, nous demandons que votre\n crédit comporte au moins la mention “© les contributeurs d'OpenStreetMap\n CC-BY-SA”. Si vous n'utilisez que les données des cartes,\n nous demandons “Données de la carte © les contributeurs d'OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Là où cela est possible, OpenStreetMap doit être un lien hypertexte vers http://www.openstreetmap.org/\n et CC-BY-SA vers http://creativecommons.org/licenses/by-sa/2.0/.\n Si vous utiliser un média qui ne permet pas de créer des liens (ex :\n un imprimé), nous suggérons que vous dirigiez vos lecteurs vers\n www.openstreetmap.org (peut-être en étendant\n ‘OpenStreetMap’ à l'adresse complète) et vers\n www.creativecommons.org.\n

    \n\n

    Plus d'informations

    \n

    \n Si vous voulez obtenir plus d'informations sur la réutilisation de nos données, lisez la FAQ légale.\n

    \n

    \n Nous rappelons aux contributeurs d'OSM qu'ils ne doivent jamais ajouter de données provenant\n de sources sous copyright (ex : Google Maps ou des cartes imprimées) sans\n autorisation explicite de la part des détenteurs du copyright.\n

    \n

    \n Bien qu'OpenStreetMap soit un ensemble de données ouvertes, nous ne pouvons pas fournir\n d'API libre de frais pour les développeurs tiers.\n\n Voyez nos règles d'utilisation de l'API,\n règles d'utilisation de la carte\n et règles d'utilisation de Nominatim.\n

    \n\n

    Nos contributeurs

    \n

    \n Notre licence CC-BY-SA nécessite que vous “donniez à l'auteur d'origine\n un crédit raisonnable selon le média que vous utilisez”.\n Les cartographes individuels d'OSM ne demandent pas\n d'autre crédit que “les contributeurs d'OpenStreetMap”,\n mais lorsque des données venant d'une agence nationale de cartographie\n ou autre source majeure ont été incluses dans OpenStreetMap,\n il peut être raisonnable de les créditer directement\n de la manière qu'ils demandent ou par un lien vers cette page.\n

    \n\n\n\n
      \n
    • Australie: Contient des données sur les banlieues\n fondée sur les données de l'Australian Bureau of Statistics.
    • \n
    • Canada: Contient des données de\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), et StatCan (Geography Division,\n Statistics Canada).
    • \n
    • France : Contient des données de la\n Direction Générale des Impôts.
    • \n
    • Nouvelle-Zélende: Contient des données provenant du\n Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Pologne: Contient des données provenant des cartes UMP-pcPL. Copyright\n contributeurs de UMP-pcPL.
    • \n
    • Royaume-Uni: Contient des données d'Ordnance\n Survey data © Crown copyright and database right 2010.
    • \n
    \n\n

    \n L'inclusion de données dans OpenStreetMap n'implique pas que les fournisseurs d'origine\n du contenu approuvent OpenStreetMap, ni ne fournissent, ne garantissent ou n'acceptent quelque lien que ce soit.\n

    " + legal_babble: "

    Copyright et licence

    \n

    \n OpenStreetMap est un ensemble de données ouvertes, disponibles sous la licence Creative\n Commons Attribution-ShareAlike 2.0 (CC-BY-SA).\n

    \n

    \n Vous êtes libre de copier, distribuer, transmettre et adapter nos cartes\n et données, à condition que vous créditiez OpenStreetMap et ses\n contributeurs. Si vous modifiez ou utilisez nos cartes ou données dans d'autres travaux,\n vous ne pouvez distribuer ceux-ci que sous la même licence. Le\n texte\n légal complet détaille vos droits et responsabilités.\n

    \n\n

    Comment créditer OpenStreetMap

    \n

    \n Si vous utilisez les images d'OpenStreetMap, nous demandons que votre\n crédit comporte au moins la mention “© les contributeurs d'OpenStreetMap\n CC-BY-SA”. Si vous n'utilisez que les données des cartes,\n nous demandons “Données de la carte © les contributeurs d'OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Là où cela est possible, OpenStreetMap doit être un lien hypertexte vers http://www.openstreetmap.org/\n et CC-BY-SA vers http://creativecommons.org/licenses/by-sa/2.0/.\n Si vous utiliser un média qui ne permet pas de créer des liens (ex :\n un imprimé), nous suggérons que vous dirigiez vos lecteurs vers\n www.openstreetmap.org (peut-être en étendant\n ‘OpenStreetMap’ à l'adresse complète) et vers\n www.creativecommons.org.\n

    \n\n

    Plus d'informations

    \n

    \n Si vous voulez obtenir plus d'informations sur la réutilisation de nos données, lisez la FAQ légale.\n

    \n

    \n Nous rappelons aux contributeurs d'OSM qu'ils ne doivent jamais ajouter de données provenant\n de sources sous copyright (ex : Google Maps ou des cartes imprimées) sans\n autorisation explicite de la part des détenteurs du copyright.\n

    \n

    \n Bien qu'OpenStreetMap soit un ensemble de données ouvertes, nous ne pouvons pas fournir\n d'API libre de frais pour les développeurs tiers.\n\n Voyez nos règles d'utilisation de l'API,\n règles d'utilisation de la carte\n et règles d'utilisation de Nominatim.\n

    \n\n

    Nos contributeurs

    \n

    \n Notre licence CC-BY-SA nécessite que vous “donniez à l'auteur d'origine\n un crédit raisonnable selon le média que vous utilisez”.\n Les cartographes individuels d'OSM ne demandent pas\n d'autre crédit que “les contributeurs d'OpenStreetMap”,\n mais lorsque des données venant d'une agence nationale de cartographie\n ou autre source majeure ont été incluses dans OpenStreetMap,\n il peut être raisonnable de les créditer directement\n de la manière qu'ils demandent ou par un lien vers cette page.\n

    \n\n\n\n
      \n
    • Australie: Contient des données sur les banlieues\n fondée sur les données de l'Australian Bureau of Statistics.
    • \n
    • Autriche: Contient des données sur la\n ville de Vienne sous licence\n CC-BY.
    • \n
    • Canada: Contient des données de\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), et StatCan (Geography Division,\n Statistics Canada).
    • \n
    • France : Contient des données de la\n Direction Générale des Impôts.
    • \n
    • Nouvelle-Zélende: Contient des données provenant du\n Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Pologne: Contient des données provenant des cartes UMP-pcPL. Copyright\n contributeurs de UMP-pcPL.
    • \n
    • Royaume-Uni: Contient des données d'Ordnance\n Survey data © Crown copyright and database right 2010.
    • \n
    \n\n

    \n L'inclusion de données dans OpenStreetMap n'implique pas que les fournisseurs d'origine\n du contenu approuvent OpenStreetMap, ni ne fournissent, ne garantissent ou n'acceptent quelque lien que ce soit.\n

    " native: mapping_link: commencer à contribuer native_link: version française @@ -1134,7 +1136,7 @@ fr: allow_write_diary: créez des entrées dans le journal, des commentaires et faites-vous des amis. allow_write_gpx: envoyer des traces GPS. allow_write_prefs: modifier vos préférences utilisateur. - request_access: L'application %{app_name} demande l'accès à votre compte. Vérifiez si vous désirez que l'application ait les possibilités suivantes. Vous pouvez en choisir autant ou aussi peu que vous voulez. + request_access: L'application %{app_name} demande l'accès à votre compte, %{user}. Vérifiez si vous désirez que l'application ait les possibilités suivantes. Vous pouvez en choisir autant ou aussi peu que vous voulez. revoke: flash: Vous avez révoqué le jeton pour %{application} oauth_clients: @@ -1367,8 +1369,8 @@ fr: trace_optionals: tags: Balises trace_paging_nav: - next: Suivant » - previous: "« Précédent" + next: Suivant » + previous: « Précédent showing_page: Affichage de la page %{page} view: delete_track: Supprimer cette piste diff --git a/config/locales/fur.yml b/config/locales/fur.yml index f5f6c9e7c..6e96f7a58 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -100,6 +100,9 @@ fur: entry_role: Relazion %{relation_name} (come %{relation_role}) map: deleted: Eliminât + edit: + area: Modifiche aree + relation: Modifiche relazion larger: area: Viôt la aree suntune mape plui grande node: Viôt il grop suntune mape plui grande @@ -244,8 +247,8 @@ fur: still_editing: (ancjemò in cambiament) view_changeset_details: Viôt detais dal grup di cambiaments changeset_paging_nav: - next: Sucessîf » - previous: "« Precedent" + next: Successîf » + previous: « Precedent showing_page: Daûr a mostrâ la pagjine %{page} changesets: area: Aree @@ -521,6 +524,7 @@ fur: icon: Icone monument: Monument museum: Museu + ruins: Ruvinàs tower: Tor landuse: cemetery: Simiteri @@ -532,6 +536,7 @@ fur: mountain: Montagne nature_reserve: Riserve naturâl park: Parc + quarry: Gjave railway: Ferade residential: Aree residenziâl vineyard: Vigne @@ -628,7 +633,7 @@ fur: map: base: cycle_map: Cycle Map - noname: CenceNon + transport_map: Mape dai traspuarts site: edit_disabled_tooltip: Cres il zoom par cambiâ la mape edit_tooltip: Cambie la mape @@ -639,7 +644,7 @@ fur: layouts: community_blogs: Blogs de comunitât community_blogs_title: Blogs di bande dai membris de comunitât OpenStreetMap - copyright: Copyright & Licence + copyright: Copyright & Licence documentation: Documentazion documentation_title: Documentazion dal progjet donate: Sosten OpenStreetMap %{link} al font pal inzornament dal hardware. @@ -920,11 +925,11 @@ fur: trace_form: description: "Descrizion:" help: Jutori - tags: Etichetis + tags: "Etichetis:" tags_help: separâts di virgulis upload_button: Cjame upload_gpx: "Cjame file GPX:" - visibility: Visibilitât + visibility: "Visibilitât:" visibility_help: ce vuelial dî? trace_header: see_all_traces: Cjale ducj i percors @@ -933,8 +938,8 @@ fur: trace_optionals: tags: Etichetis trace_paging_nav: - next: Sucessîf » - previous: "« Precedent" + next: Sucessîf » + previous: « Precedent showing_page: Daûr a mostrâ la pagjine %{page} view: delete_track: Elimine chest percors @@ -982,6 +987,7 @@ fur: no home location: No tu âs configurât il lûc iniziâl. openid: link: http://wiki.openstreetmap.org/wiki/OpenID + link text: ce isal chest? openid: "OpenID:" preferred editor: "Editôr preferît:" preferred languages: "Lenghis preferidis:" @@ -993,6 +999,8 @@ fur: enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits enabled link text: ce isal chest? heading: "Cambiaments publics:" + public editing note: + heading: Modifiche publiche replace image: Sostituìs la figure atuâl return to profile: Torne al profîl save changes button: Salve cambiaments @@ -1055,6 +1063,8 @@ fur: remember: Visiti di me title: Jentre to make changes: Par cambiâ alc tai dâts di OpenStreetMap, tu scugnis vê un profîl. + with openid: "Dopre se no il tô OpenID par jentrâ:" + with username: "Âstu za un profîl su OpenStreetMap? Jentre cul to non utent e la tô password:" logout: heading: Va fûr di OpenStreetMap logout_button: Jes @@ -1064,6 +1074,7 @@ fur: heading: Âstu pierdût la password? help_text: Scrîf la direzion di pueste eletroniche che tu âs doprât par iscrivîti e ti mandarin un leam par tornâ a impuestâ la tô password. new password button: Azere la password + notice email cannot find: No vin podût cjatâ la tô direzion di pueste, nus displâs. title: Password pierdude make_friend: already_a_friend: Tu sês za amì di %{name}. @@ -1116,6 +1127,7 @@ fur: rest_of_world: Rest dal mont legale_select: "Sielç il stât dulà che tu âs la residences:" title: Tiermins par contribuî + you need to accept or decline: Par plasê lei e po acete o refude i gnûfs Tiermins par Contribuî par lâ indevant. view: add as friend: zonte ai amîs ago: (%{time_in_words_ago} indaûr) diff --git a/config/locales/gl-ES.yml b/config/locales/gl-ES.yml new file mode 100644 index 000000000..086ece5f2 --- /dev/null +++ b/config/locales/gl-ES.yml @@ -0,0 +1,2 @@ +gl-ES: + dummy: dummy diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 160138563..92fd0efa1 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -76,8 +76,8 @@ gl: require_cookies: cookies_needed: Semella que ten as cookies do navegador desactivadas. Actíveas antes de continuar. setup_user_auth: - blocked: O seu acceso ao API foi bloqueado. Acceda ao sistema para atopar máis información na interface web. - need_to_see_terms: O seu acceso á API está suspendido temporalmente. Acceda ao sistema para ollar os Termos do colaborador. Non ten que aceptalos, pero debe coñecelos. + blocked: O seu acceso á API foi bloqueado. Acceda ao sistema para atopar máis información na interface web. + need_to_see_terms: O seu acceso á API está suspendido temporalmente. Acceda ao sistema para ollar os termos do colaborador. Non ten que aceptalos, pero debe coñecelos. browse: changeset: changeset: "Conxunto de cambios: %{id}" @@ -104,7 +104,7 @@ gl: one: "Ten o seguinte camiño:" other: "Ten os seguintes %{count} camiños:" no_bounding_box: Non se seleccionou ningunha caixa de envoltura para este conxunto de cambios. - show_area_box: Amosar a caixa de zona + show_area_box: Mostrar o cadro da zona common_details: changeset_comment: "Comentario:" deleted_at: "Borrado o:" @@ -202,11 +202,11 @@ gl: hide_areas: Agochar as zonas history_for_feature: Historial de [[feature]] load_data: Cargar os datos - loaded_an_area_with_num_features: Cargou unha zona que contén [[num_features]] funcionalidades. Pode que algúns navegadores teñan problemas para amosar correctamente esta cantidade de datos. Xeralmente, os navegadores traballan mellor amosando menos de 100 funcionalidades á vez. Utilizar máis pode provocar que o navegador vaia lento ou non responda. Se está seguro de que quere amosar estes datos, pode facelo premendo no seguinte botón. + loaded_an_area_with_num_features: Cargou unha zona que contén [[num_features]] funcionalidades. Pode que algúns navegadores teñan problemas para mostrar correctamente esta cantidade de datos. Xeralmente, os navegadores traballan mellor mostrando menos de 100 funcionalidades á vez. Utilizar máis pode provocar que o navegador vaia lento ou non responda. Se está seguro de que quere mostrar estes datos, pode facelo premendo no seguinte botón. loading: Cargando... manually_select: Escoller manualmente unha zona distinta object_list: - api: Obter esta área desde o API + api: Obter esta área desde a API back: Mostrar a lista de obxectos details: Detalles heading: Lista de obxectos @@ -269,8 +269,8 @@ gl: still_editing: (en edición) view_changeset_details: Ollar os detalles do conxunto de cambios changeset_paging_nav: - next: Seguinte » - previous: "« Anterior" + next: Seguinte » + previous: « Anterior showing_page: Mostrando a páxina %{page} changesets: area: Zona @@ -884,7 +884,8 @@ gl: map: base: cycle_map: Mapa ciclista - noname: Sen nome + mapquest: MapQuest Open + transport_map: Mapa de transporte site: edit_disabled_tooltip: Achegue para editar o mapa edit_tooltip: Editar o mapa @@ -954,7 +955,7 @@ gl: english_link: a orixinal en inglés text: En caso de conflito entre esta páxina traducida e %{english_original_link}, a páxina en inglés prevalecerá title: Acerca desta tradución - legal_babble: "

    Dereitos de autor e licenza

    \n

    \n O OpenStreetMap é de datos abertos e atópase baixo a licenza Creative\n Commons recoñecemento compartir igual 2.0 (CC-BY-SA).\n

    \n

    \n Vostede é libre de copiar, distribuír, transmitir e adaptar os nosos mapas\n e datos, na medida en que acredite o OpenStreetMap e mais os seus\n colaboradores. Se altera ou constrúe a partir dos nosos mapas ou datos, terá\n que distribuír o resultado baixo a mesma licenza. O\n texto\n legal ao completo explica os seus dereitos e responsabilidades.\n

    \n\n

    Como acreditar o OpenStreetMap

    \n

    \n Se está a empregar imaxes dos mapas do OpenStreetMap, pedímoslle que\n acredite o traballo con, polo menos: “© dos colaboradores do\n OpenStreetMap, CC-BY-SA”. Se tan só emprega datos dos mapas,\n pedímoslle que inclúa: “Datos do mapa © dos colaboradores do OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Onde sexa posible, debe haber unha ligazón ao OpenStreetMap cara a http://www.openstreetmap.org/\n e ao CC-BY-SA cara a http://creativecommons.org/licenses/by-sa/2.0/. Se\n fai uso dun medio que non permite as ligazóns (por exemplo, unha\n obra impresa), suxerimos que dirixa os lectores cara a\n www.openstreetmap.org (quizais expandindo\n “OpenStreetMap“ ao enderezo ao completo) e cara a\n www.creativecommons.org.\n

    \n\n

    Máis información

    \n

    \n Descubra máis sobre como empregar os nosos datos nas preguntas máis frecuentes\n sobre asuntos legais.\n

    \n

    \n Lembramos aos colaboradores do OSM que nunca engadan datos de\n fontes con dereitos de autor (por exemplo, o Google Maps ou mapas impresos) sen\n o permiso explícito dos posuidores deses dereitos.\n

    \n

    \n Malia que o OpenStreetMap é de datos abertos, non podemos proporcionar un\n mapa API gratuíto aos desenvolvedores.\n\n Vexa a política de uso do API,\n a política de uso de cuadrantes\n e a política de uso do Nominatim.\n

    \n\n

    Os nosos colaboradores

    \n

    \n A nosa licenza CC-BY-SA necesita que “dea crédito ao autor\n orixinal de xeito razoable segundo o medio ou medios que estea a\n utilizar”. Os usuarios individuais do OSM non solicitan outro\n crédito ca “colaboradores do OpenStreetMap”,\n pero en caso de inclusión de datos dunha axencia nacional ou\n outra fonte maior, pode ser razoable acreditalos reproducindo\n directamente o seu crédito ou ligando cara a el nesta páxina.\n

    \n\n\n\n
      \n
    • Australia: Contén datos de barrios baseados\n nos datos do Australian Bureau of Statistics.
    • \n
    • Canadá: Contén datos de\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada) e StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Francia: Contén datos con orixe na\n Direction Générale des Impôts.
    • \n
    • Nova Zelandia: Contén datos con orixe no\n Land Information New Zealand. Dereitos de autor da coroa.
    • \n
    • Polonia: Contén datos dos mapas UMP-pcPL. Dereitos de autor\n dos colaboradores do UMP-pcPL.
    • \n
    • Reino Unido: Contén datos da Ordnance\n Survey © Dereitos de autor da coroa e dereitos da base de datos\n 2010.
    • \n
    \n\n

    \n A inclusión de datos no OpenStreetMap non implica que o que\n orixinalmente proporcionou os datos apoie o OpenStreetMap,\n dea calquera garantía ou acepte calquera responsabilidade.\n

    " + legal_babble: "

    Dereitos de autor e licenza

    \n

    \n O OpenStreetMap é de datos abertos e atópase baixo a licenza Creative\n Commons recoñecemento compartir igual 2.0 (CC-BY-SA).\n

    \n

    \n Vostede é libre de copiar, distribuír, transmitir e adaptar os nosos mapas\n e datos, na medida en que acredite o OpenStreetMap e mais os seus\n colaboradores. Se altera ou constrúe a partir dos nosos mapas ou datos, terá\n que distribuír o resultado baixo a mesma licenza. O\n texto\n legal ao completo explica os seus dereitos e responsabilidades.\n

    \n\n

    Como acreditar o OpenStreetMap

    \n

    \n Se está a empregar imaxes dos mapas do OpenStreetMap, pedímoslle que\n acredite o traballo con, polo menos: “© dos colaboradores do\n OpenStreetMap, CC-BY-SA”. Se tan só emprega datos dos mapas,\n pedímoslle que inclúa: “Datos do mapa © dos colaboradores do OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Onde sexa posible, debe haber unha ligazón ao OpenStreetMap cara a http://www.openstreetmap.org/\n e ao CC-BY-SA cara a http://creativecommons.org/licenses/by-sa/2.0/. Se\n fai uso dun medio que non permite as ligazóns (por exemplo, unha\n obra impresa), suxerimos que dirixa os lectores cara a\n www.openstreetmap.org (quizais expandindo\n “OpenStreetMap“ ao enderezo ao completo) e cara a\n www.creativecommons.org.\n

    \n\n

    Máis información

    \n

    \n Descubra máis sobre como empregar os nosos datos nas preguntas máis frecuentes\n sobre asuntos legais.\n

    \n

    \n Lembramos aos colaboradores do OSM que nunca engadan datos de\n fontes con dereitos de autor (por exemplo, o Google Maps ou mapas impresos) sen\n o permiso explícito dos posuidores deses dereitos.\n

    \n

    \n Malia que o OpenStreetMap é de datos abertos, non podemos proporcionar un\n mapa API gratuíto aos desenvolvedores.\n\n Vexa a política de uso da API,\n a política de uso de cuadrantes\n e a política de uso do Nominatim.\n

    \n\n

    Os nosos colaboradores

    \n

    \n A nosa licenza CC-BY-SA necesita que “dea crédito ao autor\n orixinal de xeito razoable segundo o medio ou medios que estea a\n utilizar”. Os usuarios individuais do OSM non solicitan outro\n crédito ca “colaboradores do OpenStreetMap”,\n pero en caso de inclusión de datos dunha axencia nacional ou\n outra fonte maior, pode ser razoable acreditalos reproducindo\n directamente o seu crédito ou ligando cara a el nesta páxina.\n

    \n\n\n\n
      \n
    • Australia: Contén datos de barrios baseados\n nos datos do Australian Bureau of Statistics.
    • \n
    • Austria: Contén datos de\n Stadt Wien baixo a licenza\n CC-BY.
    • \n
    • Canadá: Contén datos de\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada) e StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Francia: Contén datos con orixe na\n Direction Générale des Impôts.
    • \n
    • Nova Zelandia: Contén datos con orixe no\n Land Information New Zealand. Dereitos de autor da coroa.
    • \n
    • Polonia: Contén datos dos mapas UMP-pcPL. Dereitos de autor\n dos colaboradores do UMP-pcPL.
    • \n
    • Reino Unido: Contén datos da Ordnance\n Survey © Dereitos de autor da coroa e dereitos da base de datos\n 2010.
    • \n
    \n\n

    \n A inclusión de datos no OpenStreetMap non implica que o que\n orixinalmente proporcionou os datos apoie o OpenStreetMap,\n dea calquera garantía ou acepte calquera responsabilidade.\n

    " native: mapping_link: comezar a contribuír native_link: versión en galego @@ -1154,7 +1155,7 @@ gl: revoke: Revogar! title: Os meus datos OAuth new: - submit: Rexistrar + submit: Rexistrarse title: Rexistrar unha nova aplicación not_found: sorry: Sentímolo, non se puido atopar este %{type}. @@ -1351,8 +1352,8 @@ gl: trace_optionals: tags: Etiquetas trace_paging_nav: - next: Seguinte » - previous: "« Anterior" + next: Seguinte » + previous: « Anterior showing_page: Mostrando a páxina "%{page}" view: delete_track: Borrar esta pista @@ -1419,7 +1420,7 @@ gl: heading: "Edición pública:" public editing note: heading: Edición pública - text: Actualmente, as súas edicións son anónimas e a xente non lle pode enviar mensaxes ou ollar a súa localización. Para mostrar o que editou e permitir que a xente se poña en contacto con vostede mediante a páxina web, prema no botón que aparece a continuación. Desde a migración do API á versión 0.6, tan só os usuarios públicos poden editar os datos do mapa (máis información).
    • Os enderezos de correo electrónico non se farán públicos.
    • Non é posible reverter esta acción e agora os novos usuarios xa son públicos por defecto.
    + text: Actualmente, as súas edicións son anónimas e a xente non lle pode enviar mensaxes ou ollar a súa localización. Para mostrar o que editou e permitir que a xente se poña en contacto con vostede mediante a páxina web, prema no botón que aparece a continuación. Desde a migración da API á versión 0.6, tan só os usuarios públicos poden editar os datos do mapa (máis información).
    • Os enderezos de correo electrónico non se farán públicos.
    • Non é posible reverter esta acción e agora os novos usuarios xa son públicos por defecto.
    replace image: Substituír a imaxe actual return to profile: Volver ao perfil save changes button: Gardar os cambios @@ -1531,6 +1532,7 @@ gl: no_auto_account_create: Por desgraza, arestora non podemos crear automaticamente unha conta para vostede. not displayed publicly: Non mostrado publicamente (véxase a política de protección de datos) openid: "%{logo} OpenID:" + openid association: "

    O seu OpenID aínda non está asociado a ningunha conta no OpenStreetMap.

    \n
      \n
    • Se é novo no OpenStreetMap, cree unha nova conta mediante o formulario inferior.
    • \n
    • \n Se xa ten unha conta, pode acceder ao sistema\n co seu nome de usuario e contrasinal e logo asociar a conta\n ao seu OpenID nas preferencias de usuario.\n
    • \n
    " openid no password: Co OpenID non é necesario un contrasinal, pero algunhas ferramentas adicionais ou servidores aínda poden necesitalo. password: "Contrasinal:" terms accepted: Grazas por aceptar os novos termos do colaborador! @@ -1646,7 +1648,7 @@ gl: back: Ollar todos os bloqueos heading: Editando o bloqueo de %{name} needs_view: O usuario ten que acceder ao sistema antes de que o bloqueo sexa retirado? - period: Por canto tempo, a partir de agora, o usuario terá bloqueado o uso do API? + period: Por canto tempo, a partir de agora, o usuario terá bloqueado o uso da API? reason: O motivo polo que bloquea a %{name}. Permaneza tranquilo e sexa razoable, dando a maior cantidade de detalles sobre a situación. Teña presente que non todos os usuarios entenden o argot da comunidade, de modo que intente utilizar termos comúns. show: Ollar este bloqueo submit: Actualizar o bloqueo @@ -1670,7 +1672,7 @@ gl: back: Ollar todos os bloqueos heading: Creando un bloqueo a %{name} needs_view: O usuario ten que acceder ao sistema antes de que o bloqueo sexa retirado - period: Por canto tempo, a partir de agora, o usuario terá bloqueado o uso do API? + period: Por canto tempo, a partir de agora, o usuario terá bloqueado o uso da API? reason: O motivo polo que bloquea a %{name}. Permaneza tranquilo e sexa razoable, dando a maior cantidade de detalles sobre a situación e lembrando que a mensaxe será visible publicamente. Teña presente que non todos os usuarios entenden o argot da comunidade, de modo que intente utilizar termos comúns. submit: Crear un bloqueo title: Creando un bloqueo a %{name} diff --git a/config/locales/gsw-CH.yml b/config/locales/gsw-CH.yml new file mode 100644 index 000000000..83ff85b47 --- /dev/null +++ b/config/locales/gsw-CH.yml @@ -0,0 +1,2 @@ +gsw-CH: + dummy: dummy diff --git a/config/locales/gsw.yml b/config/locales/gsw.yml index 645f25e9d..b5072961b 100644 --- a/config/locales/gsw.yml +++ b/config/locales/gsw.yml @@ -149,7 +149,7 @@ gsw: way_details: also_part_of: one: Au Teil vum Wäg %{related_ways} - other: Au Teil vu dr Wäg %{related_ways + other: Au Teil vu dr Wäg %{related_ways} nodes: "Chnote:" part_of: "Teil vu:" way_history: diff --git a/config/locales/he.yml b/config/locales/he.yml index 46908bacb..da4940af8 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -2,10 +2,10 @@ # Exported from translatewiki.net # Export driver: syck-pecl # Author: Aude +# Author: Deror avi +# Author: Itay naor # Author: YaronSh he: - html: - dir: rtl activerecord: attributes: diary_entry: @@ -26,10 +26,15 @@ he: description: תאור latitude: קו רוחב longitude: קו אורך + name: שם + public: ציבורי + size: גודל user: משתמש + visible: גלוי user: active: פעיל description: תאור + email: דואל languages: שפות pass_crypt: סיסמה models: @@ -39,6 +44,8 @@ he: language: שפה message: מסר user: משתמש + user_preference: העדפות המשתמש + way: דרך browse: changeset: download: הורדת %{changeset_xml_link} או %{osmchange_xml_link} @@ -50,6 +57,11 @@ he: show_area_box: הצגת תיבת תחום common_details: changeset_comment: "הערה:" + deleted_at: "נמחק ב:" + deleted_by: "נמחק על ידי:" + edited_at: "נערך ב:" + edited_by: "נערך על ידי:" + version: "גירסא:" containing_relation: entry: קשר %{relation_name} entry_role: קשר %{relation_name} (בתור %{relation_role}) @@ -62,6 +74,11 @@ he: way: צפייה בדרך במפה גדולה יותר loading: בטעינה... navigation: + all: + next_relation_tooltip: היחס הבא + next_way_tooltip: הדרך הבאה + prev_relation_tooltip: היחס הקודם + prev_way_tooltip: הדרך הקודמת user: name_changeset_tooltip: צפייה בעריכות של %{user} next_changeset_tooltip: העריכה הבאה ×¢"י %{user} @@ -113,6 +130,7 @@ he: data_layer_name: נתונים details: פרטים edited_by_user_at_timestamp: נערך על ידי [[user]] ב־[[timestamp]] + hide_areas: להסתרת איזורים history_for_feature: ההיסטוריה של [[feature]] load_data: טעינת נתונים loaded_an_area_with_num_features: "האזור שנטען מכיל [[num_features]] תכונות. באופן כללי, רב הדפדפנים לא יוכלו להתמודד עם הצגה של כזאת כמות של נתונים. לרב, דפדפנים עובדים באופן מיטבי בהצגת פחות מ־100 תכונות בו־זמנית: ביצוע משימות נוספות עלולות לגרום לדפדפן להיות איטי/להתקע. אם אכן יש צורך להציג כמות כזאת של נתונים, ניתן ללחוץ על הלחצן שלהלן." @@ -135,6 +153,7 @@ he: node: צומת way: דרך private_user: משתמש פרטי + show_areas: להצגת איזורים show_history: הצגת ההיסטוריה unable_to_load_size: "לא ניתן לטעון: תיבה תוחמת בגודל [[bbox_size]] היא גדולה מדי (מוכרחה להיות קטנה מאשר %{max_bbox_size})" wait: נא להמתין... @@ -168,17 +187,25 @@ he: diary_entry: diary_comment: comment_from: "%{comment_created_at}ב %{link_user}תגובה מ" + confirm: לאישור + hide_link: להסתרת הערה זו diary_entry: comment_count: one: תגובה 1 other: "%{count} תגובות" + confirm: לאישור edit_link: עריכת רשומה edit: language: ":שפה" latitude: ":קו רוחב" longitude: ":קו אורך" + save_button: לשמירה list: in_language_title: רשומות יומן ב%{language} + location: + edit: לעריכה + location: "מיקום:" + view: לצפייה no_such_entry: title: אין כזו רשומה ביומן no_such_user: @@ -187,8 +214,37 @@ he: view: login: כניסה login_to_leave_a_comment: בצעו %{login_link} כדי להשאיר תגובה + editor: + remote: + name: שליטה מרחוק + export: + start: + add_marker: להוספת סמן למפה + export_button: ייצוא + image_size: גודל התמונה + latitude: "קווי אורך:" + longitude: "קווי רוחב:" + max: מקסימום + options: אפשרויות + output: פלט + paste_html: להדבקת HTML להטמעה באתר + scale: קנה מידה + too_large: + heading: האיזור גדול מידי + zoom: מרחק מתצוגה + start_rjs: + add_marker: הוספת סמן למפה + change_marker: שינוי מיקום סמן + click_add_marker: לחצו על המפה להוספת סמן + drag_a_box: נא לגרור מלבן על המפה לבחירת איזור + export: ייצוא + manually_select: לבחירה ידנית של איזור אחר + view_larger_map: לצפייה במפה גדולה יותר geocoder: description: + title: + geonames: מיקום מאתר GeoNames + osm_nominatim: מיקום מאתר OpenStreetMap Nominatim types: cities: ערים places: מקומות @@ -206,6 +262,388 @@ he: one: בערך קילומטר other: בערך %{count} ק"מ zero: פחות מקילומטר + results: + more_results: תוצאות נוספות + no_results: לא נמצאו תוצאות + search: + title: + ca_postcode: תוצאות מאתר Geocoder.CA + geonames: תוצאות מאתר GeoNames + latlon: תוצאות מאתר זה + osm_namefinder: תוצאות מאתר OpenStreetMap Namefinder + osm_nominatim: תוצאות מאתר OpenStreetMap Nominatim + uk_postcode: תוצאות מאתר NPEMap / FreeThe Postcode + us_postcode: תוצאות מאתר Geocoder.us + search_osm_namefinder: + suffix_parent: " %{suffix} (%{parentdistance} %{parentdirection} מ-%{parentname})" + suffix_place: " %{distance} %{direction} מ-%{placename}" + search_osm_nominatim: + prefix: + amenity: + airport: שדה תעופה + arts_centre: מרכז אמנויות + atm: כספומט + auditorium: אודיטוריום + bank: בנק + bar: פאב + bench: ספסל + bicycle_parking: חניית אופניים + bicycle_rental: השכרת אופניים + brothel: בית בושת + bureau_de_change: חלפן כספים + bus_station: תחנת אוטובוס + cafe: בית קפה + car_rental: השכרת רכב + car_sharing: נקודת שיתוף רכבים + car_wash: שטיפת מכוניות + casino: קזינו + cinema: בית קולנוע + clinic: מרפאה + club: מועדון + college: מכללה + community_centre: מרכז קהילתי + courthouse: בית משפט + crematorium: קרמטוריום + dentist: רופא שיניים + doctors: רופאים + dormitory: מעונות + drinking_water: מי שתייה + driving_school: בית ספר לנהיגה + embassy: שגרירות + emergency_phone: טלפון חירום + fast_food: מזון מהיר + ferry_terminal: מסוף מעבורת + fire_hydrant: ברז כיבוי אש + fire_station: תחנת כיבוי אש + fountain: מזרקה + fuel: דלק + grave_yard: בית קברות + gym: מכון כושר/חדר כושר + hall: אולם + health_centre: מרכז בריאות + hospital: בית חולים + hotel: בית מלון + ice_cream: גלידה + kindergarten: גן ילדים + library: ספרייה + marketplace: שוק + mountain_rescue: תחנת חילוץ הררית + nursery: פעוטון + nursing_home: בית אבות + office: משרד + park: פארק + parking: חנייה + pharmacy: בית מרקחת + place_of_worship: מקום פולחן + police: משטרה + post_box: תיבת דואר + post_office: סניף דואר + preschool: גן ילדים + prison: כלא + pub: פאב + public_building: מבנה ציבור + public_market: שוק + reception_area: איזור קבלה + recycling: נקודת מיחזור + restaurant: מסעדה + retirement_home: בית אבות + sauna: סאונה + school: בית ספר + shelter: מחסה + shop: חנות + shopping: קניות + social_club: מועדון + studio: סטודיו + supermarket: סופרמרקט + taxi: מונית + telephone: טלפון ציבורי + theatre: תיאטרון + toilets: שירותים + townhall: עירייה + university: אוניברסיטה + vending_machine: מכונת מכירה + veterinary: מרפאה וטרינרית + village_hall: אולם הכפר + waste_basket: פח אשפה + wifi: איזור WiFi + youth_centre: מרכז נוער + boundary: + administrative: גבול איזור מנהל + building: + apartments: בית דירות + block: אבן בניין + bunker: בונקר + chapel: קפלה + church: כנסייה + city_hall: בניין עירייה + commercial: בניין מסחרי + dormitory: מעונות + entrance: כניסה לבניין + faculty: בניין פקולטה + farm: חווה + flats: דירות + garage: מוסך + hall: בניין + hospital: בית חולים + hotel: מלון + house: בית + industrial: בניין תעשייתי + office: בניין משרדים + public: בניין ציבורי + residential: בניין מגורים + retail: בניין מסחרי + school: בית ספר + shop: חנות + stadium: אצטדיון + store: חנות + terrace: מרפסת פתוחה + tower: מגדל + train_station: תחנת רכבת + highway: + bridleway: שביל עבור סוסים + bus_guideway: נתיב תחבורה ציבורית מונחית + bus_stop: תחנת אוטובוס + byway: דרך צידית + construction: דרך ראשית בבנייה + cycleway: נתיב אופניים + distance_marker: סמן מרחק + emergency_access_point: נקודת גישה לשירותי חירום + footway: שביל להולכי רגל + ford: מעברה (נקודת חציית נהר) + gate: שער + living_street: רחוב + minor: דרך צידית + motorway: כביש + motorway_junction: צומת כבישים + motorway_link: כביש + path: נתיב + pedestrian: נתיב להולכי רגל + platform: פלטפורמה + primary: דרך ראשית + primary_link: כביש ראשי + raceway: מסלול מרוצים + residential: מגורים + road: דרך + secondary: דרך מישנית + secondary_link: דרך מישנית + service: כביש שירות + services: שירותי דרך + steps: מדרגות + stile: מעבר מעל גדר + tertiary: דרך צידית + track: מסלול מרוצים + trail: שביל + unclassified: כביש לא מסווג + unsurfaced: כביש לא סלול + historic: + archaeological_site: אתר ארכיאולוגי + battlefield: שדה קרב + boundary_stone: אבן גבול + building: בניין + castle: טירה + church: כנסייה + house: בית + icon: איקונין + manor: אחוזה + memorial: אנדרטה + mine: מכרה + monument: אנדרטה + museum: מוזיאון + ruins: הריסות + tower: מגדל + wayside_cross: צלב בצד הדרך + wayside_shrine: מקדש בצד הדרך + wreck: ספינה טרופה + landuse: + allotments: הקצאת קרקע + basin: אגן + cemetery: בית קברות + commercial: איזור מסחרי + conservation: שמורה + natural: + coastline: קו חוף + crater: מכתש + feature: תכונה + fell: הר המתנשא מעל היערות סביבו + fjord: פיורד + geyser: גייזר + glacier: קרחון + heath: בתה + hill: גבעה + island: אי + land: אדמה + marsh: ביצה + moor: ביצה + mud: בוץ + peak: פסגה + point: נקודה + reef: שונית + ridge: רכס + river: נהר + rock: סלע + scree: ערמת סלעים + scrub: ערבה + shoal: שרטון + spring: מעיין + strait: מצר + tree: ×¢×¥ + valley: עמק + volcano: הר געש + water: מים + wetland: מלחה + wetlands: מלחות + wood: יער + place: + airport: נמל תעופה + city: עיר + country: ארץ + county: מחוז + farm: חווה + hamlet: כפר + house: בית + houses: בתים + island: אי + islet: איון + locality: איזור מקומי + moor: ביצה + municipality: עירייה + postcode: מיקוד + region: איזור + sea: ים + state: מדינה + subdivision: חלוקת משנה + suburb: פרוור + town: עיירה + unincorporated_area: איזור בלתי מאוגד + village: כפר + railway: + abandoned: מסילת ברזל נטושה + construction: מסילת ברזל בבנייה + disused: מסילת ברזל שאינה בשימוש + disused_station: תחנת רכבת שאינה בשימוש + funicular: רכבל + halt: תחנת רכבת + historic_station: תחנת רכבת היסטורית + junction: מפגש מסילות ברזל + level_crossing: מפגש מסילת ברזל וכביש + light_rail: רכבת קלה + monorail: מונורייל + narrow_gauge: מסילת רכבת צרה + platform: רציף רכבת + preserved: רכבת משומרת + station: תחנת רכבת + subway: תחנת רכבת תחתית + subway_entrance: כניסה לתחנת רכבת תחתית + tram: חשמלית + tram_stop: תחנת חשמלית + yard: מוסך רכבות + shop: + apparel: חנות בגדים + art: חנות חפצי אמנות + bakery: מאפייה + beauty: סלון יופי + beverages: חנות משקאות + bicycle: חנות אפניים + books: חנות ספרים + butcher: קצב + car: חנות כלי רכב + car_dealer: סוחר כלי רכב + car_parts: חלקי רכב + car_repair: מוסך + carpet: חנות שטיחים + charity: חנות צדקה + chemist: בית מרקחת + clothes: חנות בגדים + computer: חנות מחשבים + confectionery: קונדיטוריה + convenience: מכולת + copyshop: חנות צילום + cosmetics: חנות קוסמטיקה + department_store: כלבו + discount: חנות מוזלת + doityourself: חנות עשה-זאת-בעצמך + drugstore: בית מרקחת + dry_cleaning: ניקוי יבש + electronics: חנות אלקטרוניקה + estate_agent: מתווך נדל"ן + fashion: חנות אופנה + fish: חנות דגים + florist: חנות פרחים + food: מכולת + funeral_directors: בית לוויות + furniture: רהיטים + gallery: גלריה + garden_centre: מרכז גינון + general: מכולת + gift: חנות מתנות + greengrocer: ירקן + grocery: מכולת + hairdresser: מעצב שער + hardware: חנות חומרי בניין + insurance: ביטוח + jewelry: חנות תכשיטים + kiosk: קיוסק + laundry: מכבסה + mall: מרכז קניות + market: שוק + mobile_phone: חנות טלפונים ניידים + motorcycle: חנות אופנועים + music: חנות כלי מוזיקה + optician: אופטיקאי + organic: חנות מזון אורגני + outdoor: חנות ציוד מחנאות + pet: חנות חיות מחמד + photo: חנות צילום + salon: סלון + shoes: חנות נעליים + shopping_centre: מרכז קניות + sports: חנות ספורט + stationery: חנות כלי כתיבה + supermarket: סופרמרקט + toys: חנות צעצועים + travel_agency: סוכנות נסיעות + tourism: + alpine_hut: בקתה אלפינית + artwork: יצירת אמנות + attraction: אתר בעל עניין + bed_and_breakfast: לינה וארוחת בוקר + cabin: בקתה + camp_site: אתר מחנאות + caravan_site: אתר קרוואן + chalet: טירה + guest_house: בית הארחה + hostel: אכסנייה + hotel: מלון + information: מידע + motel: מלון דרכים + museum: מוזיאון + picnic_site: אתר פיקניק + theme_park: פארק נושאי + valley: עמק + viewpoint: נקודת תצפית + zoo: גן חיות + waterway: + boatyard: בית סירות + canal: תעלה + connector: מחבר נתיבי מים + dam: סכר + derelict_canal: תעלה נטושה + ditch: מחפורת + dock: רציף + drain: ביוב + lock: מנעול + mineral_spring: מעיין מים מינרלים + mooring: מעגן + rapids: אשדות + river: נהר + riverbank: גדת נהר + stream: פלג + wadi: ואדי + water_point: נקודת מים + waterfall: מפל מים + weir: ויר + html: + dir: rtl layouts: edit: עריכה export: יצוא @@ -214,6 +652,7 @@ he: history: היסטוריה home: הביתה home_tooltip: מעבר למיקום הבית + inbox: תיבת דואר נכנס (%{count}) inbox_tooltip: one: תיבת הדואר הנכנס שלכם מכילה הודעה אחת שלא נקראה other: תיבת הדואר הנכנס שלכם מכילה %{count} הודעות שלא נקראו @@ -238,12 +677,68 @@ he: message: delete: deleted: ההודעה נמחקה + inbox: + people_mapping_nearby: אנשים ממפים בקרבת מקום message_summary: delete_button: מחיקה + read_button: לסימון כ"נקרא" + reply_button: תשובה + unread_button: לסימון כ"לא נקרא" + new: + back_to_inbox: לחזרה לתיבת הדואר הנכנס + body: תוכן ההודעה + limit_exceeded: שלחת הודעות רבות לאחרונה. נא המתינו בטרם שליחת הודעות נוספות. + message_sent: הודעה נשלחה + send_button: לשליחה + send_message_to: לשליחת הודעה חדשה ל-%{name} + subject: נושא + title: לשליחת הודעה + no_such_message: + body: אנו מצטערים, אין הודעה עם מזהה זה. + heading: אין הודעה כזו + title: אין הודעה כזו no_such_user: - title: אין כזה משתמש או הודעה + body: מצטערים. אין משתמש בשם זה. + heading: אין משתמש בשם זה + title: אין משתמש בשם זה + outbox: + title: תיבת דואר יוצא sent_message_summary: delete_button: מחיקה + notifier: + friend_notification: + befriend_them: באפשרותך לסמנם כחבר ב-%{befriendurl}. + had_added_you: "%{user} הוסיף אותך כחבר/ה ב-OpenStreetMap." + see_their_profile: באפשרותך לצפות בפרופיל ב-%{userurl}. + gpx_notification: + greeting: הי, + signup_confirm_html: + ask_questions: באפשרותכם לשאול שאלות על אתר OpenStreetMap באתר השאלות ותשובות שלנו. + click_the_link: אם אכן מדובר בך, ברוכים הבאים! נא לחץ על הרישור מטה על מנת לאשר את החשבון ולקרוא מידע נוסף על OpenStreetMap + get_reading: "לקריאה נוספת על OpenStreetMap באתר הויקי, להתעדכן בחדשות האחרונות בבלוג OpenStreetMap או בטוויטר, או לקריאה בבלוג של מייסד OpenStreetMap סטיב קוסט: OpenGeoData blog למידע על ההיסטוריה של הפרוייקט, אשר בו ניתן גם להאזין לקבצי קול!" + greeting: שלום! + hopefully_you: מישהו (בתיקווה שמדובר בך) ביקש ליצור חשבון משתמש ב + introductory_video: ניתן לצפות בסרטו מבוא ב-%{introductory_video_link}. + more_videos: צפייה בסרטונים נוספים ב-%{more_videos_link}. + more_videos_here: סרטונים נוספים מצויים כאן + video_to_openstreetmap: סרטון מבוא לאתר OpenStreetMap + wiki_signup: באפשרותך להירשם לאתר הויקי של OpenStreetMap. + signup_confirm_plain: + ask_questions: "באפשרותך לשאול שאלות עם OpenStreetMap בדף השאלות ותשובות שלנו:" + blog_and_twitter: "ניתן להתעדכן בחדשות OpenStreetMap באמצעות הבלוג או הטוויטר:" + click_the_link_1: אם אכן מדובר בך, ברוך הבא! נא לחצו על הקישור מטה על מנת לאשר את + click_the_link_2: חשבונך, ולקריאת מידע נוסף על אתר OpenStreetMap. + current_user_1: רשימת קטגוריות משתמשים, המבוססת על מיקומכם ברחבי העולם + current_user_2: "מצוייה כאן:" + greeting: שלום! + hopefully_you: מישהו (בתיקווה שמדובר בך) מבקש ליצור חשבון ב + introductory_video: "באפשרותך לצפות בסרטון הדרכה לאתר OpenStreetMap כאן:" + more_videos: "סרטוני הדרכה נוספים מצויים כאן:" + opengeodata: "OpenGeoData.org הוא הבלוג של מייסד OpenStreetMap סטיב קוסט, וניתן לקרוא גם בו:" + the_wiki: "ניתן לקרוא על OpenStreetMap בדפי ויקי:" + user_wiki_1: אנו ממליצים ליצור דף משתמש, הכולל + user_wiki_2: "קטגוריות המסמנות את מקומכם, כגון קטגוריית \"משתמשים בלונדון\": [[Category:Users_in_London]]." + wiki_signup: "באפשרותך להירשם לויקי OpenStreetMap בכתובת:" oauth: oauthorize: allow_read_prefs: קריאת העדפות המשתמש שלך. @@ -255,14 +750,21 @@ he: index: shortlink: קישור מקוצר key: + map_key: מפתח + map_key_tooltip: מפתח מפה table: entry: + admin: גבול אדמיניסטרטיבי allotments: שטחים חקלאיים + apron: + 1: מסוף bridleway: מסלול לרכיבת סוסים brownfield: אזור תעשיה נטוש + building: בניין בעל חשיבות byway: דרך צדדית cable: - רכבל + - מעלית סקי cemetery: בית עלמין centre: מרכז ספורט commercial: אזור מסחרי @@ -278,13 +780,16 @@ he: industrial: אזור תעשיה lake: - אגם + - מאגר military: אזור צבאי motorway: כביש מהיר park: פארק + pitch: מגרש ספורט primary: כביש ראשי rail: מסילת ברזל reserve: שמורת טבע resident: אזור מגורים + retail: איזור מסחרי runway: - דרך למוניות - דרך למוניות @@ -294,13 +799,25 @@ he: secondary: כביש משני station: תחנת רכבת subway: רכבת תחתית + summit: + - פסגה + - פסגה tourist: אתר תיירותי + track: מסלול מרוצים tram: - רכבת קלה + - חשמלית + tunnel: קו מקווקו = מנהרה unclassified: דרך בלתי מוגדרת + unsurfaced: דרך לא סלולה wood: חורשה search: + search: לחיפוש search_help: "examples: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', or 'post offices near Lünen' more examples..." + where_am_i: איפה אני? + where_am_i_title: תאר את מיקמכם הנוכחי באמצעות מנוע החיפוש + sidebar: + close: לסגירה trace: edit: description: ":תאור" @@ -309,32 +826,55 @@ he: heading: עריכת המסלול %{name} map: מפה tags_help: מופרד בפסיקים + visibility: "ראות:" visibility_help: מה זה אומר? no_such_user: + body: אנו מצטערים, אין משתמש בשם %{user}. נא בדקו את איותכם, או יתכן כי לחצתם על קישור שגוי. + heading: המשתמש %{user} אינו קיים title: אין משתמש כזה trace: edit: עריכה + map: מפה trace_form: description: תאור + help: עזרה tags_help: מופרד בפסיקים visibility: גלוי visibility_help: מה זאת אומרת? + trace_optionals: + tags: תגיות view: description: ":תאור" + download: הורדה edit: עריכה + filename: "שם קובץ:" + map: מפה + none: אין + owner: "בעלים:" + points: "נקודות:" + start_coordinates: "תחילת קואורדינטות:" tags: Tags + uploaded: "הועלה:" visibility: "גלוי:" user: account: + current email address: "כתובת דואל עדכנית:" + email never displayed publicly: (מעולם לא מוצג בפומבי) home location: "מיקום הבית:" latitude: ":קו רוחב" longitude: ":קו אורך" my settings: ההגדרות שלי + new email address: "כתובת דואל חדשה:" + openid: + link text: מה זה? public editing: disabled link text: מדוע איני יכול לערוך? + enabled: מאופשר. לא אנונימי ויכול לערוך מידע. enabled link: http://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits enabled link text: מה זה? + heading: "עריכה ציבורית:" save changes button: שמירת השינויים + title: עריכת חשבון confirm: heading: אימות חשבון משתמש login: @@ -353,6 +893,8 @@ he: heading: המשתמש %{user} אינו קיים title: אין משתמש כזה popup: + friend: חבר + nearby mapper: ממפה סמוך your location: מיקומך reset_password: confirm password: "אימות הסיסמה:" @@ -362,9 +904,21 @@ he: reset: איפוס הסיסמה title: reset password view: + activate_user: להפעלת משתמש זה + add as friend: הוספה כחבר ago: (לפני %{time_in_words_ago}) + blocks by me: חסימות על ידי + blocks on me: חסימות שלי + confirm: לאישור + confirm_user: לאישור משתמש זה + create_block: לחסימת משתמש זה + deactivate_user: לביטול הפעלת משתמש זה + delete_user: למחיקת משתמש זה description: תאור + diary: יומן edits: עריכות + email address: "כתובת דואל:" + hide_user: להסתרת משתמש זה km away: במרחק %{count} ק"מ m away: במרחק %{count} מ' my diary: היומן שלי @@ -374,5 +928,17 @@ he: remove as friend: הסרה כחבר send message: שליחת הודעה settings_link_text: הגדרות + status: "סטטוס:" traces: מסלולים + unhide_user: לבטל הסתרת משתמש זה your friends: החברים שלך + user_block: + show: + back: צפייה בכל החסימות + confirm: האם אתם בטוחים? + edit: עריכה + reason: "סיבה לחסימה:" + revoke: ביטול! + revoker: "מבטל:" + show: הצגה + status: סטטוס diff --git a/config/locales/hi-IN.yml b/config/locales/hi-IN.yml new file mode 100644 index 000000000..2f46603f8 --- /dev/null +++ b/config/locales/hi-IN.yml @@ -0,0 +1,2 @@ +hi-IN: + dummy: dummy diff --git a/config/locales/hr.yml b/config/locales/hr.yml index cef04cafc..68caba36b 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -267,8 +267,8 @@ hr: still_editing: (joÅ¡ uređuje) view_changeset_details: Prikaži detalje changeseta changeset_paging_nav: - next: Slijedeća » - previous: "« Prethodna" + next: Slijedeća » + previous: « Prethodna showing_page: Prikazujem stranicu %{page} changesets: area: Područje @@ -882,7 +882,6 @@ hr: map: base: cycle_map: Biciklistička karta - noname: Bezimene ulice site: edit_disabled_tooltip: Uvećajte za uređivanje karte edit_tooltip: Uredi kartu @@ -893,7 +892,7 @@ hr: layouts: community_blogs: Blogovi zajednice community_blogs_title: Blogovi članova OpenStreetMap zajednice - copyright: Autorska prava & Dozvola + copyright: Autorska prava & Dozvola documentation: Dokumentacija documentation_title: Dokumentacija za projekt donate: Podržite OpenStreetMap sa %{link} Hardware Upgrade Fond. @@ -1351,8 +1350,8 @@ hr: trace_optionals: tags: Oznake trace_paging_nav: - next: Slijedeća » - previous: "« Prethodna" + next: Slijedeća » + previous: « Prethodna showing_page: Prikazujem stranicu %{page} view: delete_track: IzbriÅ¡i ovu trasu diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index 066eb8031..a67ab1ce8 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -76,6 +76,7 @@ hsb: cookies_needed: Zda so, zo maÅ¡ placki znjemóžnjene - proÅ¡u zmóžń placki w swojim wobhladowaku, prjedy hač pokročujeÅ¡. setup_user_auth: blocked: Twój přistup k API je so blokował. ProÅ¡u přizjew so do webpowjercha, zo by wjace zhonił. + need_to_see_terms: Twój přistup na API je nachwilu wusadźeny. ProÅ¡u přizjew so k webpowjerchej, zo by sej wuměnjenja za sobuskutkowacych wobhladał. NjetrjebaÅ¡ přezjedny być, dyrbiÅ¡ sej je jenož wobhladać. browse: changeset: changeset: "Sadźba změnow: %{id}" @@ -122,6 +123,11 @@ hsb: entry_role: Relacija %{relation_name} (jako %{relation_role}) map: deleted: Zničeny + edit: + area: Wobłuk wobdźěłać + node: Suk wobdźěłać + relation: Relaciju wobdźěłać + way: Puć wobdźěłać larger: area: Wobłuk na wjetÅ¡ej karće pokazać node: Suk na wjetÅ¡ej karće pokazać @@ -270,8 +276,8 @@ hsb: still_editing: (wobdźěłuje so hišće) view_changeset_details: Podrobnosće sadźby změnow pokazać changeset_paging_nav: - next: Přichodna » - previous: "« Předchadna" + next: Přichodna » + previous: « Předchadna showing_page: Pokazuje so strona %{page} changesets: area: Wobłuk @@ -887,7 +893,8 @@ hsb: map: base: cycle_map: Kolesowa karta - noname: ŽaneMjeno + mapquest: MapQuest Open + transport_map: Wobchadna karta site: edit_disabled_tooltip: Za wobdźěłowanje karty powjetÅ¡ić edit_tooltip: Kartu wobdźěłać @@ -926,7 +933,8 @@ hsb: zero: Twój póstowy kašćik žane njepřečitane powěsće njewobsahuje. intro_1: OpenStreetMap je swobodna wobdźěłujomna karta cyłeho swěta. Bu za ludźi kaž wy wutworjena. intro_2: OpenStreetMap ći dowola geografiske daty na zhromadne waÅ¡nje wot něhdźe na zemi pokazać, wobdźěłać a wužiwać. - intro_3: Hospodowanje OpenStreetMap so přećelnje wot %{ucl} a %{bytemark} podpěruje. Druzy podpěraćeljo projekta su we %{partners} nalistowani. + intro_3: Hospodowanje OpenStreetMap so přećelnje wot %{ucl}, %{ic} a %{bytemark} podpěruje. DalÅ¡i podpěraćeljo projekta su w %{partners} nalistowani. + intro_3_ic: Imperial College London intro_3_partners: wiki license: alt: CC by-sa 2.0 @@ -959,7 +967,7 @@ hsb: english_link: jendźelskim originalom text: W padźe konflikta mjez přełoženej stronje a %{english_original_link}, jendźelska strona dyrbi prioritatu měć title: Wo tutym přełožku - legal_babble: "

    Awtorske prawo a licenca

    \n

    \nOpenStreetMap je zjawne daty, licencowane pod licencu Creative Commons Attribution-ShareAlike 2.0 (CC-BY-SA).

    Móžeš naše karty a daty kopěrować, rozdźělić, přenjesć a přiměrić, tak dołho kaž OpenStreetMap a jich přinošowarjow naspominaš. Jeli změniš naše karty abo daty abo zepěraš so na nje, móžeš wuslědk jenož pod samsnej licencu rozdźělić. Dospołny prawniski kod wujasnja twoje prawa a zamołwitosće.

    Kak OpenStreetMap naspomnić

    Jeli kartowe wobrazy z OpenStreetMap wužiwaÅ¡, žadamy sej, zo twoje naspomnjenje znajmjeńša “© OpenStreetMap contributors, CC-BY-SA” rěka. Jeli jenož kartowe daty wužiwaÅ¡, žadamy sej “Map data © OpenStreetMap contributors, CC-BY-SA”.

    Hdźež je móžno, OpenStreetMap měł wotkaz do http://www.openstreetmap.org/ a CC-BY-SA do http://creativecommons.org/licenses/by-sa/2.0/ měć. Jeli medij wužiwaÅ¡, hdźež wotkazy móžno njejsu (na př. wućišćane dźěło), namjetujemy, zo pokazujeÅ¡ swojich čitarjow na www.openstreetmap.org (snano přez narunowanje ‘OpenStreetMap’ přez połnu adresu) a na www.creativecommons.org.

    Dalše informacije

    Čitaj wjace wo wužiwanju našich datow Huste prawniske prašenja.

    Přinošowarjow OSM namołwjeja, zo ženje daty ze žórłow njepřidawaja, kotrež su přez awtorske prawo škitane (na př. z Google Maps abo z wućišćanych kartow) bjez eksplicitneho dowolnosće awtorow.

    Hačrunjež OpenStreetMap je zjawne daty, njemóžemy darmotny kartowy API za wuwiwarjow třećich poskićić. \n\nHlej na naše prawidła za wužiwanje API, Prawidła za wužiwanje polow a Prawidła za wužiwanje Nominatim.

    Naši přinošowarjo

    NaÅ¡a licenca CC-BY-SA žada sej, zo “daÅ¡ prěnjotnemu awtorej dźak přiměrjeny medijej abo srědkej, kotryž wužiwaÅ¡”. Jednotliwi kartěrowarjo OSM nježadaja sej přidatne dźakprajenje k “OpenStreetMap contributors”, ale hdyž so daty z narodneho kartěrowanskeho předewzaća abo z druheho wuznamneho žórła w OpenStreetMap zapřijimaja, je přiměrjene, jim přez direktne přewzaće jich dźakprajenja abo přez wotkazowanje na njo na tutej stronje dźak prajić.

    • Australska: Wobsahuje předměšćanske daty na zakładźe datow Australian Bureau of Statistics (Awstralska zarjad za statistiku).
    • Kanada: Wobsahuje daty z GeoBase®, GeoGratis (© Department of Natural Resources Canada), CanVec (© Department of Natural Resources Canada), a StatCan (Geography Division, Statistics Canada).
    • Nowoseelandska: Wobsahuje daty ze žórłow wot Land Information New Zealand. Awtorske prawo wuměnjene.
    • \n
    • Pólska: Wobsahuje daty z UMP-pcPL maps. Awtorske prawo přinoÅ¡owarjow UMP-pcPL.
    • \n
    • Zjednoćene kralestwo: Wobsahuje daty z Ordnance Survey (Zarjadniske krajměrjenstwo) © Awtorske prawo a prawo za datowe banki 2010.

    Zapřijimanje datow do OpenStreetMap njerěka, zo poskićowar originalnych datow OpenStreetMap připóznawa, někajku garantiju dodawa abo rukowanje pśewozmje.

    " + legal_babble: "

    Awtorske prawo a licenca

    \n

    \nOpenStreetMap wobsteji ze zjawnych datow, licencowanych pod licencu Creative Commons Attribution-ShareAlike 2.0 (CC-BY-SA).

    Móžeš naše karty a daty kopěrować, rozdźělić, přenjesć a přiměrić, tak dołho kaž OpenStreetMap a jich sobuskutkowacych naspominaš. Jeli změniš naše karty abo daty abo zepěraš so na nje, móžeš wuslědk jenož pod samsnej licencu rozdźělić. Dospołny prawniski kod wujasnja twoje prawa a zamołwitosće.

    \n\n

    Kak awtorstwo OpenStreetMap naspomnić

    \n

    Jeli kartowe wobrazy z OpenStreetMap wužiwaÅ¡, žadamy sej, zo znajmjeńša podawaÅ¡ “© OpenStreetMap a sobuskutkowacych, CC-BY-SA”. Jeli jenož kartowe daty wužiwaÅ¡, dyrbiÅ¡ “kartowe daty © OpenStreetMap a sobuskutkowacych, CC-BY-SA” podać.

    Hdźež je móžno, OpenStreetMap měł wotkaz do http://www.openstreetmap.org/ a CC-BY-SA do http://creativecommons.org/licenses/by-sa/2.0/ měć. Jeli medij wužiwaš, hdźež wotkazy móžno njejsu (na př. wućišćane dźěło), namjetujemy, zo pokazuješ swojich čitarjow na www.openstreetmap.org a na www.creativecommons.org.

    \n\n

    Dalše informacije

    \n

    Čitaj wjace wo wužiwanju našich datow Huste prawniske prašenja.

    Přinošowarjow OSM namołwjamy, zo ženje daty ze žórłow njepřidawaja, kotrež su přez awtorske prawo škitane (na př. z Google Maps abo z wućišćanych kartow) bjez wurazneje dowolnosće awtorow.

    Hačrunjež OpenStreetMap wobsteji ze zjawnych datow, njemóžemy darmotny kartowy API za wuwiwarjow třećich poskićić. \n\nHlej naše prawidła za wužiwanje API, Prawidła za wužiwanje polow a Prawidła za wužiwanje Nominatim.

    \n\n

    Naši sobuskutkowacy

    \n

    NaÅ¡a licenca CC-BY-SA žada sej, zo “daÅ¡ prěnjotnemu awtorej dźak přiměrjeny medijej abo srědkej, kotryž wužiwaÅ¡”. Jednotliwi kartěrowarjo OSM nježadaja sej přidatne dźakprajenje k “sobuskutkowarjam OpenStreetMap”, ale hdyž so daty z narodneho kartěrowanskeho předewzaća abo z druheho wuznamneho žórła w OpenStreetMap zapřijimaja, je přiměrjene, jim přez direktne přewzaće jich dźakprajenja abo přez wotkazowanje na njo na tutej stronje dźak prajić.

    \n\n \n
    • Awstralska: Wobsahuje předměšćanske daty na zakładźe datow Awstralskeho zarjada za statistiku (Australian Bureau of Statistics).
    • \n
    • Awstriska: Wobsahuje daty z Stadt Wien pod CC-BY.
    • \n
    • Kanada: Wobsahuje daty z GeoBase®, GeoGratis (© Department of Natural Resources Canada), CanVec (© Department of Natural Resources Canada), a StatCan (Geography Division, Statistics Canada).
    • \n
    • Francoska: Wobsahuje daty z Direction Générale des Impôts.
    • \n
    • Nowoseelandska: Wobsahuje daty ze žórłow wot Land Information New Zealand. Awtorske prawo wuměnjene.
    • \n
    • Pólska: Wobsahuje daty z UMP-pcPL maps. Awtorske prawo sobuskutkowacych UMP-pcPL.
    • \n
    • Zjednoćene kralestwo: Wobsahuje daty z Ordnance Survey (Zarjadniske krajměrjenstwo) © Awtorske prawo a prawo za datowe banki 2010.
    \n\n

    Zapřijimanje datow do OpenStreetMap njerěka, zo poskićowar originalnych datow OpenStreetMap připóznawa, někajku garantiju dodawa abo rukowanje přewozmje.

    " native: mapping_link: kartěrowanje započeć native_link: hornjoserbskej wersiji @@ -1123,7 +1131,7 @@ hsb: allow_write_diary: dźenikowe zapiski a komentary spisać a přećelow zapisać. allow_write_gpx: GPS-ćěrje nahrać. allow_write_prefs: twoje wužiwarske nastajenja změnić. - request_access: Aplikacija %{app_name} prosy wo přistup na twoje konto. ProÅ¡u rozsudź, hač aplikacija ma slědowace kmanosće měć. MóžeÅ¡ wšě abo jenož někotre z nich wubrać. + request_access: Aplikacija %{app_name} prosy wo přistup na twoje konto, %{user}. ProÅ¡u rozsudź, hač aplikacija ma slědowace prawa měć. MóžeÅ¡ wšě abo jenož někotre z nich wubrać. revoke: flash: Sy token za %{application} anulował. oauth_clients: @@ -1340,13 +1348,13 @@ hsb: trackable: SĆĚHUJOMNY view_map: Kartu pokazać trace_form: - description: Wopisanje + description: "Wopisanje:" help: Pomoc - tags: Atributy + tags: "Atributy:" tags_help: přez komu dźěleny upload_button: Nahrać - upload_gpx: GPX-dataju nahrać - visibility: Widźomnosć + upload_gpx: "GPX-dataju nahrać:" + visibility: "Widźomnosć:" visibility_help: Å¡to to woznamjenja? trace_header: see_all_traces: Wšě ćěrje pokazać @@ -1356,8 +1364,8 @@ hsb: trace_optionals: tags: Atributy trace_paging_nav: - next: Přichodny » - previous: "« Předchadny" + next: Přichodny » + previous: « Předchadny showing_page: Pokazuje so strona %{page} view: delete_track: Tutu čaru zničić @@ -1475,12 +1483,28 @@ hsb: new to osm: Nowy w OpenStreetMap? notice: Wjace wo bórzomnej licencnej změnje OpenStreetMap (přełožki) (diskusija) openid: "%{logo} OpenID:" + openid invalid: Zda so, zo twój OpenID je njepłaćiwy + openid missing provider: Bohužel njemóžachmy z twojim OpenID-poskićowarjom zwjazać. openid_logo_alt: Z OpenID přizjewić openid_providers: + aol: + alt: Z OpenID z AOL přizjewić + title: Z AOL přizjewić google: + alt: Z OpenID z Google přizjewić title: Přizjewjenje z Google + myopenid: + alt: Z OpenID z myOpenID přizjewić + title: Z myOpenID přizjewić openid: + alt: Z OpenID-URL přizjewić title: Přizjewjenje z OpenID + wordpress: + alt: Z OpenID z Wordpress přizjewić + title: Z Wordpress přizjewić + yahoo: + alt: Z OpenID z Yahoo přizjewić + title: Z Yahoo přizjewić password: "Hesło:" register now: Nětko registrować remember: "Spomjatkować sej:" @@ -1519,10 +1543,14 @@ hsb: license_agreement: Hdyž swoje konto wubkrućeÅ¡, dyrbiÅ¡ wuměnjenjam za sobuskutkowarjow přihłosować. no_auto_account_create: Bohužel njemóžemy tuchwilu žane konto za tebje awtomatisce załožić. not displayed publicly: Njepokazuje so zjawnje (hlej Prawidła priwatnosće) + openid: "%{logo} OpenID:" + openid association: "

    Twój OpenID hišće njeje zwjazany z kontom OpenStreetMap.

    \n
      \n
    • Jeli sy nowy w OpenStreetMap, załož nowe konto z pomocu slědowaceho formulara.
    • \n
    • \nJeli maÅ¡ hižo konto, móžeÅ¡ so z wužiwarskim mjenom a hesłom přizjewić a potom konto ze swojim OpenID w swojich wužiwarskich nastajenjach zwjazać.\n
    • \n
    " + openid no password: Za OpenID hesko trěbne njeje, ale někotre přidatne nastroje móhli sej hesło wužadać. password: "Hesło:" terms accepted: Dźakujemy so, zo sy nowe wuměnjenja za sobuskutkowarjow akceptował! terms declined: Wobžarujemy, zo sy so rozsudźił, nowe wužiwarske wuměnjenja njeakceptować. Za dalÅ¡e informacije hlej proÅ¡u tutu wikistronu. title: Konto załožić + use openid: Alternatiwnje OpenID z %{logo} přizjewić no_such_user: body: Bohužel žadyn wužiwar z mjenom %{user} njeje. ProÅ¡u skontroluj prawopis, abo wotkaz, na kotryž sy kliknył, je njepłaćiwy. heading: Wužiwar %{user} njeeksistuje @@ -1554,6 +1582,7 @@ hsb: consider_pd: Přidatnje k horjeka mjenowanemu dojednanju, mam swoje přinoÅ¡ki za zjawnosć přistupne. consider_pd_why: Å to to je? decline: Wotpokazać + guidance: "Informacije, kotrež pomhaja tute wuměnjenja rozumić: zrozumliwe zjeće a někotre njeoficielne přełožki" heading: Wuměnjenja za sobuskutkowarjow legale_names: france: Francoska diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 1dff4d661..20dfe535b 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -121,6 +121,11 @@ hu: entry_role: "Kapcsolat: %{relation_name} (mint %{relation_role})" map: deleted: Törölve + edit: + area: Terület szerkesztése + node: Pont szerkesztése + relation: Kapcsolat szerkesztése + way: Vonal szerkesztése larger: area: Terület megtekintése nagyobb térképen node: Pont megtekintése nagyobb térképen @@ -267,8 +272,8 @@ hu: still_editing: (szerkesztés alatt) view_changeset_details: Módosításcsomag részleteinek megtekintése changeset_paging_nav: - next: következő » - previous: "« előző" + next: következő » + previous: « előző showing_page: "Jelenlegi oldal: %{page}" changesets: area: Terület @@ -884,7 +889,8 @@ hu: map: base: cycle_map: Kerékpártérkép - noname: NincsNév + mapquest: MapQuest Open + transport_map: Tömegközlekedési térkép site: edit_disabled_tooltip: Közelíts a térkép szerkesztéséhez edit_tooltip: Térkép szerkesztése @@ -921,8 +927,9 @@ hu: zero: A postaláda nem tartalmaz olvasatlan üzenetet intro_1: Az OpenStreetMap egy szabadon szerkeszthető térkép az egész világról. Olyan emberek készítik, mint Te. intro_2: Az OpenStreetMap lehetővé teszi neked, hogy szabadon megtekintsd, szerkeszd és használd a földrajzi adatokat, bárhol is vagy a Földön. - intro_3: Az OpenStreetMap hostingját a %{ucl} és a %{bytemark} támogatja. A projekt további támogatói a %{partners} találhatók. + intro_3: "Az OpenStreetMap hostingját szívélyesen támogatják: %{ucl}, %{ic} és %{bytemark}. A projekt további támogatói a %{partners} találhatók." intro_3_bytemark: Bytemark + intro_3_ic: Imperial College London intro_3_partners: wikiben license: title: Az OpenStreetMap adatokra a Creative Commons Nevezd meg!-Így add tovább! 2.0 Általános Licenc vonatkozik @@ -954,7 +961,7 @@ hu: english_link: az eredeti angol nyelvű text: Abban az esetben, ha ez a lefordított oldal és %{english_original_link} eltér egymástól, akkor az angol nyelvű oldal élvez elsőbbséget title: Erről a fordításról - legal_babble: "

    Szerzői jog és licenc

    \n

    \n Az OpenStreetMap egy szabad adathalmaz, amelyre a Creative\n Commons Nevezd meg! - Így add tovább! 2.0 licenc (CC-BY-SA) vonatkozik.\n

    \n

    \n Szabadon másolhatod, terjesztheted, továbbíthatod és átdolgozhatod térképünket\n és adatainkat mindaddig, amíg feltünteted az OpenStreetMapot és\n közreműködőit. Ha módosítod vagy felhasználod térképünket vagy adatainkat, akkor\n az eredményt is csak azonos licenccel terjesztheted. A\n teljes jogi\n szöveg ismerteti a jogaidat és kötelezettségeidet.\n

    \n\n

    Hogyan kell feltüntetned az OpenStreetMapot?

    \n

    \n Ha az OpenStreetMap térkép képeit használod, kérünk, hogy\n legyen feltüntetve legalább az “© OpenStreetMap\n közreműködői, CC-BY-SA” szöveg. Ha csak a térkép adatait használod,\n akkor a “Térképadatok © OpenStreetMap közreműködői,\n CC-BY-SA” feltüntetését kérjük.\n

    \n

    \n Ahol lehetséges, ott az OpenStreetMapnak hiperhivatkoznia kell a http://www.openstreetmap.org/,\n a CC-BY-SA-nak pedig a http://creativecommons.org/licenses/by-sa/2.0/ webhelyre. Ha\n olyan médiumot használsz, ahol a hivatkozás nem lehetséges (pl. egy\n nyomtatott munka), javasoljuk, hogy irányítsd az olvasóidat a\n www.openstreetmap.org (esetleg az\n ‘OpenStreetMap’ szöveg kibővítésével erre a teljes címre) és a\n www.creativecommons.org webhelyre.\n

    \n\n

    Tudj meg többet!

    \n

    \n További információ adataink használatáról a Jogi\n GYIK-ben.\n

    \n

    \n Az OSM közreműködői emlékeztetve lettek arra, hogy soha ne adjanak hozzá adatokat egyetlen\n szerzői jogvédett forrásból (pl. Google Térkép vagy nyomtatott térképek) se a\n szerzői jog tulajdonosának kifejezett engedélye nélkül.\n

    \n

    \n Bár az OpenStreetMap szabad adathalmaz, nem tudunk biztosítani\n ingyenes térkép API-t külső fejlesztőknek.\n\n Lásd a API-használati irányelveket,\n a Csempehasználati irányelveket\n és a Nominatim használati irányelveit.\n

    \n\n

    Közreműködőink

    \n

    \n A CC-BY-SA licencünk előírja, hogy “az eredeti szerzőt\n a médiumnak vagy a használt eszköznek megfelelően fel kell\n tüntetni”. Az egyéni térképszerkesztők nem kérik\n feltüntetésüket az “OpenStreetMap közreműködői” szövegen\n felül, de ahol az OpenStreetMap nemzeti térképészeti\n ügynökségtől vagy más jelentős forrásból származó adatokat tartalmaz,\n ott ésszerű lehet feltüntetni azokat közvetlenül,\n vagy hivatkozva erre az oldalra.\n

    \n\n\n\n
      \n
    • Ausztrália: Tartalmaz külvárosi adatokat az\n Ausztrál Statisztikai Hivatal adatain alapulva.
    • \n
    • Kanada: Adatokat tartalmaz a következő forrásokból:\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), and StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Új-Zéland: Adatokat tartalmaz a következő forrásból:\n Land Information New Zealand. Szerzői jog fenntartva.
    • \n
    • Lengyelország: Adatokat tartalmaz az UMP-pcPL mapsből. Copyright\n UMP-pcPL közreműködői.
    • \n
    • Egyesült Királyság: Tartalmaz Ordnance\n Survey adatokat © Szerzői és adatbázisjog\n 2010.
    • \n
    \n\n

    \n Az adatok befoglalása az OpenStreetMapba nem jelenti azt, hogy az eredeti\n adatszolgáltató támogatja az OpenStreetMapot, nyújt garanciát vagy\n vállal rá felelősséget.\n

    " + legal_babble: "

    Szerzői jog és licenc

    \n

    \n Az OpenStreetMap egy szabad adathalmaz, amelyre a Creative\n Commons Nevezd meg! - Így add tovább! 2.0 licenc (CC-BY-SA) vonatkozik.\n

    \n

    \n Szabadon másolhatod, terjesztheted, továbbíthatod és átdolgozhatod térképünket\n és adatainkat mindaddig, amíg feltünteted az OpenStreetMapot és\n közreműködőit. Ha módosítod vagy felhasználod térképünket vagy adatainkat, akkor\n az eredményt is csak azonos licenccel terjesztheted. A\n teljes jogi\n szöveg ismerteti a jogaidat és kötelezettségeidet.\n

    \n\n

    Hogyan kell feltüntetned az OpenStreetMapot?

    \n

    \n Ha az OpenStreetMap térkép képeit használod, kérünk, hogy\n legyen feltüntetve legalább az “© OpenStreetMap\n közreműködői, CC-BY-SA” szöveg. Ha csak a térkép adatait használod,\n akkor a “Térképadatok © OpenStreetMap közreműködői,\n CC-BY-SA” feltüntetését kérjük.\n

    \n

    \n Ahol lehetséges, ott az OpenStreetMapnak hiperhivatkoznia kell a http://www.openstreetmap.org/,\n a CC-BY-SA-nak pedig a http://creativecommons.org/licenses/by-sa/2.0/ webhelyre. Ha\n olyan médiumot használsz, ahol a hivatkozás nem lehetséges (pl. egy\n nyomtatott munka), javasoljuk, hogy irányítsd az olvasóidat a\n www.openstreetmap.org (esetleg az\n ‘OpenStreetMap’ szöveg kibővítésével erre a teljes címre) és a\n www.creativecommons.org webhelyre.\n

    \n\n

    Tudj meg többet!

    \n

    \n További információ adataink használatáról a Jogi\n GYIK-ben.\n

    \n

    \n Az OSM közreműködői emlékeztetve lettek arra, hogy soha ne adjanak hozzá adatokat egyetlen\n szerzői jogvédett forrásból (pl. Google Térkép vagy nyomtatott térképek) se a\n szerzői jog tulajdonosának kifejezett engedélye nélkül.\n

    \n

    \n Bár az OpenStreetMap szabad adathalmaz, nem tudunk biztosítani\n ingyenes térkép API-t külső fejlesztőknek.\n\n Lásd a API-használati irányelveket,\n a Csempehasználati irányelveket\n és a Nominatim használati irányelveit.\n

    \n\n

    Közreműködőink

    \n

    \n A CC-BY-SA licencünk előírja, hogy “az eredeti szerzőt\n a médiumnak vagy a használt eszköznek megfelelően fel kell\n tüntetni”. Az egyéni térképszerkesztők nem kérik\n feltüntetésüket az “OpenStreetMap közreműködői” szövegen\n felül, de ahol az OpenStreetMap nemzeti térképészeti\n ügynökségtől vagy más jelentős forrásból származó adatokat tartalmaz,\n ott ésszerű lehet feltüntetni azokat közvetlenül,\n vagy hivatkozva erre az oldalra.\n

    \n\n\n\n
      \n
    • Ausztrália: tartalmaz külvárosi adatokat az\n Ausztrál Statisztikai Hivatal adatain alapulva.
    • \n
    • Ausztria: adatokat tartalmaz a következő forrásból:\n Stadt Wien\n CC-BY licenc alatt.
    • \n
    • Kanada: adatokat tartalmaz a következő forrásokból:\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), and StatCan (Geography Division,\n Statistics Canada).
    • \n
    • France: adatokat tartalmaz a következő forrásból:\n Direction Générale des Impôts.
    • \n
    • Új-Zéland: adatokat tartalmaz a következő forrásból:\n Land Information New Zealand. Szerzői jog fenntartva.
    • \n
    • Lengyelország: adatokat tartalmaz a következő forrásból: UMP-pcPL maps. Copyright\n UMP-pcPL közreműködői.
    • \n
    • Egyesült Királyság: tartalmaz Ordnance\n Survey adatokat © Szerzői és adatbázisjog\n 2010.
    • \n
    \n\n

    \n Az adatok befoglalása az OpenStreetMapba nem jelenti azt, hogy az eredeti\n adatszolgáltató támogatja az OpenStreetMapot, nyújt garanciát vagy\n vállal rá felelősséget.\n

    " native: mapping_link: kezdheted a térképezést native_link: magyar nyelvű változatára @@ -1119,7 +1126,7 @@ hu: allow_write_diary: naplóbejegyzések, hozzászólások készítése és barátok hozzáadása. allow_write_gpx: GPS nyomvonalak feltöltése. allow_write_prefs: felhasználói beállítások módosítása. - request_access: A(z) %{app_name} alkalmazás hozzáférést kér a felhasználói fiókodhoz. Kérlek, jelöld, ha azt szeretnéd, hogy az alkalmazás rendelkezzen a következő képességekkel. Választhatsz olyan sokat vagy keveset, amennyit szeretnél. + request_access: A(z) %{app_name} alkalmazás hozzáférést kér a felhasználói fiókodhoz, %{user}. Kérlek, jelöld, ha azt szeretnéd, hogy az alkalmazás rendelkezzen a következő képességekkel. Választhatsz olyan sokat vagy keveset, amennyit szeretnél. revoke: flash: Visszavontad az utalványt a(z) %{application} alkalmazáshoz oauth_clients: @@ -1341,13 +1348,13 @@ hu: trackable: NYOMKÖVETHETŐ view_map: Térkép megtekintése trace_form: - description: Leírás + description: "Leírás:" help: Segítség - tags: Címkék + tags: "Címkék:" tags_help: vesszővel elválasztva upload_button: Feltöltés - upload_gpx: GPX fájl feltöltése - visibility: Láthatóság + upload_gpx: "GPX fájl feltöltése:" + visibility: "Láthatóság:" visibility_help: Mit jelent ez? trace_header: see_all_traces: Összes nyomvonal megtekintése @@ -1357,8 +1364,8 @@ hu: trace_optionals: tags: Címkék trace_paging_nav: - next: Következő » - previous: "« Előző" + next: Következő » + previous: « Előző showing_page: "Jelenlegi oldal: %{page}" view: delete_track: Ezen nyomvonal törlése @@ -1409,6 +1416,10 @@ hu: new email address: "Új e-mail cím:" new image: Kép hozzáadása no home location: Nem adtad meg az otthonod helyét. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: mi ez? + openid: "OpenID:" preferred editor: "Előnyben részesített szerkesztő:" preferred languages: "Előnyben részesített nyelvek:" profile description: "Profil leírása:" @@ -1471,12 +1482,37 @@ hu: lost password link: Elfelejtetted a jelszavad? new to osm: Új vagy az OpenStreetMapnál? notice: Tudj meg többet az OpenStreetMap közelgő licencváltozásáról (fordítások) (vita) + openid: "%{logo} OpenID:" + openid invalid: Sajnos úgy tűnik, hogy az OpenID azonosítód hibás + openid missing provider: Sajnos nem sikerült kapcsolódni az OpenID szolgáltatódhoz + openid_logo_alt: Bejelentkezés egy OpenID-vel + openid_providers: + aol: + alt: Bejelentkezés egy AOL OpenID-vel + title: Bejelentkezés AOL-lal + google: + alt: Bejelentkezés egy Google OpenID-vel + title: Bejelentkezés Google-lel + myopenid: + alt: Bejelentkezés egy myOpenID OpenID-vel + title: Bejelentkezés myOpenID-vel + openid: + alt: Bejelentkezés egy OpenID URL-lel + title: Bejelentkezés OpenID-vel + wordpress: + alt: Bejelentkezés egy Wordpress OpenID-vel + title: Bejelentkezés Wordpress-szel + yahoo: + alt: Bejelentkezés egy Yahoo OpenID-vel + title: Bejelentkezés Yahoo-val password: "Jelszó:" register now: Regisztrálj most remember: "Emlékezz rám:" title: Bejelentkezés to make changes: Ahhoz, hogy módosíthasd az OpenStreetMap-adatokat, rendelkezned kell egy felhasználói fiókkal. webmaster: webmester + with openid: "A bejelentkezéshez az OpenID azonosítódat is használhatod:" + with username: "Már van OpenStreetMap fiókod? Jelentkezz be a felhasználóneveddel és jelszavaddal:" logout: heading: Kijelentkezés az OpenStreetMapból logout_button: Kijelentkezés @@ -1507,10 +1543,14 @@ hu: license_agreement: Amikor megerősíted a felhasználói fiókodat, el kell fogadnod a hozzájárulási feltételeket. no_auto_account_create: Sajnos jelenleg nem tudunk neked létrehozni automatikusan egy felhasználói fiókot. not displayed publicly: Nem jelenik meg nyilvánosan (lásd adatvédelmi irányelvek) + openid: "%{logo} OpenID:" + openid association: "

    Az OpenID azonosítód még nincs hozzákapcsolva egy OpenStreetMap fiókhoz.

    \n
      \n
    • Ha még új vagy az OpenStreetMapnál, hozz létre egy új fiókot az alábbi űrlap használatával.
    • \n
    • \n Ha már rendelkezel fiókkal, felhasználóneved és jelszavad\n használatával bejelentkezhetsz a fiókodba, majd a felhasználói\n beállításoknál hozzákapcsolhatod azt az OpenID-hez.\n
    • \n
    " + openid no password: Az OpenID-vel nincs szükség jelszóra, de szükség lehet néhány többleteszközre vagy szerverre. password: "Jelszó:" terms accepted: Köszönjük, hogy elfogadtad az új hozzájárulási feltételeket! terms declined: Sajnáljuk, hogy úgy döntöttél, nem fogadod el az új hozzájárulási feltételeket. További információért lásd ezt a wiki oldalt. title: Felhasználói fiók létrehozása + use openid: A bejelentkezéshez használhatod az %{logo} OpenID-t is. no_such_user: body: Sajnálom, nincs %{user} nevű felhasználó. Ellenőrizd a helyességét, vagy lehet, hogy a link, amire kattintottál, rossz. heading: "%{user} felhasználó nem létezik" diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 4592a297a..e9e6bae07 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -268,8 +268,8 @@ ia: still_editing: (ancora in modification) view_changeset_details: Vider detalios del gruppo de modificationes changeset_paging_nav: - next: Sequente » - previous: "« Precedente" + next: Sequente » + previous: « Precedente showing_page: Pagina %{page} monstrate changesets: area: Area @@ -883,7 +883,8 @@ ia: map: base: cycle_map: Carta cyclista - noname: Sin nomine + mapquest: MapQuest Open + transport_map: Carta de transporto site: edit_disabled_tooltip: Face zoom avante pro modificar le carta edit_tooltip: Modificar le carta @@ -894,7 +895,7 @@ ia: layouts: community_blogs: Blogs del communitate community_blogs_title: Blogs de membros del communitate de OpenStreetMap - copyright: Copyright & Licentia + copyright: Copyright & Licentia documentation: Documentation documentation_title: Documentation pro le projecto donate: Supporta OpenStreetMap per %{link} al Fundo de Actualisation de Hardware. @@ -1271,7 +1272,7 @@ ia: search: search: Cercar search_help: "exemplos: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', o 'post offices near Lünen' altere exemplos..." - submit_text: Ir + submit_text: Va where_am_i: Ubi es io? where_am_i_title: Describer le position actual per medio del motor de recerca sidebar: @@ -1352,8 +1353,8 @@ ia: trace_optionals: tags: Etiquettas trace_paging_nav: - next: Sequente » - previous: "« Precedente" + next: Sequente » + previous: « Precedente showing_page: Pagina %{page} monstrate view: delete_track: Deler iste tracia diff --git a/config/locales/is.yml b/config/locales/is.yml index ee4f8b859..6d70052f6 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -258,8 +258,8 @@ is: still_editing: (enn að breyta) view_changeset_details: Skoða breytingarsett changeset_paging_nav: - next: Næsta » - previous: "« Fyrri" + next: Næsta » + previous: « Fyrri showing_page: Sýni síðu %{page} changesets: area: Svæði @@ -564,14 +564,13 @@ is: base: cycle_map: Hjólakort mapnik: Aðalkort (Mapnik) - noname: Ónefndir hlutir overlays: maplint: Villulag site: edit_zoom_alert: Þú verður að þysja inn á smærra svæði til að breyta gögnunum history_zoom_alert: Þú verður að þysja inn á smærra svæði til að sjá breytingarskránna layouts: - copyright: Höfundaréttur & leyfi + copyright: Höfundaréttur & leyfi donate: Hjálpaðu OpenStreetMap verkefninu með %{link} í vélbúnaðarsjóðinn. donate_link_text: fjárframlagi edit: Breyta @@ -979,8 +978,8 @@ is: trace_optionals: tags: Tögg trace_paging_nav: - next: Næsta » - previous: "« Fyrri" + next: Næsta » + previous: « Fyrri showing_page: Sýni síðu %{page} view: delete_track: Eyða diff --git a/config/locales/it.yml b/config/locales/it.yml index ed6872544..b61940cff 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -271,8 +271,8 @@ it: still_editing: (ancora in modifica) view_changeset_details: Visualizza i dettagli del gruppo di modifiche changeset_paging_nav: - next: Successivo » - previous: "« Precedente" + next: Successivo » + previous: « Precedente showing_page: Visualizzata la pagina %{page} changesets: area: Area @@ -882,7 +882,7 @@ it: map: base: cycle_map: Open Cycle Map - noname: NessunNome + transport_map: Mappa dei trasporti site: edit_disabled_tooltip: Zooma per modificare la mappa edit_tooltip: Modifica la mappa @@ -1348,8 +1348,8 @@ it: trace_optionals: tags: Etichette trace_paging_nav: - next: Successivo » - previous: "« Precedente" + next: Successivo » + previous: « Precedente showing_page: Visualizzata la pagina %{page} view: delete_track: Elimina questo tracciato diff --git a/config/locales/ja.yml b/config/locales/ja.yml index d062824eb..f00b7201c 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -8,6 +8,7 @@ # Author: Mage Whopper # Author: Miya # Author: Nazotoko +# Author: Schu # Author: Wrightbus # Author: 青子守歌 ja: @@ -116,6 +117,11 @@ ja: entry_role: リレーション %{relation_name} (ロール %{relation_role}で) map: deleted: 削除済み + edit: + area: 領域を編集 + node: ノードを編集 + relation: リレーションを編集 + way: ウェイを編集 larger: area: この範囲を大きい地図で見る node: このノードを大きいマップで見る @@ -191,6 +197,7 @@ ja: details: 詳細 drag_a_box: ボックスをマップにドラッグして領域を選択 edited_by_user_at_timestamp: "[[user]]による[[timestamp]]時点の編集" + hide_areas: 領域を隠す history_for_feature: "[[feature]]の履歴" load_data: データの読み込み loaded_an_area_with_num_features: "[[num_features]]個の地物を含む領域を読み込みました。一般に、一部のブラウザーでは、この量のデータ表示をうまく処理できないことがあるようです。通常、ブラウザは一度に100未満の地物を表示させるとよいようです: 何かすると、ブラウザが遅くなったり、反応しなくなったりします。それでも、このデータを表示したいならば、以下のボタンをクリックしてください。" @@ -212,6 +219,8 @@ ja: type: node: ノード way: ウェイ + private_user: プライベートユーザ + show_areas: 領域を表示 show_history: 履歴表示 unable_to_load_size: "読み込みできません: 境界囲みのサイズ [[bbox_size]]が大きすぎます。(%{max_bbox_size}より小さい必要があります)" wait: お待ちください... @@ -221,6 +230,7 @@ ja: wiki_link: key: Wikiの %{key} tagについての説明ページ tag: Wikiの %{key}=%{value} についての解説ページ + wikipedia_link: ウィキペディアの %{page} 記事 timeout: sorry: 申し訳ありません。id %{id} のデータは %{type} は大きすぎて取得できません。 type: @@ -237,8 +247,8 @@ ja: way_title: "ウェイ: %{way_name}" way_details: also_part_of: - one: ウェイ「%{related_ways}」の一部でもあります - other: ウェイ「%{related_ways}」の一部でもあります + one: ウェイ「%{related_ways}」の一部でもあります} + other: ウェイ「%{related_ways}」の一部でもあります} nodes: "ノード:" part_of: "変更セット:" way_history: @@ -257,8 +267,8 @@ ja: still_editing: (まだ編集中です) view_changeset_details: 変更セットの詳細表示 changeset_paging_nav: - next: 旧 » - previous: "« 新" + next: 旧 » + previous: « 新 showing_page: ページ %{page} 表示中 changesets: area: 領域 @@ -350,6 +360,15 @@ ja: user_title: "%{user} の日記" editor: default: 規定値 (現在は %{name}) + potlatch: + description: Potlatch 1 ( ブラウザ内エディタ ) + name: Potlatch 1 + potlatch2: + description: Potlatch 2 ( ブラウザ内エディタ ) + name: Potlatch 2 + remote: + description: リモート制御 ( JOSM または Merkaartor ) + name: リモート制御 export: start: add_marker: 地図にマーカーを追加する @@ -437,12 +456,14 @@ ja: car_wash: 洗車 casino: è³­å ´ cinema: 映画館 - clinic: クリニック + clinic: 診療所 club: クラブ college: 大学 community_centre: コミュニティセンター courthouse: 裁判所 + crematorium: 火葬場 dentist: 歯科医 + doctors: 医師 dormitory: 寮 drinking_water: 飲み水 driving_school: 自動車学校 @@ -453,6 +474,7 @@ ja: fire_hydrant: 消火栓 fire_station: 消防署 fountain: 噴水 + fuel: 燃料 grave_yard: 墓地 gym: フィットネスセンター hall: ホール @@ -468,6 +490,7 @@ ja: nightclub: ナイトクラブ nursery: 保育所 nursing_home: 特別養護老人ホーム + office: オフィス park: 公園 parking: 駐車場 pharmacy: 薬局 @@ -475,10 +498,12 @@ ja: police: 警察所 post_box: 郵便ポスト post_office: 郵便局 + preschool: 幼稚園 prison: 刑務所 pub: パブ(立ち吞み屋) public_building: 公共建築物 public_market: 公設市場 + reception_area: レセプションエリア restaurant: レストラン retirement_home: 老人ホーム sauna: サウナ @@ -502,12 +527,16 @@ ja: boundary: administrative: 行政境界 building: + apartments: 団地 + block: 構築物 + bunker: 貯蔵庫 chapel: 礼拝堂 church: 教会 city_hall: 市役所 commercial: 商業ビル dormitory: 寮 entrance: ビル入口 + farm: 農舎 flats: アパート garage: 車庫 hall: ホール @@ -517,6 +546,8 @@ ja: industrial: 工業ビル office: オフィスビル public: 公共建築物 + residential: 住宅 + retail: 店舗ビル school: 校舎 shop: 店舗 stadium: 球技場 @@ -525,17 +556,32 @@ ja: tower: 塔 train_station: 鉄道駅 highway: + bridleway: 乗馬道 bus_stop: バス停 byway: 路地 + construction: 建設中の高速道路 cycleway: 自転車道 footway: 歩道 ford: ç ¦ gate: 門 + living_street: 住宅街 + minor: 補助道路 + motorway: 高速道路 motorway_junction: 高速道路ジャンクション + path: パス platform: プラットフォーム + primary: 幹線道路 + primary_link: 幹線道路 road: 道路 + secondary: 一般道路 + secondary_link: 一般道路 + service: 取付道路 steps: 階段 + tertiary: 周辺道路 trunk: 国道 + trunk_link: 幹線道路 + unclassified: 未分類の道路 + unsurfaced: 未舗装道路 historic: battlefield: 戦場 boundary_stone: 境界石 @@ -547,6 +593,7 @@ ja: manor: 荘園 memorial: 記念碑 mine: 鉱山 + monument: 記念碑 museum: 博物館 ruins: 廃墟 tower: 塔 @@ -556,10 +603,15 @@ ja: cemetery: 墓地 commercial: 商業地域 construction: 工事中 + farm: 農場 farmland: 農地 + forest: 森林 + grass: 草地 + industrial: 工業地帯 landfill: 埋め立て地 meadow: 牧草地 military: 軍用地域 + mine: 鉱山 mountain: å±± park: 公園 plaza: 広場 @@ -567,8 +619,10 @@ ja: railway: 鉄道 reservoir: 貯水池 residential: 住宅街 + retail: 小売店 vineyard: Vineyard wetland: 湿地帯 + wood: 森林 leisure: beach_resort: ビーチリゾート common: 共有地 @@ -582,11 +636,13 @@ ja: park: 公園 pitch: 運動場 playground: 遊び場 + recreation_ground: 遊園地 slipway: 造船台 sports_centre: スポーツセンター stadium: スタジアム swimming_pool: 水泳用プール track: 陸上競技用トラック + water_park: 親水公園 natural: bay: 入り江 beach: 砂浜 @@ -597,6 +653,7 @@ ja: coastline: 海岸線 crater: クレーター feature: 地物 + fell: 荒野 fjord: フィヨルド geyser: 間欠泉 glacier: æ°·æ²³ @@ -648,9 +705,11 @@ ja: town: 町 village: 村 railway: + construction: 建設中の鉄道 disused: 廃線跡 funicular: ケーブル鉄道 halt: 列車停止 + junction: 鉄道連絡駅 level_crossing: 踏切 light_rail: ライトレール monorail: モノレール @@ -662,36 +721,66 @@ ja: tram: 路面軌道 tram_stop: トラム停留所 shop: + art: アートショップ bakery: パン屋 beauty: 美容室 beverages: 飲料ショップ bicycle: 自転車販売店 + books: 書店 + butcher: 肉屋 car: 自動車販売店 + car_dealer: カーディーラー + car_parts: 自動車部品販売店 + carpet: カーペットショップ clothes: 洋服店 cosmetics: 化粧品販売店 department_store: デパート + discount: 安売り店 + drugstore: ドラッグストア dry_cleaning: クリーニング electronics: 電気製品販売店 fish: 鮮魚販売店 florist: 花屋 food: 食品販売店 + furniture: 家具店 gallery: ギャラリー general: 雑貨屋 + gift: ギフトショップ greengrocer: 八百屋 + grocery: 食料品店 insurance: 保険 jewelry: 宝石店 - laundry: ランドリー + kiosk: キオスク + laundry: クリーニング店 + mall: モール + market: 市場 + mobile_phone: 携帯電話販売店 + motorcycle: バイクショップ + music: ミュージックショップ newsagent: 新聞販売店 + optician: メガネ店 organic: 有機食材店 outdoor: アウトドアショップ pet: ペットショップ + salon: 美容店 + shoes: 靴屋 shopping_centre: ショッピングセンター + sports: スポーツ用品専門店 + stationery: 文房具店 + supermarket: スーパーマーケット toys: 玩具店 + travel_agency: 旅行代理店 + video: ビデオショップ tourism: artwork: 芸術作品 + attraction: アトラクション camp_site: キャンプ場 + chalet: 別荘 + guest_house: 民宿 + hostel: ホステル hotel: ホテル information: 案内所 + motel: モーテル museum: 博物館 theme_park: テーマパーク valley: è°· @@ -700,18 +789,22 @@ ja: boatyard: ボートヤード canal: 運河 dam: ダム + derelict_canal: 遺棄運河 dock: 埠頭 + drain: 排水溝 lock: 岩場 lock_gate: 水門 + mineral_spring: 鉱泉 + mooring: 係留所 + rapids: 急流 river: 河川 riverbank: 川岸 stream: 小川 + wadi: 涸れ川 water_point: 給水所 waterfall: 滝 + weir: ダム javascripts: - map: - base: - noname: 無名 site: edit_disabled_tooltip: 編集のために地図を拡大する edit_tooltip: 地図を編集 @@ -720,19 +813,24 @@ ja: history_tooltip: この範囲の編集履歴を見る history_zoom_alert: 編集履歴を参照するにはもっと拡大してください layouts: + community_blogs: コミュニティ ブログ + community_blogs_title: OpenStreetMap コミュニティのメンバーからのブログ copyright: 著作権とライセンス documentation: ドキュメント documentation_title: プロジェクトのドキュメント donate: ハードウェアーアップグレード基金への%{link} で、OpenStreetMap を支援する。 donate_link_text: 寄付 edit: 編集 + edit_with: "%{editor} で編集" export: エクスポート export_tooltip: 地図データのエクスポート - foundation_title: OpenStreetMap ファウンデーション + foundation: 財団法人 + foundation_title: OpenStreetMap 財団法人 gps_traces: GPS トレース gps_traces_tooltip: トレースの管理 help: ヘルプ help_centre: ヘルプセンター + help_title: プロジェクトのヘルプサイト history: 履歴 home: ホーム home_tooltip: ホームへ戻る @@ -743,13 +841,13 @@ ja: zero: 受信箱に未読メッセージはありません intro_1: OpenStreetMap は自由に編集できる世界地図です。あなたのような人々が作りました。 intro_2: OpenStreetMap は地球上の誰でも、どこからでもこの共同作業の結果である地図データを編集、閲覧することを可能にしています。 - intro_3: OpenStreetMap は %{ucl} と %{bytemark}によってホスティングされています。%{partners} には協賛組織の一覧があります。 + intro_3: OpenStreetMap は %{ucl} 、%{ic} 、%{bytemark} によってホスティングされています。%{partners} には協賛組織の一覧があります。 intro_3_partners: ウィキ intro_3_ucl: ユニヴァーシティ・カレッジ・ロンドン (UCL) VR センター license: title: OpenStreetMapのデータは、クリエイティブコモンズ表示 - 継承2.0一般 でライセンスされています log_in: ログイン - log_in_tooltip: 自分のアカウントでログインする + log_in_tooltip: 自分のアカウントでログイン logo: alt_text: OpenStreetMap ロゴ logout: ログアウト @@ -760,7 +858,7 @@ ja: osm_offline: OpenStreetMap のデータベースはメンテナンスのため一時的に停止しています。 osm_read_only: OpenStreetMap のデータベースはメンテナンスのため一時的に読み込み専用モードになっています。 sign_up: 登録 - sign_up_tooltip: 編集できるアカウントを作成する + sign_up_tooltip: 編集のためのアカウントを作成 tag_line: 自由なウィキ世界地図 user_diaries: ユーザの日記 user_diaries_tooltip: ユーザの日記を見る @@ -768,6 +866,7 @@ ja: view_tooltip: 地図を見る welcome_user: "%{user_link} さん、ようこそ。" welcome_user_link_tooltip: あなたの個人ページ + wiki_title: プロジェクトの Wiki サイト license_page: foreign: english_link: 英語の原文 @@ -775,6 +874,7 @@ ja: title: この翻訳について native: mapping_link: マッピングを始める + native_link: THIS_LANGUAGE_NAME_HERE バージョン text: あなたは英語版の著作権情報のページを閲覧しています。%{native_link} から戻る事ができます。または %{mapping_link} からマッピングに戻れます。 title: このページについて message: @@ -841,11 +941,13 @@ ja: delete_button: 削除 notifier: diary_comment_notification: - footer: "%{readurl}でコメントを読むことができ、%{commenturl} でこめんとするか、%{replyurl} で返信できます。" + footer: "%{readurl}でコメントを読むことができ、%{commenturl} でコメントするか、%{replyurl} で返信できます。" hi: やあ、%{to_user} さん subject: "[OpenStreetMap] %{user} さんが、あなたの日記エントリーにコメントしてくれました" email_confirm: subject: "[OpenStreetMap] あなたのメールアドレスを確認しました。" + email_confirm_html: + greeting: こんにちは、 email_confirm_plain: click_the_link: この要求を出したのがあなたなら、下のリンクをクリックして、変更の認証をしてください。 greeting: こんにちは。 @@ -853,6 +955,7 @@ ja: hopefully_you_2: "%{server_url}から%{new_address}へ。" friend_notification: had_added_you: "%{user} さんが、あなたを OpenStreetMapの友達に登録しました。" + see_their_profile: %{userurl} でプロファイルを見ることができます。 subject: "[OpenStreetMap] %{user} さんが、あなたを友達に加えました。" gpx_notification: and_no_tags: とタグなし。 @@ -862,19 +965,22 @@ ja: more_info_1: GPX インポートの失敗とどうやったら避けられるかについての詳しいことは、 more_info_2: "それらはここにあります:" subject: "[OpenStreetMap] GPX のインポートが失敗" - greeting: やあ、 + greeting: こんにちは、 success: loaded_successfully: 得られた%{possible_points} 点のうち、%{trace_points}点がロードに成功しました。 subject: "[OpenStreetMap] GPX のインポートが成功" + with_description: 説明付き your_gpx_file: これはあなたのGPX ファイルのようです。 lost_password: subject: "[OpenStreetMap] パスワードリセットの要求" lost_password_html: - greeting: こんにちは。 + greeting: こんにちは、 hopefully_you: (たぶんあなたがですが、)誰かがこのEメールアドレスの openstreetmap.org アカウントのパスワードをリセットするように頼みました。 lost_password_plain: greeting: こんにちは、 message_notification: + footer1: "% {Readurl} でメッセージを読むこともできます。" + footer2: また、% {replyurl} で返信することができます。 hi: やあ %{to_user}、 signup_confirm: subject: "[OpenStreetMap] あなたのEメールアドレスの確認" @@ -889,6 +995,7 @@ ja: video_to_openstreetmap: OpenStreetMap の紹介ビデオ wiki_signup: また、OpenStreetMap wikのサインアップもしておくとよいでしょう。 signup_confirm_plain: + introductory_video: OpenStreetMap の紹介ビデオをこちらで見ることができます: more_videos: こちらにもっとビデオがあります: the_wiki_url: http://wiki.openstreetmap.org/wiki/Ja:Beginners%27_Guide wiki_signup_url: http://wiki.openstreetmap.org/index.php?title=Special:Userlogin&type=signup&returnto=Main_Page&uselang=ja @@ -900,7 +1007,7 @@ ja: allow_write_api: 地図を修正する。 allow_write_gpx: GPSトレースをアップロードする。 allow_write_prefs: あなたの利用者設定を変更する。 - request_access: アプリケーション %{app_name} たあなたのアカウントへの接続許可を求めています。そのアプリケーションに許可してもよいかどうかを確認してください。複数のアプリケーションに許可を与える事もできます。 + request_access: アプリケーション %{app_name} があなたのアカウント、%{user} への接続許可を求めています。そのアプリケーションに許可してもよいかどうかを確認してください。複数のアプリケーションに許可を与える事もできます。 revoke: flash: "%{application} へのトークンを無効にしました。" oauth_clients: @@ -968,7 +1075,7 @@ ja: shortlink: ショートリンク key: map_key: 凡例 - map_key_tooltip: この縮尺におけるmapnikレンダリングの凡例 + map_key_tooltip: マップのキー table: entry: admin: 行政境界 @@ -1044,7 +1151,7 @@ ja: search_results: 検索結果 trace: create: - trace_uploaded: GPX ファイルがアップロードされました。データベースへの登録にすこし時間がかかります。通常この作業は30分ほどで終了し、終了をお知らせするメールをあなたに送信します。 + trace_uploaded: GPX ファイルがアップロードされました。データベースへの登録に多少時間がかかります。通常この作業は30分ほどで完了し、そのことをお知らせするメールをあなたに送信します。 upload_trace: GPS トレースのアップロード delete: scheduled_for_deletion: 削除予定のトラック @@ -1097,14 +1204,14 @@ ja: trackable: 追跡可能 view_map: 地図で表示 trace_form: - description: 詳細 + description: 説明: help: ヘルプ help_url: http://wiki.openstreetmap.org/wiki/Ja:Upload - tags: タグ + tags: タグ: tags_help: コンマ区切り upload_button: アップロード - upload_gpx: アップロードするGPXファイル - visibility: 可視性 + upload_gpx: GPXファイルのアップロード: + visibility: 可視性: visibility_help: これはどういう意味? visibility_help_url: http://wiki.openstreetmap.org/wiki/Ja:Visibility_of_GPS_traces trace_header: @@ -1115,8 +1222,8 @@ ja: trace_optionals: tags: タグ(複数可) trace_paging_nav: - next: 次へ » - previous: "« 前へ" + next: 次へ » + previous: « 前へ showing_page: " %{page} ページ" view: delete_track: このトラックの削除 @@ -1166,6 +1273,8 @@ ja: new email address: 新しい電子メールアドレス new image: 画像を追加 no home location: あなたはまだ活動地域を登録していません。 + openid: + openid: OpenID: preferred editor: 優先エディタ: preferred languages: "言語設定:" profile description: "ユーザ情報の詳細:" @@ -1220,12 +1329,36 @@ ja: login_button: ログイン lost password link: パスワードを忘れましたか? new to osm: OpenStreetMapは初めてですか? + openid: "%{logo} OpenID:" + openid invalid: 申し訳ありません、OpenID は不正な形式と思われます。 + openid missing provider: 申し訳ありません、OpenID プロバイダに接続できませんでした。 + openid_logo_alt: OpenID でログイン + openid_providers: + aol: + alt: AOL の OpenID でログイン + title: AOL でログイン + google: + alt: Google の OpenID でログイン + title: Google アカウントでログイン + myopenid: + alt: myOpenID の OpenID でログイン + title: myOpenID でログイン + openid: + alt: OpenID の URLを入力してログイン + title: OpenID でログイン + wordpress: + alt: Wordpress の OpenID でログイン + title: WordPress でログイン + yahoo: + alt: Yahoo OpenID でログイン + title: Yahoo ID でログ​​イン password: "パスワード:" register now: 今すぐ登録 remember: パスワードを記憶する。 title: ログイン to make changes: OpenStreetMap データを変更するには、アカウントが必要です。 webmaster: ウェブマスター + with username: 既に OpenStreetMap のアカウントをお持ちですか? ユーザー名とパスワードを入力してログインしてください: logout: heading: OpenStreetMapからログアウトする logout_button: ログアウト @@ -1253,9 +1386,10 @@ ja: fill_form: 以下のフォームを埋めてください。登録すると、あなたのアカウントを有効化するためにあなたにメールをお送りします。 flash create success message: "%{email}に確認メッセージを送信しました。電子メールを確認してアカウントを有効にし次第、編集を開始できます。

    あなたの指定したアドレスに確認メールが届くまであなたはログインすることはできません。メールボックスでスパムフィルタを使っているときには webmaster@openstreetmap.org からの確認メールを受信できるようホワイトリストを設定してください。" heading: ユーザアカウントの作成 - license_agreement: アカウントを確認することで、あなたが openstreetmap.org にアップロードする全てのデータおよび作業内容、もしくは openstreetmap.org に接続するツールによる活動を全て非排他的な クリエイティブコモンズ 表示-継承 (Creative Commons by-sa) ライセンスで使用許諾したものと見なされます。 + license_agreement: アカウントを確認するときには contributor terms に同意する必要があります。。 no_auto_account_create: 残念ながら、自動的にアカウントを作ることが出来ません。 not displayed publicly: 公開されません。(詳細は プライバシーポリシーを御覧下さい) + openid: "%{logo} OpenID:" password: "パスワード:" terms accepted: 新しい投稿規約を承諾して頂き、ありがとうございます。 title: アカウント作成 @@ -1308,7 +1442,7 @@ ja: description: 詳細 diary: 日記 edits: 編集 - email address: "Eメールアドレス:" + email address: 電子メールアドレス: hide_user: このユーザーを隠す if set location: 活動地域を指定すると、この下に周辺の地図と、近くで活動するマッパーが表示されます。%{settings_link} から設定をしてください。 km away: 距離 %{count}km @@ -1321,7 +1455,7 @@ ja: my traces: 私のトレース nearby users: その他の近くのユーザ new diary entry: 新しい日記エントリ - no friends: あなたは誰も友達として登録していません。 + no friends: あなたは誰も友達として登録されていません。 no nearby users: あなたの活動地域周辺に他のマッパーはいないようです。 oauth settings: OAuth設定 remove as friend: 友達から削除 @@ -1402,7 +1536,7 @@ ja: title: "%{block_on} のブロックを取消し" show: back: すべてのブロックを表示 - confirm: 確かですか? + confirm: 本当によろしいですか? edit: 編集 heading: "%{block_on} %{block_by} によってブロックされました" needs_view: ブロックを解除する前に、ログインし直す必要があります。 diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 27d8b02f4..d9573676d 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -6,6 +6,8 @@ ka: activerecord: attributes: + diary_comment: + body: ტექსტი diary_entry: language: ენა latitude: განედი @@ -16,6 +18,7 @@ ka: friend: მეგობარი user: მომხმარებელი message: + body: ტექსტი recipient: მიმღები sender: გამგზავნი title: სათაური @@ -36,14 +39,19 @@ ka: languages: ენები pass_crypt: პაროლი models: + acl: ხელმისაწვდომობის შეზღუდვის სია country: ქვეყანა + diary_comment: დღიურის კომენტარი + diary_entry: დღიურის ჩანაწერი friend: მეგობარი language: ენა message: შეტყობინება node: კვანძი + notifier: გამაფრთხილებელი old_node: ძველი კვანძი old_way: ძველი გზა old_way_node: ძველი გზის კვანძი + session: სესია user: მომხმარებელი user_preference: მომხმარებლის კონფიგურაცია way: გზა @@ -67,6 +75,7 @@ ka: common_details: changeset_comment: "კომენტარი:" deleted_at: "წაიშალა:" + deleted_by: "წაიშალა:" edited_at: "დაარედაქტირა:" edited_by: "მომხმარებელი:" version: "ვერსია:" @@ -75,6 +84,9 @@ ka: entry_role: ურთიერთობა %{relation_name} (როგორც %{relation_role}) map: deleted: წაშლილია + edit: + area: ტერიტორიის რედაქტირება + way: გზის რედაქტირება larger: area: რეგიონის ნახვა დიდი ზომის რუკაზე node: კვანძის ნახვა დიდი ზომის რუკაზე @@ -214,11 +226,17 @@ ka: user: მომხმარებელი list: description: ბოლო ცვლილებები + heading: ცვლილებების პაკეტი + heading_bbox: ცვლილებების პაკეტი + heading_user: ცვლილებების პაკეტი + heading_user_bbox: ცვლილებების პაკეტი title: ცვლილებების პაკეტი diary_entry: diary_comment: confirm: დადასტურება + hide_link: ამ კომენტარის დამალვა diary_entry: + comment_link: კომენტარი confirm: დადასტურება edit_link: ჩანაწერის რედაქტირება hide_link: ამ ჩანაწერის დამალვა @@ -230,17 +248,35 @@ ka: longitude: "გრძედი:" save_button: შენახვა subject: "თემა:" + title: დღიურის ჩანაწერის რედაქტირება use_map_link: რუკაზე ჩვენება list: + in_language_title: დღიურის ჩანაწერები %{language} + new: დღიურში ახალი ჩანაწერის გაკეთება + newer_entries: უახლესი ჩანაწერები + no_entries: დღიურში არ არის ჩანაწერები + older_entries: ძველი ჩანაწერები title: მომხმარებლების დღიურები + user_title: "%{user}-ის დღიური" location: edit: რედაქტირება location: "მდებარეობა:" view: იხილეთ + new: + title: დღიურში ახალი ჩანაწერის გაკეთება + no_such_entry: + heading: "id: %{id}-დან ჩანაწერი არ არის" + title: დღიურში ასეთი ჩანაწერი არ არის + no_such_user: + heading: მომხმარებელი %{user} არ არსებობს + title: ასეთი მომხმარებელი არ არსებობს view: leave_a_comment: დატოვეთ კომენტარი login: შესვლა + login_to_leave_a_comment: "%{login_link}, რათა დატოვოთ კომენტარი" save_button: შენახვა + title: "%{user}-ის დღიური | %{title}" + user_title: "%{user}-ის დღიური" editor: default: უპირობოდ (ამჟამად %{name}) remote: @@ -290,6 +326,7 @@ ka: south_west: სამხრეთ-დასავლეთი west: დასავლეთი results: + more_results: მეტი შედეგი no_results: შედეგი ვერ მოიძებნა search: title: @@ -420,6 +457,7 @@ ka: shop: მაღაზია stadium: სტადიონი store: მაღაზია + terrace: ტერასა tower: კოშკი train_station: რკინიგზის სადგური university: უნივერსიტეტი @@ -443,15 +481,24 @@ ka: road: გზა secondary: მეორადი გზა secondary_link: მეორადი გზა + steps: საფეხურები + tertiary: მესამე კლასის გზა + track: ბილიკი trail: ბილიკი + unclassified: ადგილობრივი გზა + unsurfaced: უზედაპირო გზა historic: + archaeological_site: არქეოლოგიური გათხრები battlefield: ბრძოლის ველი boundary_stone: სასაზღვრო ქვა building: შენობა castle: ციხე-სიმაგრე church: ეკლესია house: სახლი + icon: ხატულა + manor: მამული memorial: მემორიალი + mine: მაღარო monument: მონუმენტი museum: მუზეუმი ruins: ნანგრევები @@ -463,6 +510,7 @@ ka: commercial: კომერციული ტერიტორია construction: მშენებლობა farm: ფერმა + farmland: სავარგული forest: ტყე grass: ბალახი greenfield: ახლადათვისებული ადგილი @@ -481,12 +529,14 @@ ka: residential: საცხოვრებელი ტერიტორია village_green: მწვანე სოფელი vineyard: ვენახი + wetland: ჭარბტენიანი ტერიტორია wood: ტყე leisure: fishing: სათევზაო ტერიტორია garden: ბაღი golf_course: გოლფის მოედანი ice_rink: ყინულის მოედანი + marina: ნავსაყუდელი miniature_golf: მინი გოლფი nature_reserve: ნაკრძალი park: პარკი @@ -504,6 +554,7 @@ ka: cape: კონცხი cave_entrance: გამოქვაბულში შესასვლელი channel: არხი + cliff: ხრამი coastline: სანაპირო ზოლი crater: კრატერი fell: ბორცვი @@ -514,38 +565,49 @@ ka: island: კუნძული land: ხმელეთი marsh: ჭაობი + moor: ტორფნარი + mud: ტალახი peak: პიკი + point: კონცხი reef: რიფი ridge: ქედი river: მდინარე rock: კლდე scree: კლდეზვავი scrub: ბუჩქნარი + shoal: თავთხელი spring: წყარო strait: სრუტე tree: ხე valley: ველი volcano: ვულკანი water: წყალი + wetland: ჭარბტენიანი ტერიტორია + wetlands: ჭარბტენიანი ტერიტორიები wood: ტყე place: airport: აეროპორტი city: ქალაქი country: ქვეყანა farm: ფერმა + hamlet: დასახლება house: სახლი houses: სახლები island: კუნძული islet: პატარა კუნძული + moor: ტორფნარი municipality: მუნიციპალიტეტი postcode: საფოსტო ინდექსი region: რეგიონი sea: ზღვა state: შტატი/ოლქი + subdivision: ქვედანაყოფი suburb: გარეუბანი town: დაბა + unincorporated_area: თავისუფალი ზონა village: სოფელი railway: + abandoned: მიტოვებული რკინიგზა construction: რკინიგზის რემონტი disused: მიტოვებული რკინიგზა disused_station: მიტოვებული რკინიგზის სადგური @@ -583,21 +645,34 @@ ka: gallery: გალერეა gift: საჩუქრების მაღაზია jewelry: საიუველირო მაღაზია + kiosk: ჯიხური laundry: სამრეცხაო market: ბაზარი mobile_phone: მობილური ტელეფონების მაღაზია + music: მუსიკალური მაღაზია + optician: ოპტიკა pet: ზოომაღაზია + photo: ფოტომაღაზია supermarket: სუპერმარკეტი toys: სათამაშოების მაღაზია + travel_agency: ტურისტული სააგენტო + video: ვიდეო მაღაზია tourism: + attraction: ატრაქციონი + camp_site: ბანაკის ადგილი + guest_house: სასტუმრო სახლი hostel: ჰოსტელი hotel: სასტუმრო + information: ინფორმაცია motel: მოტელი + museum: მუზეუმი + picnic_site: საპიკნიკე ადგილი theme_park: თემატური პარკი valley: ველი zoo: ზოოპარკი waterway: canal: არხი + dam: კაშხალი river: მდინარე stream: ნაკადული waterfall: ჩანჩქერი @@ -605,7 +680,6 @@ ka: map: base: cycle_map: ველოსიპედისტების რუკა - noname: უსახელო site: edit_disabled_tooltip: რედაქტირებისათვის გაზარდეთ რუკის მასშტაბი edit_tooltip: რუკის რედაქტირება @@ -623,6 +697,9 @@ ka: help_centre: დახმარების ცენტრი history: ისტორია home: სახლი + home_tooltip: საწყის მდებარეობაზე დაბრუნება + inbox: შემომავალი (%{count}) + intro_3_partners: ვიკი log_in: შესვლა logo: alt_text: OpenStreetMap-ის ლოგო @@ -632,6 +709,8 @@ ka: text: პროექტის დახმარება sign_up: რეგისტრაცია view: იხილეთ + view_tooltip: რუკის ხილვა + welcome_user: კეთილი იყოს თქვენი მობრძანება, %{user_link} welcome_user_link_tooltip: თქვენი მომხმარებლის გვერდი wiki: ვიკი license_page: @@ -685,6 +764,8 @@ ka: greeting: გამარჯობა, message_notification: hi: გამარჯობა %{to_user}, + signup_confirm: + subject: "[OpenStreetMap] დაადასტურეთ ელ.ფოსტის მისამართი" signup_confirm_html: greeting: გამარჯობა! signup_confirm_plain: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 9056db871..150439511 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1,6 +1,7 @@ # Messages for Korean (한국어) # Exported from translatewiki.net # Export driver: syck-pecl +# Author: Freebiekr # Author: Wrightbus ko: activerecord: @@ -187,6 +188,8 @@ ko: saved_at: 저장 시간 user: 사용자 diary_entry: + diary_comment: + hide_link: 이 댓글 숨기기 diary_entry: comment_count: one: 댓글 한 개 diff --git a/config/locales/lb.yml b/config/locales/lb.yml index e2b1e6106..7b0e90f97 100644 --- a/config/locales/lb.yml +++ b/config/locales/lb.yml @@ -13,6 +13,7 @@ lb: friend: Frënd user: Benotzer message: + sender: Sender title: Titel trace: description: Beschreiwung @@ -177,8 +178,8 @@ lb: no_comment: (keen) no_edits: (keng Ännerungen) changeset_paging_nav: - next: Nächst » - previous: "« Vireg" + next: Nächst » + previous: « Vireg showing_page: D'Säit %{page} gëtt gewisen changesets: area: Beräich @@ -249,6 +250,7 @@ lb: prefix: amenity: airport: Fluchhafen + auditorium: Auditoire bank: Bank bureau_de_change: Wiesselbüro bus_station: Busarrêt @@ -285,6 +287,7 @@ lb: sauna: Sauna school: Schoul shop: Geschäft + studio: Studio supermarket: Supermarché taxi: Taxi telephone: Telefonscabine @@ -318,6 +321,7 @@ lb: primary_link: Haaptstrooss road: Strooss secondary_link: Niewestrooss + steps: Trap historic: archaeological_site: Archeologesche Site battlefield: Schluechtfeld @@ -395,7 +399,7 @@ lb: dry_cleaning: Botzerei florist: Fleurist furniture: Miwwelgeschäft - gallery: Gallerie + gallery: Galerie hairdresser: Coiffeur insurance: Versécherungsbüro jewelry: Bijouterie @@ -426,7 +430,7 @@ lb: site: edit_tooltip: Kaart änneren layouts: - copyright: Copyright & Lizenz + copyright: Copyright & Lizenz documentation: Dokumentatioun documentation_title: Dokumentatioun vum Projet donate_link_text: Don @@ -527,6 +531,8 @@ lb: key: table: entry: + apron: + 1: Terminal cemetery: Kierfecht cycleway: Vëlospiste farm: Bauerenhaff @@ -545,6 +551,8 @@ lb: summit: - Spëtzt tourist: Touristenattraktioun + tram: + 1: Tram wood: Bësch search: search: Sichen @@ -595,8 +603,8 @@ lb: visibility: "Visibilitéit:" visibility_help: wat heescht dat? trace_paging_nav: - next: Nächst » - previous: "« Vireg" + next: Nächst » + previous: « Vireg showing_page: D'Säit %{page} gëtt gewisen view: description: "Beschreiwung:" @@ -625,6 +633,8 @@ lb: my settings: Meng Astellungen new email address: "Nei E-Mailadress:" new image: E Bild derbäisetzen + openid: + link text: wat ass dat? preferred languages: "Léifste Sproochen:" profile description: "Beschreiwung vum Profil:" public editing: @@ -717,6 +727,7 @@ lb: activate_user: dëse Benotzer aktivéieren add as friend: als Frënd derbäisetzen ago: (viru(n) %{time_in_words_ago}) + blocks by me: vu mir gespaart confirm: Confirméieren confirm_user: dëse Benotzer confirméieren create_block: dëse Benotzer spären diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 9d8a65e16..1b9351276 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1,6 +1,7 @@ # Messages for Lithuanian (Lietuvių) # Exported from translatewiki.net # Export driver: syck-pecl +# Author: Cyklopas # Author: Garas # Author: Matasg # Author: Pauliuz @@ -118,6 +119,11 @@ lt: entry_role: RyÅ¡ys %{relation_name} (kaip %{relation_role}) map: deleted: Panaikintas + edit: + area: Keisti sritį + node: Keisti taÅ¡ką + relation: Keisti ryšį + way: Keisti kelią larger: area: PeržiÅ«rėti sritį ant didesnio žemėlapio node: PeržiÅ«rėti taÅ¡ką ant didesnio žemėlapio @@ -264,8 +270,8 @@ lt: still_editing: (vis dar keičia) view_changeset_details: ŽiÅ«rėti pakeitimo detales changeset_paging_nav: - next: Kitas » - previous: "« Ankstesnis" + next: Kitas » + previous: « Ankstesnis showing_page: Rodomas puslapis %{page} changesets: area: Plotas @@ -793,9 +799,11 @@ lt: kiosk: Kioskas laundry: Skalbykla mall: Prekybos centras + market: Turgus mobile_phone: Mobiliųjų telefonų parduotuvė motorcycle: Motociklų parduotuvė music: Muzikos prekių parduotuvė + optician: Optikas organic: EkologiÅ¡kų maisto produktų parduotuvė pet: Naminių gyvÅ«nėlių parduotuvė photo: Foto prekių parduotuvė @@ -806,6 +814,7 @@ lt: supermarket: Prekybos centras toys: Žaislų parduotuvė travel_agency: Kelionių agentÅ«ra + video: Video parduotuvė tourism: attraction: Lankytina vieta camp_site: Stovyklavietė @@ -827,6 +836,7 @@ lt: ditch: Griovys dock: Dokas drain: Drenažo griovys + mooring: Å vartavimas river: Upė riverbank: Upės krantas stream: Upeliukas @@ -835,7 +845,6 @@ lt: map: base: cycle_map: Dviračių žemėlapis - noname: Gatvės be pavadinimų site: edit_disabled_tooltip: Norėdami redaguoti, priartinkite edit_tooltip: Redaguoti žemėlapį @@ -1111,6 +1120,9 @@ lt: site: edit: anon_edits_link_text: Sužinokite, kodėl taip yra. + no_iframe_support: JÅ«sų narÅ¡yklė nepalaiko HTML iframe'ų, o Å¡iai savybei jie bÅ«tini. + potlatch2_not_configured: Potlatch 2 nesukonfigÅ«ruotas - daugiau informacijos rasite http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 + potlatch2_unsaved_changes: Yra neįraÅ¡ytų pakeitimų. (Norėdami įraÅ¡yti Potlatch 2, turėtumėte spustelėti įraÅ¡yti.) user_page_link: naudotojo puslapis index: js_1: JÅ«s arba naudojate narÅ¡yklę, nepalaikančią JavaScript, arba iÅ¡jungėte JavaScript palaikymą. @@ -1229,10 +1241,12 @@ lt: message: GPX pėdsakų įkėlimo sistema Å¡iuo metu neveikia. trace: ago: "%{time_in_words_ago} atgal" + by: (emptypage) count_points: "%{count} taÅ¡kai(-ų)" edit: keisti edit_map: Keisti žemėlapį identifiable: IDENTIFIKUOJAMAS + in: į map: žemėlapis more: daugiau pending: LAUKIAMA @@ -1244,11 +1258,11 @@ lt: trace_form: description: ApraÅ¡ymas help: Pagalba - tags: Žymos + tags: "Žymos:" tags_help: atskirta kableliais upload_button: Ä®kelti - upload_gpx: Ä®kelti GPX failą - visibility: Matomumas + upload_gpx: "Ä®kelti GPX failą:" + visibility: "Matomumas:" visibility_help: ką tai reiÅ¡kia? trace_header: see_all_traces: Rodyti visus pėdsakus @@ -1257,8 +1271,8 @@ lt: trace_optionals: tags: Žymos trace_paging_nav: - next: Kitas » - previous: "« Ankstesnis" + next: Kitas » + previous: « Ankstesnis showing_page: Rodomas puslapis %{page} view: delete_track: Naikinti šį pėdsaką @@ -1359,6 +1373,17 @@ lt: lost password link: PamirÅ¡ote slaptažodį? new to osm: Nesusipažinę su OpenStreetMap? openid: "%{logo} OpenID:" + openid_logo_alt: Prisijunkite su OpenID + openid_providers: + google: + alt: Prisijungti su Google OpenID + title: Prisijungti su Google + openid: + alt: Prisijungti su savo OpenID URL + title: Prisijungti su OpenID + yahoo: + alt: Prisijungti su Yahoo OpenID + title: Prisijungti su Yahoo password: "Slaptažodis:" register now: Užsiregistruoti remember: "Prisiminti prisijungimą:" @@ -1394,6 +1419,7 @@ lt: license_agreement: Kai patvirtinsite savo paskyrą, turėsite sutikti su talkininkų sąlygomis. no_auto_account_create: Deja Å¡iuo metu negalime jums automatiÅ¡kai sukurti paskyros. not displayed publicly: VieÅ¡ai nerodoma (skaitykite privatumo politiką) + openid: "%{logo} OpenID:" password: "Slaptažodis:" title: Sukurti paskyrą no_such_user: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 165e5d84c..25591bfd6 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -235,8 +235,8 @@ lv: still_editing: (vēl rediģē) view_changeset_details: SkatÄ«t sÄ«kāku informāciju par izmaiņu kopu changeset_paging_nav: - next: Nākamā » - previous: "« Iepriekšējā" + next: Nākamā » + previous: « Iepriekšējā showing_page: Rāda lapu %{page} changesets: area: Apgabals @@ -284,6 +284,8 @@ lv: title: Rediģēt dienasgrāmatas ierakstu use_map_link: izmantot karti feed: + all: + title: OpenStreetMap dienasgrāmatu ieraksti language: title: OpenStreetMap dienasgrāmatas ieraksti valodā %{language_name} user: @@ -332,16 +334,18 @@ lv: export: start: add_marker: Pievienot atzÄ«mi kartei - area_to_export: Kvdrants, kuru eksportēt + area_to_export: Kvadrants, kuru eksportēt + embeddable_html: Ievietojams HTML kods export_button: Eksportēt format: Formāts + format_to_export: Eksportēšanas formāts image_size: Attēla izmērs latitude: "Platums:" licence: Licence longitude: "Garums:" manually_select: Manuāli izvēlēties citu teritoriju mapnik_image: Mapnik attēls - max: max + max: lÄ«dz osm_xml_data: OpenStreetMap XML dati osmarender_image: Osmarender attēls output: Izvade @@ -377,6 +381,15 @@ lv: results: more_results: Vairāk rezultātu no_results: Nav atrasts neviens rezultāts + search: + title: + ca_postcode: Rezultāti no Geocoder.CA + geonames: Rezultāti no GeoNames + latlon: Rezultāti no Iekšējās meklēšanas + osm_namefinder: Rezultāti no OpenStreetMap Namefinder + osm_nominatim: Rezultāti no OpenStreetMap Nominatim + uk_postcode: Rezultāti no NPEMap / FreeThe Postcode + us_postcode: Rezultāti no Geocoder.us search_osm_nominatim: prefix: amenity: @@ -581,6 +594,7 @@ lv: wetland: Mitrājs wood: Mežs leisure: + beach_resort: Pludmales kÅ«rorts fishing: Zvejas apgabals garden: Dārzs golf_course: Golfa laukums @@ -675,9 +689,11 @@ lv: tram: Tramvajs tram_stop: Tramvaja pietura shop: + apparel: Apģērbu veikals art: Mākslas salons bakery: MaiznÄ«ca beauty: Kosmētiskais salons + beverages: Dzērienu veikals bicycle: Velosipēdu veikals books: Grāmatu veikals butcher: Miesnieks @@ -688,12 +704,16 @@ lv: carpet: Paklāju veikals charity: LabdarÄ«bas veikals clothes: Apģērbu veikals + computer: Datorveikals confectionery: Konditorejas veikals + copyshop: Kopētava cosmetics: Kosmētikas veikals department_store: Universālveikals drugstore: Aptieka dry_cleaning: Ķīmiskā tÄ«rÄ«Å¡ana electronics: Elektronikas veikals + estate_agent: Nekustamā Ä«paÅ¡uma aÄ£ents + fashion: Modes veikals fish: Zivju veikals florist: Florists food: Pārtikas veikals @@ -767,10 +787,11 @@ lv: layouts: community_blogs: Kopienas emuāri community_blogs_title: OpenStreetMap kopienas locekļu emuāri - copyright: AutortiesÄ«bas & licence + copyright: AutortiesÄ«bas un licence documentation: Dokumentācija documentation_title: Projekta dokumentācija - donate_link_text: ziedoÅ¡ana + donate: Atbalstiet OpenStreetMap, %{link} aparatÅ«ras uzlaboÅ¡anas fondam. + donate_link_text: ziedojot edit: Rediģēt edit_with: Rediģēt ar %{editor} export: Eksportēt @@ -788,7 +809,8 @@ lv: inbox: iesÅ«tne (%{count}) intro_1: OpenStreetMap ir atvērta, rediģējama visas pasaules karte. To veido tādi paÅ¡i cilvēki kā jÅ«s. intro_2: OpenStreetMap ļauj skatÄ«t, rediģēt un lietot Ä£eogrāfiskus datus sadarbÄ«bā ar citiem lietotājiem, no jebkuras vietas pasaulē. - intro_3: OpenStreetMap serveru pakalpojumus laipni nodroÅ¡ina %{ucl} un %{bytemark}. Citi projekta atbalstÄ«tāji atrodami lapā %{partners}. + intro_3: OpenStreetMap serveru pakalpojumus laipni nodroÅ¡ina %{ucl} , %{ic} un %{bytemark}. Citi projekta atbalstÄ«tāji atrodami lapā %{partners}. + intro_3_ic: Londonas Impērijas koledža intro_3_partners: viki license: title: OpenStreetMap dati ir licencēti ar Creative Commons Attribution-Share Alike 2.0 Generic licenci @@ -831,8 +853,9 @@ lv: date: Datums from: 'No' my_inbox: Mana iesÅ«tne + no_messages_yet: Jums vēl nav ziņojumu. Kāpēc gan nesazināties ar kādu no %{people_mapping_nearby_link}? outbox: izsÅ«tne - people_mapping_nearby: cilvēki kartē tuvā apkārtnē + people_mapping_nearby: cilvēkiem, kuri zÄ«mē karti tavā apkaimē subject: Temats title: iesÅ«tne you_have: Jums ir %{new_count} jaunas ziņas un %{old_count} lasÄ«tas ziņas @@ -972,14 +995,18 @@ lv: allow_write_gpx: augÅ¡upielādēt GPS trases. name: Nosaukums required: Obligāts + support_url: Atbalsta URL index: application: Programmas nosaukums issued_at: Izdots my_apps: Manas klienta programmas + my_tokens: Manas autorizētās aplikācijas + register_new: ReÄ£istrēt savu aplikāciju revoke: Atsaukt! title: Manas OAuth detaļas new: submit: ReÄ£istrēties + title: Jaunas aplikācijas reÄ£istrēšana not_found: sorry: Atvainojiet, Å¡is %{type} nav atrasts. show: @@ -1142,8 +1169,8 @@ lv: trace_optionals: tags: Birkas trace_paging_nav: - next: Nākamā » - previous: "« Iepriekšējā" + next: Nākamā » + previous: « Iepriekšējā showing_page: Rāda lapu %{page} view: delete_track: Dzēst Å¡o trasi @@ -1223,6 +1250,7 @@ lv: heading: Ieiet login_button: Ieiet lost password link: Aizmirsi paroli? + openid: "%{logo} OpenID:" password: "Parole:" register now: ReÄ£istrēties remember: "Atcerēties mani:" @@ -1252,6 +1280,7 @@ lv: email address: "E-pasta adrese:" heading: Izveidot lietotāja kontu no_auto_account_create: Diemžēl mēs Å¡obrÄ«d nevaram izveidot kontu automātiski. + openid: "%{logo} OpenID:" password: "Parole:" title: Izveidot kontu no_such_user: @@ -1311,6 +1340,7 @@ lv: my diary: mana dienasgrāmata my edits: mani labojumi my settings: mani iestatÄ«jumi + my traces: manas trases nearby users: Citi tuvumā esoÅ¡i lietotāji new diary entry: jauns dienasgrāmatas ieraksts no nearby users: Nav citu lietotāju kas tuvumā kartētu. diff --git a/config/locales/mk.yml b/config/locales/mk.yml index ed5019464..7e03417b6 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -269,8 +269,8 @@ mk: still_editing: (сè уште уредува) view_changeset_details: Преглед на детали од измените changeset_paging_nav: - next: Следно » - previous: "« Претходно" + next: Следно » + previous: « Претходно showing_page: Прикажана е страница %{page} changesets: area: Површина @@ -409,7 +409,7 @@ mk: description: title: geonames: Местоположба од GeoNames - osm_namefinder: "%{types} од OpenStreetMap Именикот" + osm_namefinder: "%{types} од Именикот на OpenStreetMap" osm_nominatim: Местоположба од OpenStreetMap Nominatim types: cities: Градови @@ -427,9 +427,9 @@ mk: south_west: југозападно west: западно distance: - one: околу 1km - other: околу %{count}km - zero: помалку од 1km + one: околу 1 км + other: околу %{count} км + zero: помалку од 1 км results: more_results: Повеќе резултати no_results: Нема пронајдено резултати @@ -886,7 +886,8 @@ mk: map: base: cycle_map: Велосипедска карта - noname: БезИме + mapquest: MapQuest Open + transport_map: Сообраќајна карта site: edit_disabled_tooltip: Приближете за да ја уредите картата edit_tooltip: Уредување на картата @@ -901,7 +902,7 @@ mk: documentation: Документација documentation_title: Документација за проектот donate: Поддржете ја OpenStreetMap со %{link} за Фондот за обнова на машинската опрема. - donate_link_text: донирање + donate_link_text: доброволен прилог edit: Уреди edit_with: Уреди со %{editor} export: Извези @@ -923,10 +924,10 @@ mk: zero: Немате непрочитани пораки во сандачето intro_1: OpenStreetMap е слободна уредлива карта на целиот свет. Ја прават луѓе како вас. intro_2: OpenStreetMap ви овозможува да разгледувате, уредувате и користите гоеографски податоци на колаборативен начин од било кое место на Земјината топка. - intro_3: Вдомувањето на OpenStreetMap е овозможено од %{ucl}, %{ic} и %{bytemark}. Другите поддржувачи на проектот се наведени на %{partners}. + intro_3: Вдомувањето на OpenStreetMap го овозможија %{ucl}, %{ic} и %{bytemark}. Другите поддржувачи на проектот се наведени на %{partners}. intro_3_bytemark: bytemark - intro_3_ic: Империјален колеџ Лондон - intro_3_partners: вики + intro_3_ic: Империјалниот колеџ - Лондон + intro_3_partners: викито intro_3_partners_url: http://wiki.openstreetmap.org/wiki/Partners?uselang=mk intro_3_ucl: UCL VR Centre license: @@ -938,8 +939,8 @@ mk: logout: одјава logout_tooltip: Одјава make_a_donation: - text: Донирајте - title: Поддржете ја OpenStreetMap со парична донација + text: Дарувајте + title: Поддржете ја OpenStreetMap со паричен прилог osm_offline: Базата на податоци на OpenStreetMap моментално е исклучена додека работиме на неопходни одржувања. osm_read_only: Базата на податоци на OpenStreetMap моментално може само да се чита, додека ги извршиме неопходните одржувања. sign_up: регистрација @@ -960,7 +961,7 @@ mk: english_link: англискиот оригинал text: Во случај на конфликт помеѓу оваа преведена страница и %{english_original_link}, предност има англиската страница title: За овој превод - legal_babble: "

    Авторски права и лиценца

    \n

    \n OpenStreetMap има отворени податоци, и е лиценциран со Криејтив\n комонс НаведиИзвор-СподелиПодИстиУслови 2.0 (CC-BY-SA).\n

    \n

    \n Слободно можете да ги копирате, дистрибуирате, јавно прикажувате и адаптирате нашите карти\n и податоци, под услов да го наведете OpenStreetMap и неговите\n учесници. Ако ги менувате или темелите дела врз нашите карти и податоци\n резултатите можете да ги дистрибуирате само под истата лиценца.\n Во полниот законски\n правилник се објаснети вашите права и должности.\n

    \n\n

    Како да го наведувате OpenStreetMap

    \n

    \n Доколку користите слики од карти на OpenStreetMap, бараме\n наводот да содржи барем “© Учесници на\n OpenStreetMap, CC-BY-SA”. Ако користите само податоци од картите,\n бараме наводот да гласи “Картографски податоци © Учесници на OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Кадешто е можно, OpenStreetMap треба да има хиперврска http://www.openstreetmap.org/\n и CC-BY-SA до http://creativecommons.org/licenses/by-sa/2.0/deed.mk. Доколку\n користите медиум кадешто не може да се ставаат врски (како на пр.\n печатено издание), ви препорачуваме да ги наведете корисниците на\n www.openstreetmap.org (на пр. со проширување на\n ‘OpenStreetMap’ со полнава адреса) и до\n www.creativecommons.org.\n

    \n\n

    Како да дознаете повеќе

    \n

    \n Прочитајте повеќе за користењето на нашите податоци на Правните\n ЧПП.\n

    \n

    \n Учесниците во OSM се потсетуваат никогаш да не ставаат податоци од\n извори заштитени со авторски права (на пр. Google Карти или печатени карти) без\n јасна дозвола од имателите на авторските права.\n

    \n

    \n Иако OpenStreetMap има отворени податоци, ние сепак не можеме бесплатно да \n го нудиме картографскиот програм на развивачи кои се трети лица.\n\n Погледајте ги нашите Правила на користење на програмот,\n Правила на користење на полињата\n и Правила на користење на Nominatim.\n

    \n\n

    Нашите учесници

    \n

    \n Нашата лиценца CC-BY-SA бара да “го наведете изворниот\n автор разумно за медиумот или средството што го\n користите”. Поединечните картографи на OSM не бараат да\n бидат наведувани посебно, туку само како “Учесници на\n OpenStreetMap”, но онаму кадешто OpenStreetMap содржи податоци\n од некоја државна картографска установа или друг важен извор,\n веројатно би било разумно да ги наведете нив директно,\n наведувајќи ги како што тие обично се наведуваат, или ставајќи врска до нивната страница.\n

    \n\n\n\n
      \n
    • Австралија: Содржи податоци за населби засновани на\n податоци на Австралиската служба за статистика.
    • \n
    • Австрија: Содржи податоци од\n Град Виена под лиценцата\n CC-BY.
    • \n
    • Канада: Содржи податоци од\n GeoBase®, GeoGratis (© Министерство за природни ресурси\n Канада), CanVec (© Министерство за природни ресурси\n Канада) и StatCan (Географско одделение,\n Статистика Канада).
    • \n
    • Франција: Содржи податоци преземени од\n Главната даночна управа.
    • \n
    • Нов Зеланд: Содржи податоци преземени од\n Land Information New Zealand. Крунски авторски права задржани.
    • \n
    • Полска: Содржи податоци од UMP-pcPL карти. Авторски права на\n учесниците на UMP-pcPL.
    • \n
    • Обединето Кралство: Содржи геодетски податоци\n © Крунски авторски права и права врз базата на податоци\n 2010.
    • \n
    \n\n

    \n Поставањето на податоци во OpenStreetMap не подразбира дека изворниот \n добавувач на податоци го поддржува и застапува OpenStreetMap, дека дава било каква гаранција, или пак\n дека прифаќа било каква одговорност.\n

    " + legal_babble: "

    Авторски права и лиценца

    \n

    \n OpenStreetMap има отворени податоци, и е лиценциран со Криејтив\n комонс НаведиИзвор-СподелиПодИстиУслови 2.0 (CC-BY-SA).\n

    \n

    \n Слободно можете да ги копирате, распространувате, јавно прикажувате и адаптирате нашите карти\n и податоци, под услов да го наведете OpenStreetMap и неговите\n учесници. Ако ги менувате или темелите дела врз нашите карти и податоци\n резултатите можете да ги распространувате само под истата лиценца.\n Во полниот законски\n правилник се објаснети вашите права и должности.\n

    \n\n

    Како да го наведувате OpenStreetMap

    \n

    \n Доколку користите слики од карти на OpenStreetMap, бараме\n наводот да содржи барем “© Учесници на\n OpenStreetMap, CC-BY-SA”. Ако користите само податоци од картите,\n бараме наводот да гласи “Картографски податоци © Учесници на OpenStreetMap,\n CC-BY-SA”.\n

    \n

    \n Кадешто е можно, OpenStreetMap треба да има хиперврска http://www.openstreetmap.org/\n и CC-BY-SA до http://creativecommons.org/licenses/by-sa/2.0/deed.mk. Доколку\n користите медиум кадешто не може да се ставаат врски (како на пр.\n печатено издание), ви препорачуваме да ги наведете корисниците на\n www.openstreetmap.org (на пр. со проширување на\n ‘OpenStreetMap’ со полнава адреса) и до\n www.creativecommons.org.\n

    \n\n

    Како да дознаете повеќе

    \n

    \n Прочитајте повеќе за користењето на нашите податоци на Правните\n ЧПП.\n

    \n

    \n Учесниците во OSM се потсетуваат никогаш да не ставаат податоци од\n извори заштитени со авторски права (на пр. Google Карти или печатени карти) без\n јасна дозвола од имателите на авторските права.\n

    \n

    \n Иако OpenStreetMap има отворени податоци, ние сепак не можеме бесплатно да \n го нудиме картографскиот програм на развивачи кои се трети лица.\n\n Погледајте ги нашите Правила на користење на програмот,\n Правила на користење на полињата\n и Правила на користење на Nominatim.\n

    \n\n

    Нашите учесници

    \n

    \n Нашата лиценца CC-BY-SA бара да “го наведете изворниот\n автор разумно за медиумот или средството што го\n користите”. Поединечните картографи на OSM не бараат да\n бидат наведувани посебно, туку само како “Учесници на\n OpenStreetMap”, но онаму кадешто OpenStreetMap содржи податоци\n од некоја државна картографска установа или друг важен извор,\n веројатно би било разумно да ги наведете нив директно,\n наведувајќи ги како што тие обично се наведуваат, или ставајќи врска до нивната страница.\n

    \n\n\n\n
      \n
    • Австралија: Содржи податоци за населби засновани на\n податоци на Австралиската служба за статистика.
    • \n
    • Австрија: Содржи податоци од\n Град Виена под лиценцата\n CC-BY.
    • \n
    • Канада: Содржи податоци од\n GeoBase®, GeoGratis (© Министерство за природни ресурси\n Канада), CanVec (© Министерство за природни ресурси\n Канада) и StatCan (Географско одделение,\n Статистика Канада).
    • \n
    • Франција: Содржи податоци преземени од\n Главната даночна управа.
    • \n
    • Нов Зеланд: Содржи податоци преземени од\n Land Information New Zealand. Крунски авторски права задржани.
    • \n
    • Полска: Содржи податоци од UMP-pcPL карти. Авторски права на\n учесниците на UMP-pcPL.
    • \n
    • Обединето Кралство: Содржи геодетски податоци\n © Крунски авторски права и права врз базата на податоци\n 2010.
    • \n
    \n\n

    \n Поставањето на податоци во OpenStreetMap не подразбира дека изворниот \n добавувач на податоци го поддржува и застапува OpenStreetMap, дека дава било каква гаранција, или пак\n дека прифаќа било каква одговорност.\n

    " native: mapping_link: почнете со изработка на карти native_link: македонската верзија @@ -1366,8 +1367,8 @@ mk: trace_optionals: tags: Ознаки trace_paging_nav: - next: Следна » - previous: "« Претходна" + next: Следна » + previous: « Претходна showing_page: Прикажувам страница %{page} view: delete_track: Избриши ја трагава @@ -1422,7 +1423,7 @@ mk: link: http://wiki.openstreetmap.org/wiki/MK:OpenID?uselang=mk link text: што е ова? openid: OpenID - preferred editor: "Претпочитан урендик:" + preferred editor: "Претпочитан уредник:" preferred languages: "Претпочитани јазици:" profile description: "Опис за профилот:" public editing: @@ -1615,9 +1616,9 @@ mk: email address: Е-пошта hide_user: скриј го корисников if set location: Ако ја наместите вашата местоположба, под ова ќе ви се појави убава карта и други работи. Матичната местоположба можете да си ја наместите на страницата %{settings_link}. - km away: "%{count}km од вас" + km away: "%{count} км од вас" latest edit: "Последно уредување %{ago}:" - m away: "%{count}m од вас" + m away: "%{count} м од вас" mapper since: "Картограф од:" moderator_history: погледај добиени блокови my diary: мојот дневник diff --git a/config/locales/ms.yml b/config/locales/ms.yml new file mode 100644 index 000000000..860ca3a54 --- /dev/null +++ b/config/locales/ms.yml @@ -0,0 +1,1732 @@ +# Messages for Malay (Bahasa Melayu) +# Exported from translatewiki.net +# Export driver: syck-pecl +# Author: Anakmalaysia +ms: + activerecord: + attributes: + diary_comment: + body: Isi + diary_entry: + language: Bahasa + latitude: Garis Lintang + longitude: Garis Bujur + title: Tajuk + user: Pengguna + friend: + friend: Rakan + user: Pengguna + message: + body: Isi + recipient: Penerima + sender: Pengirim + title: Tajuk + trace: + description: Keterangan + latitude: Garis Lintang + longitude: Garis Bujur + name: Nama + public: Umum + size: Saiz + user: Pengguna + visible: Kelihatan + user: + active: Aktif + description: Keterangan + display_name: Nama Paparan + email: E-mel + languages: Bahasa + pass_crypt: Kata laluan + models: + acl: Senarai Kawalan Capaian + changeset: Set Ubah + changeset_tag: Tag Set Ubah + country: Negara + diary_comment: Ulasan Diari + diary_entry: Catatan Diari + friend: Rakan + language: Bahasa + message: Pesanan + node: Nod + node_tag: Tag Nod + notifier: Pemberitahu + old_node: Nod Lama + old_node_tag: Tag Nod Lama + old_relation: Hubungan Lama + old_relation_member: Anggota Hubungan Lama + old_relation_tag: Tag Hubungan Lama + old_way: Arah Lama + old_way_node: Nod Arah Lama + old_way_tag: Tag Arah Lama + relation: Hubungan + relation_member: Anggota Hubungan + relation_tag: Tag Hubungan + session: Sesi + trace: Jejak + tracepoint: Titik Jejak + tracetag: Tag Jejak + user: Pengguna + user_preference: Keutamaan Pengguna + user_token: Token Pengguna + way: Arah + way_node: Nod Arah + way_tag: Tag Arah + application: + require_cookies: + cookies_needed: Nampaknya cookies anda belum dihidupkan - sila hidupkan cookies dalam pelayar anda, kemudian sambung. + setup_user_auth: + blocked: Akses anda kepada API telah disekat. Sila log masuk ke dalam antaramuka web untuk mengetahui lebih lanjut. + need_to_see_terms: Akses anda kepada API digantung buat sementara waktu. Sila log masuk ke dalam antaramuka web untuk melihat Terma-Terma Penyumbang. Anda tidak semestinya harus bersetuju, tetapi mesti membacanya. + browse: + changeset: + changeset: "Set Ubah: %{id}" + changesetxml: XML Set Ubah + download: Muat turun %{changeset_xml_link} atau %{osmchange_xml_link} + feed: + title: Set Ubah %{id} + title_comment: Set Ubah %{id} - %{comment} + osmchangexml: XML osmChange + title: Set Ubah + changeset_details: + belongs_to: "Milik:" + bounding_box: "Petak pembatasan:" + box: petak + closed_at: "Ditutup pada:" + created_at: "Dibuat pada:" + has_nodes: "Mempunyai %{count} nodus yang berikut:" + has_relations: "Mempunyai %{count} hubungan yang berikut:" + has_ways: "Mempunyai %{count} arah yang berikut:" + no_bounding_box: Tiada petak pembatasan telah ditetapkan untuk set ubah ini. + show_area_box: Tunjukkan Petak Kawasan + common_details: + changeset_comment: Komen + deleted_at: "Dihapuskan pada:" + deleted_by: "Dihapuskan oleh:" + edited_at: "Disunting pada:" + edited_by: "Disunting oleh:" + in_changeset: "Dalam set ubah:" + version: "Versi:" + containing_relation: + entry: Hubungan %{relation_name} + entry_role: Hubungan %{relation_name} (sebagai %{relation_role}) + map: + deleted: Dihapuskan + edit: + area: Sunting kawasan + node: Sunting nod + relation: Sunting hubungan + way: Sunting arah + larger: + area: Lihat kawasan pada peta yang lebih besar + node: Lihat nod pada peta yang lebih besar + relation: Lihat hubungan pada peta yang lebih besar + way: Lihat arah pada peta yang lebih besar + loading: Memuatkan... + navigation: + all: + next_changeset_tooltip: Set ubah berikutnya + next_node_tooltip: Nod berikutnya + next_relation_tooltip: Hubungan berikutnya + next_way_tooltip: Arah berikutnya + prev_changeset_tooltip: Set ubah sebelumnya + prev_node_tooltip: Nod sebelumnya + prev_relation_tooltip: Hubungan sebelumnya + prev_way_tooltip: Arah sebelumnya + user: + name_changeset_tooltip: Lihat suntingan oleh %{user} + next_changeset_tooltip: Suntingan berikutnya oleh %{user} + prev_changeset_tooltip: Suntingan sebelumnya oleh %{user} + node: + download: "%{download_xml_link}, %{view_history_link} atau %{edit_link}" + download_xml: Muat Turun XML + edit: sunting + node: Nod + node_title: "Nod: %{node_name}" + view_history: lihat sejarah + node_details: + coordinates: "Koordinat:" + part_of: "Sebahagian:" + node_history: + download: "%{download_xml_link} atau %{view_details_link}" + download_xml: Muat Turun XML + node_history: Sejarah Nod + node_history_title: "Sejarah Nod: %{node_name}" + view_details: lihat butiran + not_found: + sorry: Maaf, %{type} dengan id %{id} tidak dapat dijumpai. + type: + changeset: set ubah + node: nod + relation: hubungan + way: arah + paging_nav: + of: daripada + showing_page: Memaparkan laman + relation: + download: "%{download_xml_link} atau %{view_history_link}" + download_xml: Muat Turun XML + relation: Hubungan + relation_title: "Hubungan: %{relation_name}" + view_history: lihat sejarah + relation_details: + members: "Anggota:" + part_of: "Sebahagian:" + relation_history: + download: "%{download_xml_link} atau %{view_details_link}" + download_xml: Muat Turun XML + relation_history: Sejarah Hubungan + relation_history_title: "Sejarah Hubungan: %{relation_name}" + view_details: lihat butiran + relation_member: + entry_role: "%{type} %{name} sebagai %{role}" + type: + node: Nod + relation: Hubungan + way: Arah + start: + manually_select: Pilih kawasan yang lain secara insani + view_data: Lihat data untuk paparan peta semasa + start_rjs: + data_frame_title: Data + data_layer_name: Data + details: Butiran + drag_a_box: Seretkan petak di atas peta untuk memilih kawasan + edited_by_user_at_timestamp: Disunting oleh [[user]] pada [[timestamp]] + hide_areas: Sorokkan kawasan + history_for_feature: Sejarah [[feature]] + load_data: Muatkan Data + loaded_an_area_with_num_features: Anda telah memilih satu kawasan yang mengandungi [[num_features]] ciri. Pada umumnya, sesetengah pelayar web tidak mungkin mampu memaparkan sebegini banyak data dengan betul. Lazimnya, pelayar paling berkemampuan apabila memaparkan kurang daripada 100 ciri sekaligus; lebih daripada itu mungkin akan melambatkan pelayar anda atau membuatnya tidak responsif. Jika anda betul-betul ingin memaparkan data ini, anda boleh berbuat demikian dengan mengklik butang di bawah. + loading: Memuatkan... + manually_select: Pilih kawasan yang lain secara insani + object_list: + api: Ambil kawasan in dari API + back: Paparkan senarai objek + details: Butiran + heading: Senarai objek + history: + type: + node: Nod [[id]] + way: Arah [[id]] + selected: + type: + node: Nod [[id]] + way: Arah [[id]] + type: + node: Nod + way: Arah + private_user: pengguna persendirian + show_areas: Tunjukkan kawasan + show_history: Tunjukkan Sejarah + unable_to_load_size: "Tidak dapat muat: Saiz petak pembatasan [[bbox_size]] terlalu besar (mesti lebih kecil daripada %{max_bbox_size})" + wait: Tunggu... + zoom_or_select: Zum dekat atau pilih satu kawasan pada peta untuk dilihat + tag_details: + tags: "Tag:" + wiki_link: + key: Laman wiki keterangan tag %{key} + tag: Laman wiki keterangan tag %{key}=%{value} + wikipedia_link: Rencana %{page} di Wikipedia + timeout: + sorry: Maaf, data untuk %{type} dengan id %{id} mengambil masa yang terlalu lama untuk diambil. + type: + changeset: set ubah + node: nod + relation: hubungan + way: arah + way: + download: "%{download_xml_link}, %{view_history_link} atau %{edit_link}" + download_xml: Muat Turun XML + edit: sunting + view_history: lihat sejarah + way: Arah + way_title: "Arah: %{way_name}" + way_details: + also_part_of: + one: juga sebahagian daripada arah %{related_ways} + other: juga sebahagian daripada arah-arah %{related_ways} + nodes: "Nod:" + part_of: "Sebahagian:" + way_history: + download: "%{download_xml_link} atau %{view_details_link}" + download_xml: Muat Turun XML + view_details: lihat butiran + way_history: Sejarah Arah + way_history_title: "Sejarah Arah: %{way_name}" + changeset: + changeset: + anonymous: Tanpa nama + big_area: (besar) + no_comment: (tiada) + no_edits: (tiada suntingan) + show_area_box: tunjukkan petak kawasan + still_editing: (masih dalam penyuntingan) + view_changeset_details: Lihat butiran set ubah + changeset_paging_nav: + next: Berikutnya » + previous: "« Sebelumnya" + showing_page: Memaparkan halaman %{page} + changesets: + area: Kawasan + comment: Komen + id: ID + saved_at: Disimpan pada + user: Pengguna + list: + description: Perubahan terkini + description_bbox: Set Ubah di dalam %{bbox} + description_user: Set Ubah oleh %{user} + description_user_bbox: Set Ubah oleh %{user} di dalam %{bbox} + heading: Set Ubah + heading_bbox: Set Ubah + heading_user: Set Ubah + heading_user_bbox: Set Ubah + title: Set Ubah + title_bbox: Set Ubah di dalam %{bbox} + title_user: Set Ubah oleh %{user} + title_user_bbox: Set Ubah oleh %{user} di dalam %{bbox} + timeout: + sorry: Maaf, senarai set ubah yang anda pohon itu mengambil masa yang terlalu lama untuk diambil. + diary_entry: + diary_comment: + comment_from: Ulasan %{link_user} terhadap %{comment_created_at} + confirm: Sahkan + hide_link: Sorokkan komen ini + diary_entry: + comment_count: "%{count} komen" + comment_link: Ulas catatan ini + confirm: Sahkan + edit_link: Sunting catatan ini + hide_link: Sorokkan catatan ini + posted_by: Diposkan oleh %{link_user} pada %{created} dalam %{language_link} + reply_link: Balas catatan ini + edit: + body: "Isi:" + language: "Bahasa:" + latitude: "Garis Lintang:" + location: "Lokasi:" + longitude: "Garis Bujur:" + marker_text: Lokasi catatan diari + save_button: Simpan + subject: "Subjek:" + title: Sunting catatan diari + use_map_link: gunakan peta + feed: + all: + description: Catatan-catatan diari terbaru oleh pengguna OpenStreetMap + title: Catatan diari OpenStreetMap + language: + description: Catatan-catatan diari terbaru oleh pengguna OpenStreetMap dalam %{language_name} + title: Catatan diari OpenStreetMap dalam %{language_name} + user: + description: Catatan diari OpenStreetMap terkini oleh %{user} + title: Catatan diari OpenStreetMap oleh %{user} + list: + in_language_title: Catatan Diari dalam %{language} + new: Catatan Diari Baru + new_title: Karang catatan baru dalam diari pengguna anda + newer_entries: Catatan Terkini + no_entries: Tiada catatan diari + older_entries: Catatan Terdahulu + recent_entries: "Catatan diari terkini:" + title: Diari pengguna + user_title: Diari %{user} + location: + edit: Sunting + location: "Lokasi:" + view: Lihat + new: + title: Catatan Diari Baru + no_such_entry: + body: Maaf, tiada catatan atau komen diari dengan id %{id}. Sila semak ejaan anda, atau mungkin pautan yang anda klik itu tidak betul. + heading: "Tiada catatan dengan id: %{id}" + title: Catatan diari ini tidak wujud + no_such_user: + body: Maaf, tiada pengguna dengan nama %{user}. Sila semak ejaan anda, atau mungkin pautan yang anda klik itu tidak betul. + heading: Pengguna %{user} tidak wujud + title: Pengguna ini tidak wujud + view: + leave_a_comment: Tinggalkan komen + login: Log masuk + login_to_leave_a_comment: "%{login_link} untuk meninggalkan komen" + save_button: Simpan + title: Diari %{user} | %{title} + user_title: Diari %{user} + editor: + default: Asali (kini %{name}) + potlatch: + description: Potlatch 1 (alat sunting dalam pelayar) + name: Potlatch 1 + potlatch2: + description: Potlatch 2 (alat sunting dalam pelayar) + name: Potlatch 2 + remote: + description: Kawalan Jauh (JOSM atau Merkaartor) + name: Kawalan Jauh + export: + start: + add_marker: Bubuh penanda pada peta + area_to_export: Kawasan untuk Dieksport + embeddable_html: HTML Boleh Benam + export_button: Eksport + export_details: Data OpenStreetMap dilesenkan di bawah lesen Creative Commons Pengiktirafan-PerkongsianSerupa 2.0 Umum. + format: Format + format_to_export: Format untuk Dieksport + image_size: Saiz Imej + latitude: "GL:" + licence: Lesen + longitude: "GB:" + manually_select: Pilih kawasan yang lain secara insani + mapnik_image: Imej Mapnik + max: maks + options: Pilihan + osm_xml_data: Data XML OpenStreetMap + osmarender_image: Imej Osmarender + output: Output + paste_html: Tampalkan HTML untuk dibenamkan dalam tapak web + scale: Skala + too_large: + body: Kawasan ini terlalu besar untuk dieksport dalam bentuk Data XML OpenStreetMap. Sila zum dekat atau pilih kawasan yang lebih kecil. + heading: Kawasan Terlalu Besar + zoom: Zum + start_rjs: + add_marker: Bubuh penanda pada peta + change_marker: Ubah kedudukan penanda + click_add_marker: Klik pada peta untuk membubuh penanda + drag_a_box: Seretkan petak di atas peta untuk memilih kawasan + export: Eksport + manually_select: Pilih kawasan yang lain secara insani + view_larger_map: Lihat Peta yang Lebih Besar + geocoder: + description: + title: + geonames: Lokasi carian GeoNames + osm_namefinder: "%{types} carian OpenStreetMap Namefinder" + osm_nominatim: Lokasi carian OpenStreetMap Nominatim + types: + cities: Bandaraya + places: Tempat + towns: Pekan + description_osm_namefinder: + prefix: "%{distance} ke %{direction} dari %{type}" + direction: + east: timur + north: utara + north_east: timur laut + north_west: barat laut + south: selatan + south_east: tenggara + south_west: barat daya + west: barat + distance: + one: sekitar 1km + other: sekitar %{count}km + zero: kurang daripada 1km + results: + more_results: Lebih banyak hasil + no_results: Tiada hasil carian + search: + title: + ca_postcode: Hasil carian Geocoder.CA + geonames: Hasil carian GeoNames + latlon: Hasil carian dalaman + osm_namefinder: Hasil Carian OpenStreetMap Namefinder + osm_nominatim: Hasil Carian OpenStreetMap Nominatim + uk_postcode: Hasil carian NPEMap / FreeThe Postcode + us_postcode: Hasil carian Geocoder.us + search_osm_namefinder: + suffix_parent: "%{suffix} (%{parentdistance} ke %{parentdirection} dari %{parentname})" + suffix_place: ", %{distance} ke %{direction} dari %{placename}" + search_osm_nominatim: + prefix: + amenity: + airport: Lapangan Terbang + arts_centre: Pusat Seni + atm: ATM + auditorium: Auditorium + bank: Bank + bar: Kedai Arak + bench: Bangku + bicycle_parking: Letak Basikal + bicycle_rental: Sewa Basikal + brothel: Rumah Pelacuran + bureau_de_change: Pengurup Wang + bus_station: Stesen Bas + cafe: Kafe + car_rental: Sewa Kereta + car_sharing: Kongsi Kereta + car_wash: Cuci Kereta + casino: Kasino + cinema: Pawagam + clinic: Klinik + club: Kelab + college: Maktab + community_centre: Pusat Komuniti + courthouse: Mahkamah + crematorium: Bakar Mayat + dentist: Doktor Gigi + doctors: Doktor + dormitory: Asrama + drinking_water: Air Minuman + driving_school: Sekolah Memandu + embassy: Kedutaan + emergency_phone: Telefon Kecemasan + fast_food: Makanan Segera + ferry_terminal: Terminal Feri + fire_hydrant: Pili Bomba + fire_station: Balai Bomba + fountain: Air Pancutan + fuel: Minyak + grave_yard: Perkuburan + gym: Pusat Senaman / Gim + hall: Dewan + health_centre: Pusat Kesihatan + hospital: Hospital + hotel: Hotel + hunting_stand: Pondok Memburu + ice_cream: Aiskrim + kindergarten: Tadika + library: Perpustakaan + market: Pasar + marketplace: Tempat Pasar + mountain_rescue: Penyelamat Gunung + nightclub: Kelab Malam + nursery: Tabika + nursing_home: Rumah Penjagaan + office: Pejabat + park: Taman + parking: Letak Kereta + pharmacy: Farmasi + place_of_worship: Tempat Ibadat + police: Polis + post_box: Peti Surat + post_office: Pejabat Pos + preschool: Prasekolah + prison: Penjara + pub: Pab + public_building: Bangunan Awam + public_market: Pasar Awam + reception_area: Sambut Tetamu + recycling: Kitar Semula + restaurant: Kedai Makan + retirement_home: Rumah Persaraan + sauna: Sauna + school: Sekolah + shelter: Perteduhan + shop: Kedai + shopping: Beli-Belah + social_club: Kelab Sosial + studio: Studio + supermarket: Pasar Raya + taxi: Teksi + telephone: Telefon Awam + theatre: Teater + toilets: Tandas + townhall: Dewan Bandar + university: Universiti + vending_machine: Mesin Layan Diri + veterinary: Doktor Haiwan + village_hall: Balai Raya + waste_basket: Bakul Sampah + wifi: Capaian WiFi + youth_centre: Pusat Belia + boundary: + administrative: Sempadan Pentadbiran + building: + apartments: Blok Rumah Pangsa + block: Blok Bangunan + bunker: Bunker + chapel: Gereja Kecil + church: Gereja + city_hall: Dewan Bandaraya + commercial: Bangunan Perdagangan + dormitory: Asrama + entrance: Pintu Masuk Bangunan + faculty: Bangunan Fakulti + farm: Bangunan Ladang + flats: Rumah Pangsa + garage: Garaj + hall: Dewan + hospital: Bangunan Hospital + hotel: Hotel + house: Rumah + industrial: Bangunan Industri + office: Bangunan Pejabat + public: Bangunan Awam + residential: Bangunan Perumahan + retail: Bangunan Peruncitan + school: Bangunan Sekolah + shop: Kedai + stadium: Stadium + store: Gedung + terrace: Teres + tower: Menara + train_station: Stesen Keretapi + university: Bangunan Universiti + highway: + bridleway: Lorong Kuda + bus_guideway: Lorong Bas Berpandu + bus_stop: Perhentian Bas + byway: Jalan Kecil + construction: Lebuhraya dalam Pembinaan + cycleway: Lorong Basikal + distance_marker: Penanda Jarak + emergency_access_point: Titik Capaian Kecemasan + footway: Lorong Pejalan Kaki + ford: Harungan + gate: Pintu Besar + living_street: Jalan Masyarakat + minor: Jalan Sampingan + motorway: Lebuhraya + motorway_junction: Simpang Lebuhraya + motorway_link: Jalan Lebuhraya + path: Lorong + pedestrian: Laluan Pejalan Kaki + platform: Platform + primary: Jalan Utama + primary_link: Jalan Utama + raceway: Jalan Lumba + residential: Perumahan + road: Jalan Raya + secondary: Jalan Sekunder + secondary_link: Jalan Sekunder + service: Jalan Perkhidmatan + services: Perkhidmatan Lebuhraya + steps: Tangga + stile: Tangga Pagar + tertiary: Jalan Tertier + track: Laluan + trail: Denai + trunk: Jalan Utama + trunk_link: Jalan Utama + unclassified: Jalan Tidak Terkelas + unsurfaced: Jalan Tanpa Turapan + historic: + archaeological_site: Tapak Kaji Purba + battlefield: Medan Pertempuran + boundary_stone: Batu Sempadan + building: Bangunan + castle: Istana + church: Gereja + house: Rumah + icon: Patung + manor: Manor + memorial: Peringatan + mine: Lombong + monument: Tugu + museum: Muzium + ruins: Puing + tower: Menara + wayside_cross: Salib Tepi Jalan + wayside_shrine: Tempat Suci Tepi Jalan + wreck: Ranap + landuse: + allotments: Taman petak + basin: Lembangan + brownfield: Tanah Terbiar + cemetery: Perkuburan + commercial: Kawasan Perdagangan + conservation: Pemuliharaan + construction: Pembinaan + farm: Ladang + farmland: Tanah Ladang + farmyard: Laman Ladang + forest: Hutan + grass: Rumput + greenfield: Tanah Tak Terbangun + industrial: Kawasan Perindustrian + landfill: Kambus Tanah + meadow: Padang Rumput + military: Kawasan Tentera + mine: Lombong + mountain: Gunung + nature_reserve: Cagar Alam + park: Taman + piste: Padang Luncur Ais + plaza: Plaza + quarry: Kuari + railway: Landasan Keretapi + recreation_ground: Tempat Berekreasi + reservoir: Takungan + residential: Kawasan Perumahan + retail: Peruncitan + village_green: Padang Kampung + vineyard: Ladang Anggur + wetland: Tanah Lembap + wood: Hutan Kecil + leisure: + beach_resort: Peranginan Pantai + common: Tanah Awam + fishing: Tempat Memancing + garden: Kebun + golf_course: Padang Golf + ice_rink: Gelanggang Ais + marina: Marina + miniature_golf: Golf Miniatur + nature_reserve: Cagar Alam + park: Taman + pitch: Padang Sukan + playground: Taman Permainan + recreation_ground: Tempat Berekreasi + slipway: Landasan Kapal + sports_centre: Pusat Sukan + stadium: Stadium + swimming_pool: Kolam Renang + track: Balapan Lumba Lari + water_park: Taman Air + natural: + bay: Teluk + beach: Pantai + cape: Tanjung + cave_entrance: Liang Gua + channel: Alur + cliff: Cenuram + coastline: Garis Pinggir Laut + crater: Kawah + feature: Rupa Muka + fell: Fell + fjord: Fjord + geyser: Geiser + glacier: Glasier + heath: Kerangas + hill: Bukit + island: Pulau + land: Daratan + marsh: Tanah Rawang + moor: Mur + mud: Lumpur + peak: Puncak + point: Titik + reef: Terumbu + ridge: Rabung + river: Sungai + rock: Batu + scree: Batu Runtuh + scrub: Belukar + shoal: Beting + spring: Mata Air + strait: Selat + tree: Pokok + valley: Lembah + volcano: Gunung Berapi + water: Air + wetland: Tanah Lembap + wetlands: Tanah Lembap + wood: Hutan Kecil + place: + airport: Lapangan Terbang + city: Bandar + country: Negara + county: Kaunti + farm: Ladang + hamlet: Dukuh + house: Rumah + houses: Rumah-Rumah + island: Pulau + islet: Anak Pulau + locality: Lokaliti + moor: Mur + municipality: Perbandaran + postcode: Poskod + region: Kawasan + sea: Laut + state: Negeri + subdivision: Subbahagian + suburb: Subbandar + town: Pekan + unincorporated_area: Kawasan Tak Terperbadan + village: Desa + railway: + abandoned: Landasan Keretapi Terbiar + construction: Landasan Keretapi dalam Pembinaan + disused: Landasan Keretapi yang Tidak Digunakan Lagi + disused_station: Stesen Keretapi yang Tidak Digunakan Lagi + funicular: Landasan Keretapi Funikular + halt: Perhentian Keretapi + historic_station: Stesen Keretapi Bersejarah + junction: Simpang Landasan Keretapi + level_crossing: Lintasan Keretapi Rata + light_rail: Rel Ringan + monorail: Monorel + narrow_gauge: Landasan Keretapi Sempit + platform: Platform Keretapi + preserved: Landasan Keretapi Terpelihara + spur: Cabang Landasan Keretapi + station: Stesen Keretapi + subway: Stesen Bawah Tanah + subway_entrance: Pintu Masuk Bawah Tanah + switch: Titik Landasan Keretapi + tram: Landasan Trem + tram_stop: Perhentian Trem + yard: Laman Keretapi + shop: + alcohol: Kedai Arak Tanpa Lesen + apparel: Kedai Busana + art: Kedai Seni + bakery: Kedai Roti + beauty: Kedai Kecantikan + beverages: Kedai Minuman + bicycle: Kedai Basikal + books: Kedai Buku + butcher: Kedai Daging + car: Kedai Kereta + car_dealer: Peniaga Kereta + car_parts: Alat Ganti Kereta + car_repair: Baiki Kereta + carpet: Kedai Permaidani + charity: Kedai Amal + chemist: Farmasi + clothes: Kedai Pakaian + computer: Kedai Komputer + confectionery: Kedai Konfeksi + convenience: Kedai Mudah Beli + copyshop: Kedai Fotokopi + cosmetics: Kedai Komestik + department_store: Gedung Serbaneka + discount: Kedai Diskaun + doityourself: DIY + drugstore: Kedai Ubat + dry_cleaning: Kedai Cuci Kering + electronics: Kedai Elektronik + estate_agent: Ejen Hartanah + farm: Kedai Ladang + fashion: Kedai Fesyen + fish: Kedai Ikan + florist: Kedai Bunga + food: Kedai Makanan + funeral_directors: Kedai Urus Mayat + furniture: Perabot + gallery: Balai Seni + garden_centre: Pusat Kebun + general: Kedai Am + gift: Kedai Hadiah + greengrocer: Kedai Jual Sayur + grocery: Kedai Runcit + hairdresser: Kedai Dandan Rambut + hardware: Kedai Barang Besi + hifi: Hi-Fi + insurance: Insurans + jewelry: Kedai Barang Kemas + kiosk: Gerai + laundry: Dobi + mall: Medan Beli-Belah + market: Pasar + mobile_phone: Kedai Telefon Bimbit + motorcycle: Kedai Motosikal + music: Kedai Muzik + newsagent: Gerai Surat Khabar + optician: Kedai Optik + organic: Kedai Makanan Organik + outdoor: Kedai Luaran + pet: Kedai Haiwan + photo: Kedai Foto + salon: Salon + shoes: Kedai Kasut + shopping_centre: Pusat Beli-Belah + sports: Kedai Sukan + stationery: Kedai Alat Tulis + supermarket: Pasar Raya + toys: Kedai Mainan + travel_agency: Agensi Pelancongan + video: Kedai Video + wine: Kedai Arak Tanpa Lesen + tourism: + alpine_hut: Pondok Gunung + artwork: Karya Seni + attraction: Tarikan + bed_and_breakfast: Rumah Tumpangan + cabin: Pondok + camp_site: Tapak Perkhemahan + caravan_site: Tapak Karavan + chalet: Chalet + guest_house: Rumah Tamu + hostel: Hostel + hotel: Hotel + information: Maklumat + lean_to: Bangsal Pisang Sesikat + motel: Motel + museum: Muzium + picnic_site: Tapak Berkelah + theme_park: Taman Tema + valley: Lembah + viewpoint: Sudut Pandangan + zoo: Taman Haiwan + waterway: + boatyard: Limbungan Bot + canal: Terusan + connector: Penyambung Jalan Air + dam: Empangan + derelict_canal: Terusan Terbiar + ditch: Parit + dock: Dok + drain: Longkang + lock: Pintu Air + lock_gate: Pintu Air + mineral_spring: Mata Air Mineral + mooring: Tambatan + rapids: Jeram + river: Sungai + riverbank: Tebing Sungai + stream: Anak Sungai + wadi: Wadi + water_point: Titik Jalan Air + waterfall: Air Terjun + weir: Tebat + javascripts: + map: + base: + cycle_map: Peta Basikal + mapquest: MapQuest Dibuka + transport_map: Peta Pengangkutan + site: + edit_disabled_tooltip: Zum dekat untuk menyunting peta + edit_tooltip: Sunting peta + edit_zoom_alert: Anda mesti mengezum dekat untuk menyunting peta ini + history_disabled_tooltip: Zum dekat untuk melihat suntingan bagi kawasan ini + history_tooltip: Lihat suntingan bagi kawasan ini + history_zoom_alert: Anda mesti mengezum dekat untuk melihat suntingan bagi kawasan ini + layouts: + community_blogs: Blog Komuniti + community_blogs_title: Blog-blog ahli komuniti OpenStreetMap + copyright: Hak Cipta & Lesen + documentation: Dokumentasi + documentation_title: Dokumentasi projek + donate: Sokong OpenStreetMap dengan %{link} kepada Dana Penaiktarafan Perkakas. + donate_link_text: menderma + edit: Sunting + edit_with: Sunting dengan %{editor} + export: Eksport + export_tooltip: Eksport data peta + foundation: Yayasan + foundation_title: Yayasan OpenStreetMap + gps_traces: Jejak GPS + gps_traces_tooltip: Uruskan jejak GPS + help: Bantuan + help_centre: Pusat Bantuan + help_title: Tapak bantuan projek + history: Sejarah + home: laman utama + home_tooltip: Pergi ke lokasi rumah + inbox: peti masuk (%{count}) + inbox_tooltip: + one: Peti masuk anda mengandungi sepucuk pesanan yang belum dibaca + other: Peti masuk anda mengandungi %{count} pesanan yang belum dibaca + zero: Peti masuk anda tidak mengandungi sebarang pesanan yang belum dibaca + intro_1: OpenStreetMap ialah peta seluruh dunia yang boleh disunting. Ia dihasilkan oleh insan-insan seperti anda. + intro_2: OpenStreetMap membolehkan anda untuk melihat, menyunting dan menggunakan data geografi secara kolaborasi dari mana-mana di atas muka Bumi. + intro_3: Pengehosan OpenStreetMap disokong dengan sepenuh hati oleh %{ucl}, %{ic} dan %{bytemark}. Penyokong-penyokong projek yang lain tersenarai dalam %{partners}. + intro_3_ic: Imperial College London + intro_3_partners: wiki + intro_3_ucl: Pusat VR UCL + license: + title: Data OpenStreetMap dilesenkan di bawah lesen Creative Commons Pengiktirafan-PerkongsianSerupa 2.0 Umum + log_in: log masuk + log_in_tooltip: Log masuk dengan akaun yang sedia ada + logo: + alt_text: Logo OpenStreetMap + logout: log keluar + logout_tooltip: Log keluar + make_a_donation: + text: Derma + title: Sokonglah OpenStreetMap dengan dermaan dalam bentuk wang + osm_offline: Pangkalan data OpenStreetMap kini diputuskan sambungannya sementara kerja penyelenggaran mustahak dilangsungkan. + osm_read_only: Pangkalan data OpenStreetMap sekarang ditetapkan pada mod baca sahaja sementara kerja penyelenggaran mustahak dilangsungkan. + sign_up: daftar diri + sign_up_tooltip: Buka akaun untuk menyunting + sotm2011: "-" + tag_line: Peta Dunia Wiki Bebas + user_diaries: Diari Pengguna + user_diaries_tooltip: Lihat diari pengguna + view: Lihat + view_tooltip: Lihat peta + welcome_user: Selamat datang, %{user_link} + welcome_user_link_tooltip: Laman pengguna anda + wiki: Wiki + wiki_title: Tapak wiki projek + license_page: + foreign: + english_link: teks asal bahasa Inggeris + text: Sekiranya terdapat percanggahan antara halaman yang diterjemah ini dengan %{english_original_link}, maka versi bahasa Inggeris itu akan diberi keutamaan + title: Perihal terjemahan ini + legal_babble: "

    Hak Cipta dan Lesen

    \n

    \n OpenStreetMap merupakan data terbuka yang dilesenkan di bawah lesen Pengiktirafan-PerkongsianSerupa 2.0 (CC-BY-SA).\n

    \n

    \n Anda diberi kebebasan untuk menyalin, mengedarkan, memancarkan dan mengubah suai peta-peta dan data kami asalkan anda memberikan penghargaan kepada OpenStreetMap dan para penyumbangnya. Sekiranya anda mengubah atau menokok tambah peta-peta atau data kami, anda boleh mengedarkan hasilnya di bawah lesen yang sama sahaja. Hukum undang-undang yang penuh ini menjelaskan hak-hak dan tanggungjawab anda.\n

    \n\n

    Cara memberikan penghargaan kepada OpenStreetMap

    \n

    \n Sekiranya anda menggunakan imej-imej peta OpenStreetMap map images, kami memohon supaya penghargaan anda menyatakan sekurang-kurangnya yang berikut: “© para penyumbang OpenStreetMap, CC-BY-SA”. Jika anda menggunakan data peta sahaja, kami memohon “Data peta © penyumbang OpenStreetMap, CC-BY-SA”.\n

    \n

    \n Di mana mungkin, OpenStreetMap sewajarnya dihiperpautkan dengan http://www.openstreetmap.org/ dan CC-BY-SA dengan http://creativecommons.org/licenses/by-sa/2.0/. Jika anda menggunakan bahantara yang tidak membolehkan pautan (cth. hasil cetakan), kami mencadangkan agar anda melencongkan para pembaca anda kepada www.openstreetmap.org (mungkin dengan mengembangkan ‘OpenStreetMap’ kepada alamat penuh ini) dan juga www.creativecommons.org.\n

    \n\n

    Mengetahui lebih lanjut

    \n

    \n Baca lebih lanjut tentang penggunaan data kami di Soalan Lazim Undang-Undang.\n

    \n

    \n Para penyumbang OSM diingatkan supaya tidak sesekali menambahkan data dari mana-mana sumber yang berhak cipta (cth. Google Maps atau peta cetakan) tanpa kebenaran yang tersurat daripada pemegang hak cipta.\n

    \n

    \n Sungguhpun OpenStreetMap merupakan data terbuka, namun kami tidak boleh menyediakan API peta yang percuma untuk pemaju pihak ketiga.\n\n Bacalah Dasar Penggunaan API, Dasar Penggunaan Jubin dan Dasar Penggunaan Nominatim kami.\n

    \n\n

    Penyumbang kami

    \n

    \n Lesen CC-BY-SA kami mengehendaki anda untuk “memberikan penghargaan Pengarang Asal yang berpatutan dengan bahantara atau kaedah yang Anda sedang gunakan”. Setiap seorang pemeta OSM tidak memohon penghargaan yang melebihi penghargaan kepada “para penyumbang OpenStreetMap”, tetapi seandainya data daripada agensi pemetaan kebangsaan atau sebarang sumber utama yang lain telah disertakan dalam OpenStreetMap, maka adalah wajar untuk memberikan penghargaan kepadanya dengan terus mengeluarkan semula penghargaannya atau membubuh pautan kepadanya dalam laman ini.\n

    \n\n\n\n
      \n
    • Australia: Mengandungi data subbandar berasaskan data Australian Bureau of Statistics.
    • \n
    • Austria: Mengandungi data daripada Stadt Wien di bawah CC-BY.
    • \n
    • Kanada: Mengandungi data daripada GeoBase®, GeoGratis (© Department of Natural Resources Canada), CanVec (© Department of Natural Resources Canada), and StatCan (Geography Division, Statistics Canada).
    • \n
    • New Zealand: Mengandungi data yang disumberkan daripada Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Perancis: Mengandungi data yang disumberkan daripada Direction Générale des Impôts.
    • \n
    • Poland: Mengandungi data daripada peta-peta UMP-pcPL. Hak cipta penyumbang UMP-pcPL.
    • \n
    • United Kingdom: Mengandungi data Ordnance Survey data © Crown copyright and database right 2010.
    • \n
    \n\n

    \n Penyertaan data dalam OpenStreetMap tidak bermaksud bahawa pembekal data asal menyokong OpenStreetMap, menyediakan sebarang waranti, atau menerima sebarang tanggungan.\n

    " + native: + mapping_link: mula membuat peta + native_link: versi Bahasa Melayu + text: Anda sedang membaca halaman hak cipta dalam versi bahasa Inggeris. Anda boleh kembali kepada %{native_link} halaman ini, atau berhenti membaca perihal hak cipta dan %{mapping_link}. + title: Perihal laman ini + message: + delete: + deleted: Pesanan dibuang + inbox: + date: Tarikh + from: Daripada + my_inbox: Peti masuk saya + no_messages_yet: Anda belum ada pesanan. Apa kata anda berhubung dengan %{people_mapping_nearby_link}? + outbox: peti keluar + people_mapping_nearby: pemeta-pemeta yang berdekatan + subject: Subjek + title: Peti Masuk + you_have: Anda mempunyai %{new_count} pesanan baru dan %{old_count} pesanan lama + mark: + as_read: Pesanan ditandai sebagai sudah dibaca + as_unread: Pesanan ditandai sebagai belum dibaca + message_summary: + delete_button: Hapuskan + read_button: Tanda sebagai sudah dibaca + reply_button: Balas + unread_button: Tanda sebagai belum dibaca + new: + back_to_inbox: Kembali ke peti masuk + body: Isi + limit_exceeded: Anda telah banyak menghantar pesanan baru-baru ini. Sila tunggu sebentar sebelum cuba mengirim banyak lagi pesanan. + message_sent: Pesanan dikirim + send_button: Kirim + send_message_to: Hantar pesanan baru kepada %{name} + subject: Subjek + title: Hantar pesanan + no_such_message: + body: Maaf, tiada pesanan dengan ID ini. + heading: Pesanan ini tidak wujud + title: Pesanan ini tidak wujud + no_such_user: + body: Maaf, tiada pengguna yang bernama sedemikian. + heading: Pengguna ini tidak wujud + title: Pengguna ini tidak wujud + outbox: + date: Tarikh + inbox: Peti masuk + my_inbox: "%{inbox_link} saya" + no_sent_messages: Anda belum menghantar pesanan. Apa kata anda berhubung dengan %{people_mapping_nearby_link}? + outbox: peti keluar + people_mapping_nearby: pemeta-pemeta yang berdekatan + subject: Subjek + title: Peti Keluar + to: Kepada + you_have_sent_messages: Anda mempunyai %{count} pesanan terhantar + read: + back_to_inbox: Kembali ke peti masuk + back_to_outbox: Kembali ke peti keluar + date: Tarikh + from: Daripada + reading_your_messages: Membaca pesanan anda + reading_your_sent_messages: Membaca pesanan yang dihantar + reply_button: Balas + subject: Subjek + title: Baca pesanan + to: Kepada + unread_button: Tanda sebagai belum dibaca + wrong_user: Anda telah log masuk sebagai `%{user}' tetapi pesanan yang anda pohon untuk membaca itu tidak dihantar oleh/kepada pengguna itu. Sila log masuk sebagai pengguna yang betul untuk membacanya. + reply: + wrong_user: Anda telah log masuk sebagai `%{user}' tetapi pesanan yang anda pohon untuk membalas itu tidak dihantar kepada pengguna itu. Sila log masuk sebagai pengguna yang betul untuk membacanya. + sent_message_summary: + delete_button: Hapuskan + notifier: + diary_comment_notification: + footer: Anda juga boleh membaca komen di %{readurl} serta mengulas di %{commenturl} atau membalas di %{replyurl} + header: "%{from_user} telah mengulas catatan diari OpenStreetMap anda yang terbaru dengan tajuk %{subject}:" + hi: Apa khabar %{to_user}, + subject: "[OpenStreetMap] %{user} mengulas catatan diari anda" + email_confirm: + subject: "[OpenStreetMap] Sahkan alamat e-mel anda" + email_confirm_html: + click_the_link: Jika anda orangnya, sila klik pautan di bawah untuk mengesahkan perubahan. + greeting: Apa khabar, + hopefully_you: Seseorang (harap-harap iaitu anda) ingin menukar alamat e-melnya di %{server_url} kepada %{new_address}. + email_confirm_plain: + click_the_link: Jika anda orangnya, sila klik pautan di bawah untuk mengesahkan perubahan. + greeting: Apa khabar, + hopefully_you_1: Seseorang (harap-harap iaitu anda) ingin menukar alamat e-melnya di + hopefully_you_2: "%{server_url} kepada %{new_address}." + friend_notification: + befriend_them: Anda juga boleh menjadikannya sebagai kawan di %{befriendurl}. + had_added_you: "%{user} telah menjadikan anda sebagai kawan di OpenStreetMap." + see_their_profile: Anda boleh membaca profilnya di %{userurl}. + subject: "[OpenStreetMap] %{user} menjadikan anda sebagai rakannya" + gpx_notification: + and_no_tags: and tiada tag. + and_the_tags: "dan tag-tag yang berikut:" + failure: + failed_to_import: "tidak dapat diimport. Berikut ialah ralatnya:" + more_info_1: Maklumat lanjut tentang kegagalan import GPX dan cara mengelakkannya + more_info_2: "boleh didapati di:" + subject: "[OpenStreetMap] GPX gagal diimport" + greeting: Apa khabar, + success: + loaded_successfully: berjaya dimuatkan dengan %{trace_points} daripada sejumlah %{possible_points} titik. + subject: "[OpenStreetMap] GPX berjaya diimport" + with_description: dengan keterangan + your_gpx_file: Nampaknya fail GPX anda + lost_password: + subject: "[OpenStreetMap] Permohonan mengeset semula kata laluan" + lost_password_html: + click_the_link: Jika anda orangnya, sila klik pautan di bawah untuk mengeset semula kata laluan anda. + greeting: Apa khabar, + hopefully_you: Seseorang (mungkin anda) telah memohon supaya kata laluan ini diset semula di akaun openstreetmap.org milik alamat e-mel ini. + lost_password_plain: + click_the_link: Jika anda orangnya, sila klik pautan di bawah untuk mengeset semula kata laluan anda. + greeting: Apa khabar, + hopefully_you_1: Seseorang (mungkin anda) telah memohon supaya kata laluan ini diset semula di + hopefully_you_2: akaun openstreetmap.org milik alamat e-mel ini. + message_notification: + footer1: Anda juga boleh membaca pesanan ini di %{readurl} + footer2: dan anda boleh membalas di %{replyurl} + header: "%{from_user} telah menghantar sepucuk pesanan kepada anda melalui OpenStreetMap dengan subjek %{subject}:" + hi: Apa khabar %{to_user}, + signup_confirm: + subject: "[OpenStreetMap] Sahkan alamat e-mel anda" + signup_confirm_html: + ask_questions: Anda boleh menanyakan sebarang soalan tentang OpenStreetMap di tapak soal jawab kami. + click_the_link: Jika anda orangnya, selamat datang! Sila klik pautan di bawah untuk mengesahkan akaun anda dan teruskan membaca untuk maklumat lanjut tentang OpenStreetMap. + current_user: Senarai pengguna semasa dalam kategori berasaskan kedudukan mereka di dunia, terdapat di Category:Users_by_geographical_region. + get_reading: Bacalah maklumat tentang OpenStreetMap di wiki ini, ikutilah perkembangan terbaru melalui blog atau Twitter OpenStreetMap, ataupun layari blog OpenGeoData oleh Steve Coast, pengasas OpenStreetMap untuk mempelajari sejarah ringkas projek ini, lengkap dengan podcast juga! + greeting: Apa khabar! + hopefully_you: Seseorang (harap-harap iaitu anda) ingin membuka akaun di + introductory_video: Anda boleh menonton %{introductory_video_link}. + more_videos: Terdapat %{more_videos_link}. + more_videos_here: banyak lagi video di sini + user_wiki_page: Anda disyorkan supaya membentuk sebuah laman wiki pengguna yang merangkumi tag-tag kategori yang menyatakan kedudukan anda, seperti [[Category:Users_in_London]]. + video_to_openstreetmap: video pengenalan OpenStreetMap + wiki_signup: Apa kata anda mendaftarkan diri ke dalam wiki OpenStreetMap. + signup_confirm_plain: + ask_questions: "Anda boleh menanyakan sebarang soalan tentang OpenStreetMap di tapak soal jawab kami:" + blog_and_twitter: "Dapatkan berita mutakhir melalui blog OpenStreetMap blog atau Twitter:" + click_the_link_1: Jika anda orangnya, selamat datang! Sila klik pautan di bawah untuk mengesahkan akaun + click_the_link_2: anda dan teruskan membaca untuk maklumat lanjut tentang OpenStreetMap. + current_user_1: Senarai pengguna semasa dalam kategori berasaskan kedudukan mereka di dunia, + current_user_2: "boleh didapati di:" + greeting: Apa khabar! + hopefully_you: Seseorang (harap-harap iaitu anda) ingin membuka akaun di + introductory_video: "Anda boleh menonton video pengenalan OpenStreetMap di sini:" + more_videos: "Ada banyak lagi video di sini:" + opengeodata: "OpenGeoData.org merupakan blog milik pengasas OpenStreetMap, Steve Coast, dan juga mempunyai podcast:" + the_wiki: "Bacalah perihal OpenStreetMap di wiki:" + user_wiki_1: Anda disaran supaya mewujudkan laman wiki pengguna yang merangkumi + user_wiki_2: tag-tag kategori yang menyatakan kedudukan anda, seperti [[Category:Users_in_London]]. + wiki_signup: "Anda juga boleh mendaftarkan diri untuk menyertai wiki OpenStreetMap di:" + oauth: + oauthorize: + allow_read_gpx: membaca jejak GPS peribadi anda. + allow_read_prefs: membaca keutamaan pengguna anda. + allow_to: "Benarkan aplikasi klien untuk:" + allow_write_api: mengubah suai peta. + allow_write_diary: membuat catatan diari dan komen serta berkawan. + allow_write_gpx: memuat naik jejak GPS. + allow_write_prefs: mengubah suai keutamaan pengguna anda. + request_access: Aplikasi %{app_name} sedang memohon akses kepada akaun anda, %{user}. Sila semak sama ada anda menginginkan aplikasi itu untuk memiliki kebolehan-kebolehan yang berikut. Anda boleh memilih sebanyak mana yang anda suka. + revoke: + flash: Anda telah menarik balik token untuk %{application} + oauth_clients: + create: + flash: Maklumat berjaya didaftarkan + destroy: + flash: Permohonan aplikasi klien dihapuskan + edit: + submit: Sunting + title: Sunting aplikasi anda + form: + allow_read_gpx: membaca jejak GPS peribadinya. + allow_read_prefs: membaca keutamaan penggunanya. + allow_write_api: mengubah suai peta. + allow_write_diary: membuat catatan diari dan komen serta berkawan. + allow_write_gpx: memuat naik jejak GPS. + allow_write_prefs: mengubah suai keutamaan penggunanya. + callback_url: URL Panggil Balik + name: Nama + requests: "Pohon kebenaran-kebenaran yang berikut daripada pengguna ini:" + required: Wajib + support_url: URL Sokongan + url: URL Aplikasi Utama + index: + application: Nama Aplikasi + issued_at: Dikeluarkan Pada + list_tokens: "Token-token yang berikut telah diserahkan pada aplikasi-aplikasi atas nama anda:" + my_apps: Aplikasi Klien Saya + my_tokens: Aplikasi Saya yang Dibenarkan + no_apps: Adakah anda mempunyai aplikasi yang ingin anda daftarkan untuk digunakan dengan kami yang menggunakan piawaian %{oauth}? Anda mesti mendaftarkan aplikasi web anda sebelum ia boleh membuat permintaan OAuth kepada perkhidmatan ini. + register_new: Daftarkan aplikasi anda + registered_apps: "Anda telah mendaftarkan aplikasi-alikasi klien yang berikut:" + revoke: Tarik Balik! + title: Butiran OAuth Saya + new: + submit: Daftar + title: Daftarkan aplikasi baru + not_found: + sorry: Maaf, %{type} itu tidak dapat dijumpai. + show: + access_url: "URL Token Akses:" + allow_read_gpx: membaca jejak GPS peribadinya. + allow_read_prefs: membaca keutamaan penggunanya. + allow_write_api: mengubah suai peta. + allow_write_diary: membuat catatan diari dan komen serta berkawan. + allow_write_gpx: memuat naik jejak GPS. + allow_write_prefs: mengubah suai keutamaan penggunanya. + authorize_url: "URL Kebenaran:" + edit: Sunting Butiran + key: "Kunci Pengguna:" + requests: "Kebenaran-kebenaran berikut dipohon daripada pengguna tersebut:" + secret: "Rahsia Pengguna:" + support_notice: Kami menyokong HMAC-SHA1 (disyorkan) dan juga teks biasa dalam mod ssl. + title: Butiran OAuth untuk %{app_name} + url: "URL Token Permohonan:" + update: + flash: Maklumat klien berjaya dikemaskinikan + site: + edit: + anon_edits_link_text: Ketahuilah sebab jadinya begini. + flash_player_required: Anda memerlukan pemain Flash untuk menggunakan Potlatch, iaitu editor OpenStreetMap yang menggunakan Flash. Anda boleh memuat turun Flash Player dari Adobe.com. Terdapat juga pilihan-pilihan lain untuk menyunting OpenStreetMap. + no_iframe_support: Pelayar web anda tidak menyokong 'iframe' HTML yang diperlukan untuk ciri ini. + not_public: Anda belum menetapkan suntingan anda untuk untuk ditunjukkan kepada orang awam. + not_public_description: Selagi tidak berbuat demikian, anda tidak boleh menyunting peta lagi. Anda boleh menetapkan suntingan-suntingan anda sebagai tatapan umum di %{user_page} anda. + potlatch2_not_configured: Potlatch 2 belum dikonfigurasikan - sila lihat http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 untuk maklumat lanjut + potlatch2_unsaved_changes: Anda ada perubahan yang belum disimpan. (Untuk menyimpan dalam Potlatch 2, anda patut mengklik 'simpan'.) + potlatch_unsaved_changes: Anda ada perubahan yang belum disimpan. (Untuk menyimpan dalam Potlatch, anda perlu menyahpilih arah atau titik semasa jika anda menyunting dalam mod langsung, atau klik simpan jika terdapat butang simpan.) + user_page_link: laman pengguna + index: + js_1: Anda sedang menggunakan pelayar web yang tidak menyokong JavaScript, ataupun anda tidak menghidupkan JavaScript. + js_2: OpenStreetMap menggunakan JavaScript untuk peta licinnya. + js_3: Apa kata anda cuba pelayar jubin statik Tiles@Home seandainya anda tidak dapat menghidupkan JavaScript. + license: + license_name: Pengiktirafan-PerkongsianSerupa 2.0 + notice: Dilesenkan di bawah lesen %{license_name} oleh %{project_name} dan para penyumbangnya. + project_name: Projek OpenStreetMap + permalink: Pautan Kekal + remote_failed: Penyuntingan gagal - pastikan JOSM atau Merkaartor dimuatkan dan ciri kawalan jauh dihidupkan + shortlink: Pautan Ringkas + key: + map_key: Petunjuk + map_key_tooltip: Petunjuk peta + table: + entry: + admin: Sempadan pentadbiran + allotments: Taman petak + apron: + - Kawasan gerak lapangan terbang + - terminal + bridge: Kasing hitam = jambatan + bridleway: Lorong kuda + brownfield: Tanah terbiar + building: Bangunan penting + byway: Jalan kecil + cable: + - Kereta kabel + - lif kerusi + cemetery: Perkuburan + centre: Pusat sukan + commercial: Kawasan perdagangan + common: + - Tanah awam + - padang rumput + construction: Jalan dalam pembinaan + cycleway: Lorong basikal + destination: Jalan masuk destinasi + farm: Ladang + footway: Laluan pejalan kaki + forest: Hutan + golf: Padang golf + heathland: Kawasan rawa + industrial: Kawasan perindustrian + lake: + - Tasik + - takungan + military: Kawasan tentera + motorway: Lebuhraya + park: Taman + permissive: Jalan masuk permisif + pitch: Padang sukan + primary: Jalan utama + private: Jalan masuk persendirian + rail: Landasan keretapi + reserve: Cagar alam + resident: Kawasan perumahan + retail: Kawasan peruncitan + runway: + - Landasan kapal terbang + - jalan rayap + school: + - Sekolah + - universiti + secondary: Jalan sekunder + station: Stesen keretapi + subway: Landasan bawah tanah + summit: + - Kemuncak + - puncak + tourist: Tarikan pelancong + track: Laluan + tram: + - Rel ringan + - tram + trunk: Jalan utama + tunnel: Kasing bertitik-titik = terowong + unclassified: Jalan tidak terkelas + unsurfaced: Jalan tanpa turapan + wood: Hutan kecil + search: + search: Cari + search_help: "cth: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', atau 'post offices near Lünen' banyak lagi contoh..." + submit_text: Pergi + where_am_i: Saya di mana? + where_am_i_title: Huraikan lokasi semasa dengan menggunakan enjin carian + sidebar: + close: Tutup + search_results: Hasil Carian + time: + formats: + friendly: "%e %B %Y, %H:%M" + trace: + create: + trace_uploaded: Fail GPX anda telah dimuat naik dan menunggu untuk dimasukkan dalam pangkalan data. Lazimnya, ini akan berlaku dalam masa setengah jam, kemudian e-mel akan dihantar kepada anda setelah siap. + upload_trace: Muat Naik Jejak GPS + delete: + scheduled_for_deletion: Jejak dijadualkan untuk penghapusan + edit: + description: "Keterangan:" + download: muat turun + edit: sunting + filename: "Nama fail:" + heading: Menyunting jejak %{name} + map: peta + owner: "Pemilik:" + points: "Titik:" + save_button: Simpan Perubahan + start_coord: "Koordinat mula:" + tags: "Tag:" + tags_help: terbatas tanda koma + title: Menyunting jejak %{name} + uploaded_at: "Dimuat naik:" + visibility: "Keterlihatan:" + visibility_help: apakah maksud ini? + list: + public_traces: Jejak GPS umum + public_traces_from: Jejak GPS umum oleh %{user} + tagged_with: " ditagkan dengan %{tags}" + your_traces: Jejak GPS anda + make_public: + made_public: Jejak diumumkan + no_such_user: + body: Maaf, tiada pengguna dengan nama %{user}. Sila semak ejaan anda, atau mungkin pautan yang anda klik itu tidak betul. + heading: Pengguna %{user} tidak wujud + title: Pengguna ini tidak wujud + offline: + heading: Storan GPX di Luar Talian + message: Sistem storan dan muat naik fail GPX kini tidak boleh digunakan. + offline_warning: + message: Sistem muat naik fail GPX kini tidak boleh digunakan. + trace: + ago: "%{time_in_words_ago} lalu" + by: oleh + count_points: "%{count} titik" + edit: sunting + edit_map: Sunting Peta + identifiable: BOLEH DIKENAL PASTI + in: dalam + map: peta + more: lagi + pending: MENUNGGU + private: PERIBADI + public: UMUM + trace_details: Lihat Butiran Jejak + trackable: BOLEH DIJEJAKI + view_map: Lihat Peta + trace_form: + description: Keterangan + help: Bantuan + tags: "Tag:" + tags_help: terbatas tanda koma + upload_button: Muat naik + upload_gpx: "Muat Naik Fail GPX:" + visibility: "Keterlihatan:" + visibility_help: apakah maksud ini? + trace_header: + see_all_traces: Lihat semua jejak + see_your_traces: Lihat jejak anda + traces_waiting: Anda mempunyai %{count} jejak yang sedang menunggu untuk dimuat naik. Ada baiknya anda menunggu hingga yang ini selesai sebelum memuat naik lagi supaya tidak menyesakkan baris gilir untuk pengguna-pengguna lain. + upload_trace: Muat naik jejak + trace_optionals: + tags: Tag + trace_paging_nav: + next: Berikutnya » + previous: "« Sebelumnya" + showing_page: Memaparkan halaman %{page} + view: + delete_track: Hapsukan jejak ini + description: "Keterangan:" + download: muat turun + edit: sunting + edit_track: Sunting jejak ini + filename: "Nama fail:" + heading: Menyunting jejak %{name} + map: peta + none: Tiada + owner: "Pemilik:" + pending: MENUNGGU + points: "Titik:" + start_coordinates: "Koordinat mula:" + tags: "Tag:" + title: Menyunting jejak %{name} + trace_not_found: Jejak tidak dijumpai! + uploaded: "Dimuat naik:" + visibility: "Keterlihatan:" + visibility: + identifiable: Boleh dikenal pasti (dipaparkan dalam senarai jejak sebagai titik tersusun yang boleh dikenal pasti dengan cop masa) + private: Peribadi (hanya dikongsikan sebagai titik yang tidak tersusun secara tanpa nama) + public: Awam (dipaparkan dalam senarai jejak sebagai titik yang tidak tersusun dan tanpa nama) + trackable: Boleh dijejaki (hanya dikongsikan sebagai titik tersusun tanpa nama dengan cop masa) + user: + account: + contributor terms: + agreed: Anda telah bersetuju dengan Terma-Terma Penyumbang yang baru. + agreed_with_pd: Anda juga telah mengisytiharkan bahawa anda menganggap suntingan-suntingan anda sebagai berada dalam Domain Awam. + heading: "Terma-Terma Penyumbang:" + link text: apakah ini? + not yet agreed: Anda belum bersetuju dengan Terma-Terma Penyumbang yang baru. + review link text: Sila ikuti pautan ini bila-bila anda senang untuk meneliti dan menerima Terma-Terma Penyumbang yang baru. + current email address: "Alamat E-Mel Sekarang:" + delete image: Buang imej semasa + email never displayed publicly: (tidak sesekali dipaparkan kepada umum) + flash update success: Maklumat pengguna berjaya dikemaskinikan. + flash update success confirm needed: Maklumat pengguna berjaya dikemaskinikan. Semak e-mel anda untuk pesanan untuk mengesahkan alamat e-mel baru anda. + home location: "Lokasi Rumah:" + image: "Imej:" + image size hint: (imej segi empat sama yang sekurang-kurangnya 100x100 adalah paling bagus) + keep image: Simpan imej semasa + latitude: "Garis Lintang:" + longitude: "Garis Bujur:" + make edits public button: Umumkan semua suntingan saya + my settings: Tetapan saya + new email address: "Alamat E-mel Baru:" + new image: Tambahkan imej + no home location: Anda belum memasukkan lokasi rumah anda. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: apakah ini? + openid: "OpenID:" + preferred editor: "Editor Pilihan:" + preferred languages: "Bahasa Pilihan:" + profile description: "Keterangan Profil:" + public editing: + disabled: Dimatikan, data tidak boleh disunting, semua suntingan yang sebelumnya adalah tanpa nama. + disabled link text: mengapa tak boleh sunting? + enabled: Dihidupkan. Tidak tanpa nama, data boleh disunting. + enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits + enabled link text: apakah ini? + heading: "Penyuntingan umum:" + public editing note: + heading: Penyuntingan umum + text: Kini, anda menyunting secara tanpa nama, maka orang lain tidak boleh menghantar pesanan kepada anda atau melihat lokasi anda. Untuk menunjukkan apa yang anda sunting serta membolehkan orang ramai berhubung dengan anda melalui tapak web ini, sila klik butang di bawah. Semenjak peralihan 0.6 API, hanya pengguna umum boleh menyunting data peta. (ketahui sebabnya).
    • Alamat e-mel anda tidak akan didedahkan dengan menjadi umum.
    • Tindakan ini tidak boleh diterbalikkan dan semua pengguna baru adalah umum pada asalinya.
    + replace image: Ganti imej semasa + return to profile: Kembali ke profil + save changes button: Simpan Perubahan + title: Sunting akaun + update home location on click: Adakah anda ingin mengemaskinikan lokasi rumah dengan mengklik pada peta? + confirm: + already active: Akaun ini sudah pun disahkan. + before you start: Kami tahu bahawa anda mungkin tergesa-gesa untuk bermula menyunting peta, tetapi sebelum itu anda disarankan untuk mengisikan banyak lagi maklumat tentang diri anda dalam borang di bawah. + button: Sahkan + heading: Sahkan akaun pengguna + press confirm button: Tekan butang pengesahan di bawah untuk mengaktifkan akaun anda. + reconfirm: Jika sudah sekian lama sejak anda mendaftar, mungkin anda perlu menghantar e-mel pengesahan yang baru kepada diri sendiri. + success: Akaun anda telah disahkan. Terima kasih kerana mendaftar! + unknown token: Nampaknya token itu tidak wujud. + confirm_email: + button: Sahkan + failure: Sudah ada alamat e-mel yang disahkan dengan token ini. + heading: Sahkan penukaran alamat e-mel + press confirm button: Tekan butang sahkan di bawah untuk mengesahkan alamat e-mel baru anda. + success: Alamat e-mel anda telah disahkan. Terima kasih kerana mendaftar! + confirm_resend: + failure: Pengguna %{name} tidak dijumpai. + success: Kami telah menghantar pesanan pengesahan kepada %{email}. Sebaik sahaja anda mengesahkan akaun anda, anda akan boleh menyunting peta.

    Jika anda menggunakan sistem anti-spam yang menghantar permohonan untuk pengesahan, sila pastikan anda membenarkan webmaster@openstreetmap.org kerana kami tidak dapat membalas sebarang permohonan untuk pengesahan. + filter: + not_an_administrator: Anda perlu menjadi pentadbir untuk melakukan tindakan itu. + go_public: + flash success: Sekarang, suntingan anda menjadi tatapan umum, maka anda dibenarkan untuk menyunting. + list: + confirm: Sahkan Pengguna-Pengguna Terpilih + empty: Tiada pengguna sepadan yang dijumpai + heading: Pengguna + hide: Sorokkan Pengguna-Pengguna Terpilih + showing: + one: Menunjukkan halaman %{page} (%{first_item} daripada %{items}) + other: Menunjukkan halaman %{page} (%{first_item}-%{last_item} daripada %{items}) + summary: "%{name} diwujudkan dari %{ip_address} pada %{date}" + summary_no_ip: "%{name} diwujudkan pada %{date}" + title: Pengguna + login: + account not active: Maaf, akaun anda belum aktif.
    Sila ikuti pautan dalam pesanan e-mel pengesahan akaun untuk menghidupkan akaun anda, atau pohon pesanan e-mel pengesahan yang baru. + account suspended: Maaf, akaun anda telah digantung disebabkan kegiatan.
    Sila hubungi %{webmaster} jika anda ingin membincangkan perkara ini. + auth failure: Maaf, log masuk tidak dapat dibenarkan dengan butiran-butiran itu. + create account minute: Bukalah satu akaun. Seminit sahaja masa untuk membuatnya. + email or username: "Alamat E-mel atau Nama Pengguna:" + heading: Log masuk + login_button: Log masuk + lost password link: Lupa kata laluan anda? + new to osm: Baru kenal OpenStreetMap? + notice: Ketahui lebih lanjut tentang perubahan lesen OpenStreetMap yang akan datang (terjemahan) (perbincangan) + openid: "OpenID %{logo}:" + openid invalid: Maaf, OpenID anda nampaknya tidak betul formatnya + openid missing provider: Maaf, pembekal OpenID anda tidak dapat dihubungi + openid_logo_alt: Log masuk dengan OpenID + openid_providers: + aol: + alt: Log masuk dengan OpenID AOL + title: Log masuk dengan AOL + google: + alt: Log masuk dengan OpenID Google + title: Log masuk dengan Google + myopenid: + alt: Log masuk dengan OpenID myOpenID + title: Log masuk dengan myOpenID + openid: + alt: Log masuk dengan URL OpenID + title: Log masuk dengan OpenID + wordpress: + alt: Log masuk dengan OpenID Wordpress + title: Log masuk dengan Wordpress + yahoo: + alt: Log masuk dengan OpenID Yahoo + title: Log masuk dengan Yahoo + password: "Kata laluan:" + register now: Daftar sekarang + remember: "Ingati saya:" + title: Log masuk + to make changes: Untuk membuat perubahan pada data OpenStreetMap, anda mesti mempunyai akaun. + webmaster: pentadbir web + with openid: "Ataupun, sila gunakan OpenID anda untuk log masuk:" + with username: "Sudah ada akaun OpenStreetMap? Sila log masuk dengan nama pengguna dan kata laluan anda:" + logout: + heading: Log keluar dari OpenStreetMap + logout_button: Log keluar + title: Log keluar + lost_password: + email address: "Alamat E-mel:" + heading: Lupa Kata Laluan? + help_text: Isikan alamat e-mel yang anda gunakan untuk mendaftar. Kami akan menge-melkan pautan untuk anda mengeset semula kata laluan anda. + new password button: Set semula kata laluan + notice email cannot find: Maaf, alamat e-mel itu tidak dapat dijumpai. + notice email on way: Kesiannya anda sudah terlupa kata laluan :-( tetapi kami akan menghantar satu pesanan e-mel untuk anda mengesetnya semula tidak lama lagi. + title: Terlupa kata laluan + make_friend: + already_a_friend: Anda sudah berkawan dengan %{name}. + failed: Maaf, %{name} tidak dapat ditambahkan sebagai kawan. + success: "%{name} kini kawan anda." + new: + confirm email address: "Sahkan Alamat E-mel:" + confirm password: "Sahkan Kata Laluan:" + contact_webmaster: Sila hubungi pentadbir web untuk membuat persediaan untuk membuka akaun - kami akan cuba menguruskan permohonan itu secepat mungkin. + continue: Teruskan + display name: "Nama Paparan:" + display name description: Nama pengguna anda yang dipaparkan kepada awam. Anda boleh menukarnya dalam keutamaan anda pada bila-bila masa. + email address: "Alamat E-mel:" + fill_form: Isi borang ini, dan kami akan segera menghantar pesanan e-mel kepada anda untuk mengaktifkan akaun anda. + flash create success message: Terima kasih kerana mendaftar. Kami telah menghantar pesanan pengesahan kepada %{email}. Sebaik sahaja anda mengesahkan akaun anda, anda akan boleh menyunting peta.

    Jika anda menggunakan sistem anti-spam yang menghantar permohonan untuk pengesahan, sila pastikan anda membenarkan webmaster@openstreetmap.org kerana kami tidak dapat membalas sebarang permohonan untuk pengesahan. + heading: Buka Akaun Pengguna + license_agreement: Ketika mengesahkan akaun anda, anda perlu bersetuju dengan terma-terma penyumbang. + no_auto_account_create: Sayang sekali, kami tidak dapat membuka akaun secara automatik untuk anda buat masa ini. + not displayed publicly: Tidak dipaparkan kepada umum (lihat dasar privasi) + openid: "OpenID %{logo}:" + openid association: "

    OpenID anda belum dikaitkan dengan akaun OpenStreetMap.

    \n
      \n
    • Jika anda pengguna baru OpenStreetMap, sila buka akaun baru dengan mengisi borang di bawah.
    • \n
    • \n Jika anda sudah mempunyai akaun, anda boleh log masuk ke dalam\n akaun anda dengan menggunakan nama pengguna dan kata laluan\n anda, kemudian mengaitkan akaun itu dengan OpenID anda dalam\n tetapan pengguna anda.\n
    • \n
    " + openid no password: Dengan OpenID tidak perlunya kata laluan, tetapi sesetengah alat tambahan atau pelayan mungkin masih memerlukannya. + password: "Kata laluan:" + terms accepted: Terima kasih kerana menerima terma-terma penyumbang yang baru! + terms declined: Kami berasa kesal kerana anda memutuskan untuk tidak menerima Terma-Terma Penyumbang yang baru ini. Untuk maklumat lanjut, sila rujuk laman wiki ini. + title: Buka akaun + use openid: Ataupun gunakan OpenID %{logo} untuk log masuk + no_such_user: + body: Maaf, tiada pengguna dengan nama %{user}. Sila semak ejaan anda, atau mungkin pautan yang anda klik itu tidak betul. + heading: Pengguna %{user} tidak wujud + title: Pengguna ini tidak wujud + popup: + friend: Kawan + nearby mapper: Pemeta berdekatan + your location: Lokasi anda + remove_friend: + not_a_friend: "%{name} bukan kawan anda." + success: "%{name} telah dibuang daripada senarai kawan anda." + reset_password: + confirm password: "Sahkan Kata Laluan:" + flash changed: Kata laluan anda telah ditukar. + flash token bad: Token itu tidak dijumpai; sila semak URL-nya. + heading: Set Semula Kata Laluan untuk %{user} + password: "Kata laluan:" + reset: Set Semula Kata Laluan + title: Set semula kata laluan + set_home: + flash success: Lokasi rumah berjaya disimpan + suspended: + body: "

    \n Maaf, akaun anda telah digantung secara automatik disebabkan\n kegiatan yang mencurigakan.\n

    \n

    \n Keputusan ini akan dikaji semula oleh pentadbir sebentar lagi, \n atau anda boleh menghubungi %{webmaster} jika ingin\n membincangkan perkara ini.\n

    " + heading: Akaun Digantung + title: Akaun Digantung + webmaster: pentadbir web + terms: + agree: Setuju + consider_pd: Selain perjanjian di atas, saya sudi menyerahkan sumbangan-sumbangan saya dalam Domain Awam + consider_pd_why: apakah ini? + decline: Tolak + guidance: "Maklumat untuk memudahkan kefahaman istilah-istilah ini: a ringkasan yang boleh dibaca manusia dan beberapa terjemahan tidak formal" + heading: Terma-terma penyumbang + legale_names: + france: Perancis + italy: Itali + rest_of_world: Negara lain + legale_select: "Sila pilih negara kediaman anda:" + read and accept: Sila baca perjanjian yang berikut, kemudian tekan butang setuju untuk mengesahkan bahawa anda menerima terma-terma perjanjian ini bagi sumbangan-sumbangan anda yang sedia ada dan akan datang. + title: Terma-terma penyumbang + you need to accept or decline: Sila baca, kemudian terima atau tolak Terma-Terma Penyumbang yang baru untuk bersambung. + view: + activate_user: aktifkan pengguna ini + add as friend: jadikan kawan + ago: (%{time_in_words_ago} lalu) + block_history: lihat sekatan yang diterima + blocks by me: sekatan oleh saya + blocks on me: sekatan ke atas saya + confirm: Sahkan + confirm_user: sahkan pengguna ini + create_block: sekat pengguna ini + created from: "Dibuat daripada:" + deactivate_user: nyahaktifkan pengguna ini + delete_user: hapuskan pengguna ini + description: Keterangan + diary: diari + edits: suntingan + email address: "Alamat e-mel:" + hide_user: sorokkan pengguna ini + if set location: Jika anda menetapkan lokasi anda, peta yang cantik dan sebagainya akan muncul di sini. Anda boleh menetapkan lokasi rumah anda di laman %{settings_link} anda. + km away: "%{count}km jauhnya" + latest edit: "Suntingan terkini %{ago}:" + m away: "%{count}m jauhnya" + mapper since: "Pemeta sejak:" + moderator_history: lihat sekatan yang dikenakan + my diary: diari saya + my edits: suntingan saya + my settings: tetapan saya + my traces: jejak saya + nearby users: Pengguna lain yang berdekatan + new diary entry: catatan diari baru + no friends: Anda belum mencari kawan lagi. + no nearby users: Belum ada pengguna lain yang mengaku memetakan kawasan berdekatan. + oauth settings: tetapan oauth + remove as friend: gugurkan kawan + role: + administrator: Pengguna ini seorang pentadbir + grant: + administrator: Berikan akses pentadbir + moderator: Berikan akses penyelia + moderator: Pengguna ini seorang penyelia + revoke: + administrator: Tarik balik akses pentadbir + moderator: Tarik balik akses penyelia + send message: hantar pesanan + settings_link_text: tetapan + spam score: "Markah Spam:" + status: "Status:" + traces: jejak + unhide_user: tunjukkan pengguna ini + user location: Lokasi pengguna + your friends: Kawan-kawan anda + user_block: + blocks_by: + empty: "%{name} tidak pernah menyekat sesiapa." + heading: Senarai sekatan oleh %{name} + title: Sekatan oleh %{name} + blocks_on: + empty: "%{name} tidak pernah disekat." + heading: Senarai sekatan ke atas %{name} + title: Sekatan ke atas %{name} + create: + flash: Sekatan dikenakan ke atas pengguna %{name}. + try_contacting: Sila cuba hubungi pengguna sebelum menyekatnya, dan berikan masa yang secukupnya untuk mereka membalas. + try_waiting: Sila berikan masa yang secukupnya kepada pengguna untuk membalas sebelum menyekatnya. + edit: + back: Lihat semua sekatan + heading: Menyunting sekatan ke atas %{name} + needs_view: Perlukan pengguna log masuk sebelum sekatan ini dapat ditarik balik? + period: Berapa lama pengguna ini akan disekat dari API, mulai sekarang. + reason: Sebab %{name} sedang disekat. Sila bertenang dan bertimbang rasa, dan berikan sebanyak mana butiran yang boleh tentang situasi ini. Ingatlah bahawa bukan semua pengguna memahami peristilahan komuniti, jadi cuba gunakan bahasa yang difahami oleh orang keramaian. + show: Lihat sekatan ini + submit: Kemaskinikan sekatan + title: Menyunting sekatan ke atas %{name} + filter: + block_expired: Sekatan ini sudah luput dan tidak boleh disunting. + block_period: Tempoh sekatan mestilah salah satu nilai yang boleh dipilih dalam senarai juntai bawah ini. + not_a_moderator: Anda perlu menjadi penyelia untuk melakukan tindakan itu. + helper: + time_future: Berakhir dalam masa %{time}. + time_past: Berakhir %{time} lalu. + until_login: Aktif sehingga pengguna itu log masuk. + index: + empty: Belum ada sekatan yang dilakukan. + heading: Senarai sekatan pengguna + title: Sekatan terhadap pengguna + model: + non_moderator_revoke: Anda mesti menjadi penyelia untuk menarik balik sekatan. + non_moderator_update: Anda mesti menjadi penyelia untuk membuat atau mengemaskinikan sekatan. + new: + back: Lihat semua sekatan + heading: Mengenakan sekatan ke atas %{name} + needs_view: Pengguna perlu log masuk sebelum sekatan ini dapat ditarik balik + period: Berapa lama pengguna ini akan disekat dari API, mulai sekarang. + reason: Sebab %{name} sedang disekat. Sila bertenang dan bertimbang rasa, dan berikan sebanyak mana butiran yang boleh tentang situasi ini, dan ingat bahawa pesanan ini akan diperlihatkan kepada umum. Ingatlah bahawa bukan semua pengguna memahami peristilahan komuniti, jadi cuba gunakan bahasa yang difahami oleh orang keramaian. + submit: Buat sekatan + title: Mengenakan sekatan ke atas %{name} + tried_contacting: Saya telah menghubungi pengguna itu dan memintanya supaya berhenti. + tried_waiting: Saya telah memberikan masa yang secukupnya kepada pengguna ini untuk membalas perhubungan itu. + not_found: + back: Kembali ke indeks + sorry: Maaf, sekatan pengguna ID %{id} tidak boleh dijumpai. + partial: + confirm: Adakah anda pasti? + creator_name: Pembuat + display_name: Pengguna yang Disekat + edit: Sunting + not_revoked: (tidak ditarik balik) + reason: Sebab sekatan + revoke: Tarik Balik! + revoker_name: Ditarik balik oleh + show: Tunjukkan + status: Status + period: + one: 1 jam + other: "%{count} jam" + revoke: + confirm: Adakah anda benar-benar ingin membuang sekatan ini? + flash: Sekatan ini telah ditarik balik. + heading: Sekatan terhadap %{block_on} sedang ditarik balik oleh %{block_by} + past: Sekatan ini telah tamat %{time} dahulu dan tidak boleh ditarik balik sekarang. + revoke: Tarik Balik! + time_future: Sekatan ini akan berakhir pada %{time}. + title: Sekatan terhadap %{block_on} sedang ditarik balik + show: + back: Lihat semua sekatan + confirm: Adakah anda pasti? + edit: Sunting + heading: "%{block_on} disekat oleh %{block_by}" + needs_view: Pengguna perlu log masuk sebelum sekatan ini dapat ditarik balik. + reason: "Sebab sekatan:" + revoke: Tarik Balik! + revoker: "Penarik balik:" + show: Tunjukkan + status: Status + time_future: Berakhir dalam masa %{time} + time_past: Berakhir %{time} lalu + title: "%{block_on} disekat oleh %{block_by}" + update: + only_creator_can_edit: Hanya penyelia yang mengenakan sekatan ini boleh menyuntingnya. + success: Sekatan dikemaskinikan. + user_role: + filter: + already_has_role: Pengguna ini sudah pun memegang peranan %{role}. + doesnt_have_role: Pengguna ini tidak memegang peranan %{role}. + not_a_role: Rentetan '%{role}' bukan peranan yang sah. + not_an_administrator: Hanya pentadbir yang boleh melakukan pengurusan peranan pengguna. Anda bukan seorang pentadbir. + grant: + are_you_sure: Adakah anda benar-benar ingin memberikan peranan '%{role}' kepada pengguna '%{name}'? + confirm: Sahkan + fail: Peranan '%{role}' tidak dapat diberikan kepada pengguna '%{name}'. Sila semak supaya kedua-dua pengguna dan peranan itu adalah sah. + heading: Sahkan pemberian peranan + title: Sahkan pemberian peranan + revoke: + are_you_sure: Adakah anda benar-benar ingin menarik balik peranan '%{role}' daripada pengguna '%{name}'? + confirm: Sahkan + fail: Peranan '%{role}' tidak dapat ditarik balik daripada pengguna '%{name}'. Sila semak supaya kedua-dua pengguna dan peranan itu adalah sah. + heading: Sahkan penarikan balik peranan + title: Sahkan penarikan balik peranan diff --git a/config/locales/nb.yml b/config/locales/nb.yml index c40049e88..8b6e27cee 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -1,2 +1,1756 @@ -nb: - dummy: dummy +# Messages for Norwegian (bokmål)‬ (‪Norsk (bokmål)‬) +# Exported from translatewiki.net +# Export driver: syck-pecl +# Author: Event +# Author: Gustavf +# Author: Hansfn +# Author: Jon Harald Søby +# Author: Laaknor +# Author: Nghtwlkr +# Author: Oyvind +# Author: The real emj +"nb": + activerecord: + attributes: + diary_comment: + body: Brødtekst + diary_entry: + language: Språk + latitude: Breddegrad + longitude: "Lengdegrad:" + title: Tittel + user: Bruker + friend: + friend: Venn + user: Bruker + message: + body: Brødtekst + recipient: Mottaker + sender: Avsender + title: Tittel + trace: + description: Beskrivelse + latitude: Breddegrad + longitude: "Lengdegrad:" + name: Navn + public: Offentlig + size: Størrelse + user: Bruker + visible: Synlig + user: + active: Aktive + description: Beskrivelse + display_name: Visningsnavn + email: E-post + languages: Språk + pass_crypt: Passord + models: + acl: Tilgangskontrolliste + changeset: Endringssett + changeset_tag: Endringssettmerkelapp + country: Land + diary_comment: Dagbokskommentar + diary_entry: Dagbokoppføring + friend: Venn + language: Språk + message: Melding + node: Node + node_tag: Nodemerkelapp + notifier: Varsling + old_node: Gammel node + old_node_tag: Gammel nodemerkelapp + old_relation: Gammel relasjon + old_relation_member: Gammelt relasjonsmedlem + old_relation_tag: Gammel relasjonsmerkelapp + old_way: Gammelvei + old_way_node: Gammel veinode + old_way_tag: Gammel veimerkelapp + relation: Relasjon + relation_member: Relasjonsmedlem + relation_tag: Relasjonsmerkelapp + session: Økt + trace: Spor + tracepoint: Punkt i spor + tracetag: Spormerkelapp + user: Bruker + user_preference: Brukerinnstillinger + user_token: Brukernøkkel + way: Vei + way_node: Veinode + way_tag: Veimerkelapp + application: + require_cookies: + cookies_needed: Du ser ut til å ha deaktivert informasjonskapsler. Aktiver informasjonskapsler i nettleseren din før du fortsetter. + setup_user_auth: + blocked: Din tilgang til API-et er blokkert. Logg inn på nettstedet for å finne ut mer. + need_to_see_terms: Din tilgang til API-et er midlertidig stoppet. Logg inn på nettsiden for å lese bidragsytervilkårene. Du trenger ikke godta vilkårene, men du må lese dem. + browse: + changeset: + changeset: "Endringssett: %{id}" + changesetxml: XML for endringssett + download: Last ned %{changeset_xml_link} eller %{osmchange_xml_link} + feed: + title: Endringssett %{id} + title_comment: "Endringssett: %{id} - %{comment}" + osmchangexml: osmChange XML + title: Endringssett + changeset_details: + belongs_to: "Tilhører:" + bounding_box: "Avgrensingsboks:" + box: boks + closed_at: "Lukket:" + created_at: "Opprettet:" + has_nodes: + one: "Har følgende %{count} node:" + other: "Har følgende %{count} noder:" + has_relations: + one: "Har følgende %{count} relasjon:" + other: "Har følgende %{count} relasjoner:" + has_ways: + one: "Har følgende %{count} vei:" + other: "Har følgende %{count} veier:" + no_bounding_box: Ingen avgrensingsboks er lagret for dette endringssettet. + show_area_box: Vis boks for område + common_details: + changeset_comment: "Kommentar:" + deleted_at: "Slettet:" + deleted_by: "Slettet av:" + edited_at: "Redigert:" + edited_by: "Redigert av:" + in_changeset: "I endringssett:" + version: "Versjon:" + containing_relation: + entry: Relasjon %{relation_name} + entry_role: Relasjon %{relation_name} (som %{relation_role}) + map: + deleted: Slettet + edit: + area: Rediger område + node: Rediger node + relation: Rediger relasjon + way: Rediger rute + larger: + area: Vis område på større kart + node: Vis node på større kart + relation: Vis relasjon på større kart + way: Vis vei på større kart + loading: Laster... + navigation: + all: + next_changeset_tooltip: Neste endringssett + next_node_tooltip: Neste node + next_relation_tooltip: Neste relasjon + next_way_tooltip: Neste vei + prev_changeset_tooltip: Forrige endringssett + prev_node_tooltip: Forrige node + prev_relation_tooltip: Forrige relasjon + prev_way_tooltip: Forrige vei + user: + name_changeset_tooltip: Vis redigeringer av %{user} + next_changeset_tooltip: Neste redigering av %{user} + prev_changeset_tooltip: Forrige redigering av %{user} + node: + download: "%{download_xml_link}, %{view_history_link} eller %{edit_link}" + download_xml: Last ned XML + edit: rediger + node: Node + node_title: "Node: %{node_name}" + view_history: vis historikk + node_details: + coordinates: "Koordinater:" + part_of: "Del av:" + node_history: + download: "%{download_xml_link} eller %{view_details_link}" + download_xml: Last ned XML + node_history: Nodehistorik + node_history_title: "Nodehistorikk: %{node_name}" + view_details: vis detaljer + not_found: + sorry: Klarte ikke finne %{type}-en med ID %{id}. + type: + changeset: endringssett + node: node + relation: relasjon + way: vei + paging_nav: + of: av + showing_page: Viser side + relation: + download: "%{download_xml_link} eller %{view_history_link}" + download_xml: Last ned XML + relation: Relasjon + relation_title: "Relasjon: %{relation_name}" + view_history: vis historikk + relation_details: + members: "Medlemmer:" + part_of: "Del av:" + relation_history: + download: "%{download_xml_link} eller %{view_details_link}" + download_xml: Last ned XML + relation_history: Relasjonshistorikk + relation_history_title: "Relasjonshistorikk: %{relation_name}" + view_details: vis detaljer + relation_member: + entry_role: "%{type} %{name} som %{role}" + type: + node: Node + relation: Relasjon + way: Vei + start: + manually_select: Velg et annet område manuelt + view_data: Vis data for gjeldende kartvisning + start_rjs: + data_frame_title: Data + data_layer_name: Data + details: Detaljer + drag_a_box: Dra en boks på kartet for å velge et område + edited_by_user_at_timestamp: Redigert av [[user]], [[timestamp]] + hide_areas: Skjul områder + history_for_feature: Historikk for [[feature]] + load_data: Last inn data + loaded_an_area_with_num_features: "Du har lastet et område som inneholder [[num_features]] objekter. Noen nettlesere fungerer ikke ved håndtering av så mye data. Nettlesere fungerer generelt best med mindre enn 100 objekter av gangen: noe mer kan gjøre at nettleseren fryser. Om du er sikker på at du vil se denne informasjonen kan du gjøre det ved å klikke på knappen nedenfor." + loading: Laster... + manually_select: Velg et annet område manuelt + object_list: + api: Hent dette området fra API-et + back: Vis objektliste + details: Detaljer + heading: Objektliste + history: + type: + node: Node [[id]] + way: Vei [[id]] + selected: + type: + node: Node [[id]] + way: Vei [[id]] + type: + node: Node + way: Vei + private_user: privat bruker + show_areas: Vis områder + show_history: Vis historikk + unable_to_load_size: "Klarte ikke laste inn: Avgrensingsboks med størrelse [[bbox_size]] er for stor (må være mindre enn %{max_bbox_size})" + wait: Vent ... + zoom_or_select: Zoom inn eller velg et område av kartet for visning + tag_details: + tags: "Markelapper:" + wiki_link: + key: Wiki-beskrivelsessiden for %{key}-elementet + tag: Wiki-beskrivelsessiden for %{key}=%{value}-elementet + wikipedia_link: Artikkelen %{page} på Wikipedia + timeout: + sorry: Beklager, data for %{type} med id %{id} brukte for lang tid på å hentes. + type: + changeset: endringssett + node: node + relation: relasjon + way: vei + way: + download: "%{download_xml_link}, %{view_history_link} eller %{edit_link}" + download_xml: Last ned XML + edit: rediger + view_history: vis historikk + way: Vei + way_title: "Vei: %{way_name}" + way_details: + also_part_of: + one: også del av veien %{related_ways} + other: også del av veiene %{related_ways} + nodes: "Noder:" + part_of: "Del av:" + way_history: + download: "%{download_xml_link} eller %{view_details_link}" + download_xml: Last ned XML + view_details: vis detaljer + way_history: Veihistorikk + way_history_title: "Veihistorikk: %{way_name}" + changeset: + changeset: + anonymous: Anonym + big_area: (stor) + no_comment: (ingen) + no_edits: (ingen redigeringer) + show_area_box: vis boks for område + still_editing: (redigerer forsatt) + view_changeset_details: Vis detaljer for endringssett + changeset_paging_nav: + next: Neste » + previous: « Forrige + showing_page: Viser side %{page} + changesets: + area: Område + comment: Kommentar + id: ID + saved_at: Lagret + user: Bruker + list: + description: Siste endringer + description_bbox: Endringssett innenfor %{bbox} + description_user: Endringssett av %{user} + description_user_bbox: Endringssett av %{user} innen %{bbox} + heading: Endringssett + heading_bbox: Endringssett + heading_user: Endringssett + heading_user_bbox: Endringssett + title: Endringssett + title_bbox: Endringssett innenfor %{bbox} + title_user: Endringssett av %{user} + title_user_bbox: Endringssett av %{user} innen %{bbox} + timeout: + sorry: Beklager, listen over endringssett som du ba om tok for lang tid å hente. + diary_entry: + diary_comment: + comment_from: Kommentar fra %{link_user}, %{comment_created_at} + confirm: Bekreft + hide_link: Skjul denne kommentaren + diary_entry: + comment_count: + one: 1 kommentar + other: "%{count} kommentarer" + comment_link: Kommenter denne oppføringen + confirm: Bekreft + edit_link: Rediger denne oppføringen + hide_link: Skjul denne oppføringen + posted_by: Skrevet av %{link_user} %{created} på %{language_link} + reply_link: Svar på denne oppføringen + edit: + body: "Kropp:" + language: "Språk:" + latitude: "Breddegrad:" + location: "Posisjon:" + longitude: "Lengdegrad:" + marker_text: Lokasjon for dagbokoppføring + save_button: Lagre + subject: "Emne:" + title: Rediger oppføring i dagboka + use_map_link: bruk kart + feed: + all: + description: Nye oppføringer i dagbøkene til OpenStreetMap-brukere + title: Oppføringer OpenStreetMap-dagboka + language: + description: Nye oppføringer i dagbøkene til OpenStreetMap-brukere på %{language_name} + title: Oppføringer i OpenStreetMap-dagbøker på %{language_name} + user: + description: Nye oppføringer i OpenStreetMap-dagboka til %{user} + title: Oppføringer i OpenStreetMap-dagboka for %{user} + list: + in_language_title: Dagbokoppføringer på %{language} + new: Ny dagbokoppføring + new_title: Skriv en ny oppføring i i din brukerdagbok + newer_entries: Nyere oppføringer + no_entries: Ingen oppføringer i dagboka + older_entries: Eldre oppføringer + recent_entries: "Nye oppføringer i dagboka:" + title: Brukernes dagbøker + user_title: Dagboken for %{user} + location: + edit: Rediger + location: "Posisjon:" + view: Vis + new: + title: Ny dagbokoppføring + no_such_entry: + body: Det er ingen dagbokinnlegg eller kommentar med ID %{id}. Sjekk om du har skrevet feil eller om lenka du klikket er feil. + heading: Ingen oppføring med %{id} + title: Ingen slik dagbokoppføring + no_such_user: + body: Beklager, det finnes ingen bruker med navnet %{user}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. + heading: Brukeren %{user} finnes ikke + title: Ingen bruker funnet + view: + leave_a_comment: Legg igjen en kommentar + login: Logg inn + login_to_leave_a_comment: "%{login_link} for å legge igjen en kommentar" + save_button: Lagre + title: "%{user} sin dagbok | %{title}" + user_title: Dagboken for %{user} + editor: + default: Standard (nåværende %{name}) + potlatch: + description: Potlatch 1 (rediger i nettleseren) + name: Potlatch 1 + potlatch2: + description: Potlatch 2 (rediger i nettleseren) + name: Potlatch 2 + remote: + description: Lokalt installert program (JOSM eller Merkaartor) + name: Lokalt installert program + export: + start: + add_marker: Legg til en markør på kartet + area_to_export: Område som skal eksporteres + embeddable_html: HTML som kan bygges inn + export_button: Eksporter + export_details: Data fra OpenStreetMap er lisensiert under lisensen Creative Commons Navngivelse-Del på samme vilkår 2.0. + format: Format + format_to_export: Format for eksport + image_size: Bildestørrelse + latitude: "Bre:" + licence: Lisens + longitude: "Len:" + manually_select: Velg et annet område manuelt + mapnik_image: Mapnik-bilde + max: maks + options: Valg + osm_xml_data: OpenStreetMap XML-data + osmarender_image: Osmarender-bilde + output: Utdata + paste_html: Lim inn HTML som skal bygges inn i nettsted + scale: Skala + too_large: + body: Dette området er for stort for å bli eksportert som OpenStreetMap XML-data. Zoom inn eller velg et mindre område. + heading: For stort område + zoom: Zoom + start_rjs: + add_marker: Legg til en markør på kartet + change_marker: Endre markørposisjon + click_add_marker: Klikk på kartet for å legge til en markør + drag_a_box: Dra en boks på kartet for å velge et område + export: Eksporter + manually_select: Velg et annet område manuelt + view_larger_map: Vis større kart + geocoder: + description: + title: + geonames: Posisjon fra GeoNames + osm_namefinder: "%{types} fra OpenStreetMap Namefinder" + osm_nominatim: Sted fra OpenStreetMap Nominatim + types: + cities: Byer + places: Steder + towns: Småbyer + description_osm_namefinder: + prefix: "%{distance} %{direction} av %{type}" + direction: + east: øst + north: nord + north_east: nordøst + north_west: nordvest + south: sør + south_east: sørøst + south_west: sørvest + west: vest + distance: + one: omtrent 1 km + other: omtrent %{count} km + zero: mindre enn 1 km + results: + more_results: Flere resultat + no_results: Ingen resultat funnet + search: + title: + ca_postcode: Resultat fra Geocoder.CA + geonames: Resultat fra GeoNames + latlon: Resultat fra Internt + osm_namefinder: Resultat fra OpenStreetMap Namefinder + osm_nominatim: Resultat fra OpenStreetMap Nominatim + uk_postcode: Resultat fra NPEMap / FreeThe Postcode + us_postcode: Resultat fra Geocoder.us + search_osm_namefinder: + prefix: "%{type}" + suffix_parent: "%{suffix} (%{parentdistance} %{parentdirection} av %{parentname})" + suffix_place: ", %{distance} %{direction} av %{placename}" + search_osm_nominatim: + prefix: + amenity: + airport: Flyplass + arts_centre: Kunstsenter + atm: Minibank + auditorium: Auditorium + bank: Bank + bar: Bar + bench: Benk + bicycle_parking: Sykkelparkering + bicycle_rental: Sykkelutleie + brothel: Bordell + bureau_de_change: Vekslingskontor + bus_station: Busstasjon + cafe: Kafé + car_rental: Bilutleie + car_sharing: Bildeling + car_wash: Bilvask + casino: Kasino + cinema: Kino + clinic: Klinikk + club: Klubb + college: Høyskole + community_centre: Samfunnshus + courthouse: Rettsbygning + crematorium: Krematorium + dentist: Tannlege + doctors: Leger + dormitory: Sovesal + drinking_water: Drikkevann + driving_school: Kjøreskole + embassy: Ambassade + emergency_phone: Nødtelefon + fast_food: Hurtigmat + ferry_terminal: Ferjeterminal + fire_hydrant: Brannhydrant + fire_station: Brannstasjon + fountain: Fontene + fuel: Drivstoff + grave_yard: Gravlund + gym: Treningssenter + hall: Spisesal + health_centre: Helsesenter + hospital: Sykehus + hotel: Hotell + hunting_stand: Jaktbod + ice_cream: Iskrem + kindergarten: Barnehage + library: Bibliotek + market: Marked + marketplace: Markedsplass + mountain_rescue: Fjellredning + nightclub: Nattklubb + nursery: Førskole + nursing_home: Pleiehjem + office: Kontor + park: Park + parking: Parkeringsplass + pharmacy: Apotek + place_of_worship: Tilbedelsesplass + police: Politi + post_box: Postboks + post_office: Postkontor + preschool: Førskole + prison: Fengsel + pub: Pub + public_building: Offentlig bygning + public_market: Offentlig marked + reception_area: Oppsamlingsområde + recycling: Resirkuleringspunkt + restaurant: Restaurant + retirement_home: Gamlehjem + sauna: Sauna + school: Skole + shelter: Tilfluktsrom + shop: Butikk + shopping: Handel + social_club: Sosial klubb + studio: Studio + supermarket: Supermarked + taxi: Drosje + telephone: Offentlig telefon + theatre: Teater + toilets: Toaletter + townhall: Rådhus + university: Universitet + vending_machine: Vareautomat + veterinary: Veterinærklinikk + village_hall: Forsamlingshus + waste_basket: Søppelkasse + wifi: WiFi-tilgangspunkt + youth_centre: Ungdomssenter + boundary: + administrative: Administrativ grense + building: + apartments: Leilighetsblokk + block: Bygningsblokk + bunker: Bunker + chapel: Kapell + church: Kirke + city_hall: Rådhus + commercial: Kommersiell bygning + dormitory: Sovesal + entrance: Bygningsinngang + faculty: Fakultetsbygning + farm: Gårdsbygg + flats: Leiligheter + garage: Garasje + hall: Spisesal + hospital: Sykehusbygg + hotel: Hotell + house: Hus + industrial: Industribygg + office: Kontorbygg + public: Offentlig bygg + residential: Boligbygg + retail: Detaljsalgbygg + school: Skolebygg + shop: Butikk + stadium: Stadion + store: Butikk + terrace: Terrasse + tower: Tårn + train_station: Jernbanestasjon + university: Universitetsbygg + highway: + bridleway: Ridevei + bus_guideway: Ledet bussfelt + bus_stop: Busstopp + byway: Stikkvei + construction: Motorvei under konstruksjon + cycleway: Sykkelsti + distance_marker: Avstandsmarkør + emergency_access_point: Nødtilgangspunkt + footway: Gangsti + ford: Vadested + gate: Bom + living_street: Gatetun + minor: Mindre vei + motorway: Motorvei + motorway_junction: Motorveikryss + motorway_link: Vei til motorvei + path: Sti + pedestrian: Gangvei + platform: Perrong + primary: Primær vei + primary_link: Primær vei + raceway: Racerbane + residential: Bolig + road: Vei + secondary: Sekundær vei + secondary_link: Sekundær vei + service: Tjenestevei + services: Motorveitjenester + steps: Trapper + stile: Stige + tertiary: Tertiær vei + track: Sti + trail: Sti + trunk: Hovedvei + trunk_link: Hovedvei + unclassified: Uklassifisert vei + unsurfaced: Vei uten dekke + historic: + archaeological_site: Arkeologisk plass + battlefield: Slagmark + boundary_stone: Grensestein + building: Bygning + castle: Slott + church: Kirke + house: Hus + icon: Ikon + manor: Herregård + memorial: Minne + mine: Gruve + monument: Monument + museum: Museum + ruins: Ruiner + tower: Tårn + wayside_cross: Veikant kors + wayside_shrine: Veikant alter + wreck: Vrak + landuse: + allotments: Kolonihager + basin: Elveområde + brownfield: Tidligere industriområde + cemetery: Gravplass + commercial: Kommersielt område + conservation: Fredet + construction: Kontruksjon + farm: Gård + farmland: Jordbruksland + farmyard: Gårdstun + forest: Skog + grass: Gress + greenfield: Ikke-utviklet område + industrial: Industriområde + landfill: Landfylling + meadow: Eng + military: Militært område + mine: Gruve + mountain: Fjell + nature_reserve: Naturreservat + park: Park + piste: Løype + plaza: Torg + quarry: Steinbrudd + railway: Jernbane + recreation_ground: Idrettsplass + reservoir: Reservoar + residential: Boligområde + retail: Detaljsalg + village_green: landsbypark + vineyard: Vingård + wetland: Våtland + wood: Skog + leisure: + beach_resort: Strandsted + common: Allmenning + fishing: Fiskeområde + garden: Hage + golf_course: Golfbane + ice_rink: Skøytebane + marina: Båthavn + miniature_golf: Minigolf + nature_reserve: Naturreservat + park: Park + pitch: Sportsarena + playground: Lekeplass + recreation_ground: Idrettsplass + slipway: Slipp + sports_centre: Sportssenter + stadium: Stadion + swimming_pool: Svømmebaseng + track: Løpebane + water_park: Vannpark + natural: + bay: Bukt + beach: Strand + cape: Nes + cave_entrance: Huleinngang + channel: Kanal + cliff: Klippe + coastline: Kystlinje + crater: Krater + feature: Egenskap + fell: Fjellskrent + fjord: Fjord + geyser: Geysir + glacier: Isbre + heath: Vidde + hill: Ås + island: Øy + land: Land + marsh: Sump + moor: Myr + mud: Gjørme + peak: Topp + point: Punkt + reef: Rev + ridge: Rygg + river: Elv + rock: Stein + scree: Ur + scrub: Kratt + shoal: Grunning + spring: Kilde + strait: Stred + tree: Tre + valley: Dal + volcano: Vulkan + water: Vann + wetland: Våtmark + wetlands: Våtland + wood: Skog + place: + airport: Flyplass + city: By + country: Land + county: Fylke + farm: Gård + hamlet: Grend + house: Hus + houses: Hus + island: Øy + islet: Holme + locality: Plass + moor: Myr + municipality: Kommune + postcode: Postnummer + region: Område + sea: Hav + state: Delstat + subdivision: Underavdeling + suburb: Forstad + town: Tettsted + unincorporated_area: Kommunefritt område + village: Landsby + railway: + abandoned: Forlatt jernbane + construction: Jernbane under konstruksjon + disused: Nedlagt jernbane + disused_station: Nedlagt jernbanestasjon + funicular: Kabelbane + halt: Togstopp + historic_station: Historisk jernbanestasjon + junction: Jernbanekryss + level_crossing: Planovergang + light_rail: Bybane + monorail: Enskinnebane + narrow_gauge: Smalspor jernbane + platform: Jernbaneperrong + preserved: Bevart jernbane + spur: Jernbaneforgrening + station: Jernbanestasjon + subway: T-banestasjon + subway_entrance: T-baneinngang + switch: Sporveksel + tram: Sporvei + tram_stop: Trikkestopp + yard: Skiftetomt + shop: + alcohol: Utenfor lisens + apparel: Klesbutikk + art: Kunstbutikk + bakery: Bakeri + beauty: Skjønnhetssalong + beverages: Drikkevarerbutikk + bicycle: Sykkelbutikk + books: Bokhandel + butcher: Slakter + car: Bilbutikk + car_dealer: Bilforhandler + car_parts: Bildeler + car_repair: Bilverksted + carpet: Teppebutikk + charity: Veldedighetsbutikk + chemist: Kjemiker + clothes: Klesbutikk + computer: Databutikk + confectionery: Konditori + convenience: Nærbutikk + copyshop: Kopieringsbutikk + cosmetics: Kosmetikkforretning + department_store: Varehus + discount: Tilbudsbutikk + doityourself: Gjør-det-selv + drugstore: Apotek + dry_cleaning: Renseri + electronics: Elektronikkforretning + estate_agent: Eiendomsmegler + farm: Gårdsbutikk + fashion: Motebutikk + fish: Fiskebutikk + florist: Blomsterbutikk + food: Matbutikk + funeral_directors: Begravelsesforretning + furniture: Møbler + gallery: Galleri + garden_centre: Hagesenter + general: Landhandel + gift: Gavebutikk + greengrocer: Grønnsakshandel + grocery: Dagligvarebutikk + hairdresser: Frisør + hardware: Jernvarehandel + hifi: Hi-Fi + insurance: Forsikring + jewelry: Gullsmed + kiosk: Kiosk + laundry: Vaskeri + mall: Kjøpesenter + market: Marked + mobile_phone: Mobiltelefonbutikk + motorcycle: Motorsykkelbutikk + music: Musikkbutikk + newsagent: Nyhetsbyrå + optician: Optiker + organic: Organisk matbutikk + outdoor: Utendørs butikk + pet: Dyrebutikk + photo: Fotobutikk + salon: Salong + shoes: Skobutikk + shopping_centre: Kjøpesenter + sports: Sportsbutikk + stationery: Papirbutikk + supermarket: Supermarked + toys: Lekebutikk + travel_agency: Reisebyrå + video: Videobutikk + wine: Utenfor lisens + tourism: + alpine_hut: Fjellhytte + artwork: Kunstverk + attraction: Attraksjon + bed_and_breakfast: Bed and Breakfast + cabin: Hytte + camp_site: Teltplass + caravan_site: Campingplass + chalet: Fjellhytte + guest_house: Gjestehus + hostel: Vandrerhjem + hotel: Hotell + information: Informasjon + lean_to: Lenne inntil + motel: Motell + museum: Museum + picnic_site: Piknikplass + theme_park: Fornøyelsespark + valley: Dal + viewpoint: Utsiktspunkt + zoo: Dyrepark + waterway: + boatyard: Båthan + canal: Kanal + connector: Vannveiforbindelse + dam: Demning + derelict_canal: Nedlagt kanal + ditch: Grøft + dock: Dokk + drain: Avløp + lock: Sluse + lock_gate: Sluseport + mineral_spring: Mineralkilde + mooring: Fortøyning + rapids: Stryk + river: Elv + riverbank: Elvebredd + stream: Strøm + wadi: Elveleie + water_point: Vannpunkt + waterfall: Foss + weir: Overløpskant \ + prefix_format: "%{name}" + javascripts: + map: + base: + cycle_map: Sykkelkart + mapnik: Mapnik + mapquest: MapQuest Open + osmarender: Osmarender + transport_map: Transport-kart + overlays: + maplint: Maplint + site: + edit_disabled_tooltip: Zoom inn for å redigere kartet + edit_tooltip: Rediger kartet + edit_zoom_alert: Du må zoome inn for å redigere kartet + history_disabled_tooltip: Zoom inn for å vise redigeringer i dette området + history_tooltip: Vis redigeringer for dette området + history_zoom_alert: Du må zoome inn for å vise redigeringer i dette området + layouts: + community_blogs: Fellesskapsblogger + community_blogs_title: Blogger fra medlemmene i OpenStreetMap-felleskapet + copyright: Opphavsrett & lisens + documentation: Dokumentasjon + documentation_title: Dokumentasjon for prosjektet + donate: Støtt OpenStreetMap ved %{link} til Hardware Upgrade Fund (et fond for maskinvareoppgraderinger). + donate_link_text: donering + edit: Rediger + edit_with: Rediger med %{editor} + export: Eksporter + export_tooltip: Eksporter kartdata + foundation: Stiftelse + foundation_title: OpenStreetMap stiftelsen + gps_traces: GPS-spor + gps_traces_tooltip: Behandle GPS-spor + help: Hjelp + help_centre: Brukerstøtte + help_title: Hjelpenettsted for prosjektet + history: Historikk + home: hjem + home_tooltip: Gå til hjemmeposisjon + inbox: innboks (%{count}) + inbox_tooltip: + one: Din innboks inneholder 1 ulest melding + other: Din innboks inneholder %{count} uleste meldinger + zero: Din innboks inneholder ingen uleste meldinger + intro_1: OpenStreetMap er et fritt redigerbart kart over hele jorda. Det er lagd av folk som deg. + intro_2: OpenStreetMap gjør det mulig å vise, redigere og bruke geografiske data på en samarbeidende måte fra hvor som helst på jorda. + intro_3: OpenStreetMaps sponses av %{ucl}, %{ic} og %{bytemark}. Andre sponsorer av prosjektet er oppført i %{partners}. + intro_3_ic: Imperial College London + intro_3_partners: wiki + license: + title: Data fra OpenStreetMap er lisensiert under lisensen Creative Commons Navngivelse-Del på like vilkår 2.0 Generisk + log_in: logg inn + log_in_tooltip: Logg inn med en eksisterende konto + logo: + alt_text: OpenStreetMap-logo + logout: logg ut + logout_tooltip: Logg ut + make_a_donation: + text: Doner + title: Støtt OpenStreetMap med en donasjon + osm_offline: OpenStreetMap databasen er for øyeblikket utilgjengelig mens essensielt vedlikeholdsarbeid utføres. + osm_read_only: OpenStreetMap databasen er for øyeblikket i kun-lese-modus mens essensielt vedlikeholdsarbeid utføres. + project_name: + h1: OpenStreetMap + title: OpenStreetMap + sign_up: registrer + sign_up_tooltip: Opprett en konto for redigering + sotm2011: Kom til 2011 OpenStreetMap-konferansen, «Kartets tilstand», 11.-9. september i Denver! + tag_line: Fritt Wiki-verdenskart + user_diaries: Brukerdagbok + user_diaries_tooltip: Vis brukerens dagbok + view: Vis + view_tooltip: Vis kartet + welcome_user: Velkommen, %{user_link} + welcome_user_link_tooltip: Din brukerside + wiki: Wiki + wiki_title: Wikinettsted for prosjektet + license_page: + foreign: + english_link: den engelske originalen + text: I tilfellet av en konflikt mellom denne oversatte siden og %{english_original_link} har den engelske presedens + title: Om denne oversettelsen + legal_babble: "

    Opphavsrett og lisenser

    \n

    \n OpenStreetMap er åpne data, lisensiert under Creative\n Commons Navngivelse-DelPåSammeVilkår 2.0 (CC-BY-SA).\n

    \n

    \n Du er fri til å kopiere, distribuere, overføre og tilpasse våre kart og data, så lenge du krediterer OpenStreetMap og dens\n bidragsytere. Hvis du endrer eller bygger på våre kart eller data, kan du bare distribuere resultatet under samme lisens. \n Den fulle juridiske\n koden forklarer rettighetene og ansvaret.\n

    \n\n

    Hvordan kreditere OpenStreetMap

    \n

    \n Hvis du bruker OpenStreetMap kartbilder, ber vi om at din kreditering minst inneholder \n «© OpenStreetMap-bidragsytere, CC-BY-SA». Hvis du bare bruker kartdata, ber vi om \n «Kartdata © OpenStreetMap-bidragsytere, CC-BY-SA».\n

    \n

    \n Der det er mulig, bør OpenStreetMap bli lenket til http://www.openstreetmap.org/\n og CC-BY-SA til http://creativecommons.org/licenses/by-sa/2.0/. Hvis\n du bruker et medium der lenker ikke er mulig (f.eks. i utskrevne arbeid), foreslår vi at du henviser leserne til\n www.openstreetmap.org (kanskje ved å utvide 'OpenStreetMap' til denne fullstendige adressen) og til\n www.creativecommons.org.\n

    \n\n

    Finn ut mer

    \n

    \n Les mer om hvordan du bruker våre data i den juridiske\n FAQ-en.\n

    \n

    \n OSM-bidragsytere blir påminnet å aldri legge til data fra opphavsrettsbeskyttede kilder (f.eks. Google Maps eller utskrevne kart) uten\n uttrykkelig tillatelse fra rettighetshavere.\n

    \n

    \n Selv om OpenStreetMap er åpne data kan vi ikke gi et\n gratis kart-API til tredjepartsutviklere.\n\n Se våre retningslinjer for bruken av API-et,\n kartbilder (Tiles)\n og Nominatim.\n

    \n\n

    VÃ¥re bidragsytere

    \n

    \n Vår CC-BY-SA-lisens krever at du «gir den opprinnelige forfatteren rimelig kreditt til mediet eller måten du\n benytter». Individuelle OSM-kartleggere krever ikke en kreditering utover «OpenStreetMap bidragsytere»,\n men der data fra et nasjonal kartleggingsbyrå eller fra en annen stor kilde er blitt inkludert inne i\n OpenStreetMap, kan det være fornuftig å kreditere dem ved direkte\n reprodusering av deres kreditt eller ved å linke til det på denne siden.\n

    \n\n\n\n
      \n
    • Australia: Inneholder forstaddata basert\n pÃ¥ Australian Bureau of Statistics data.
    • \n
    • Canada: Inneholder data fra\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), og StatCan (Geography Division,\n Statistics Canada).
    • \n
    • Frankrike: Inneholder data hentet fra\n Direction Générale des Impôts.
    • \n
    • New Zealand: Inneholder data hentet fra\n Land Information New Zealand. Crown Copyright reservert.
    • \n
    • Polen: Inneholder data fra UMP-pcPL maps. Copyright\n UMP-pcPL bidragsytere.
    • \n
    • Storbritannia: Inneholder Ordnance\n Survey data © Crown copyright og database-rettigheter\n 2010.
    • \n
    • Østerrike: Inneholder data hentet fra\n Stadt Wien under\n CC-BY.
    • \n
    \n\n

    \n Inkludering av data i OpenStreetMap innebærer ikke at den opprinnelige\n dataleverandøren støtter OpenStreetMap, gir noen garanti eller\n godtar noe erstatningsansvar.\n

    " + native: + mapping_link: start kartlegging + native_link: Norsk versjon + text: Du ser den engelske versjonen av opphavsrettssiden. Du kan gå tilbake til den %{native_link} av denne siden, eller du kan stoppe å lese om opphavsrett og %{mapping_link}. + title: Om denne siden + message: + delete: + deleted: Melding slettet + inbox: + date: Dato + from: Fra + my_inbox: Min innboks + no_messages_yet: Du har ingen meldinger enda. Kanskje du kan prøve å komme i kontakt med %{people_mapping_nearby_link}? + outbox: utboks + people_mapping_nearby: folk i nærheten som lager kart + subject: Emne + title: Innboks + you_have: Du har %{new_count} ny meldinger og %{old_count} gamle meldinger + mark: + as_read: Melding markert som lest + as_unread: Melding markert som ulest + message_summary: + delete_button: Slett + read_button: Marker som lest + reply_button: Svar + unread_button: Marker som ulest + new: + back_to_inbox: Tilbake til innboks + body: Kropp + limit_exceeded: Du har sendt mange meldinger i det siste. Vent en stind før du prøver å sende flere. + message_sent: Melding sendt + send_button: Send + send_message_to: Send en ny melding til %{name} + subject: Emne + title: Send melding + no_such_message: + body: Det er ingen melding med den ID-en. + heading: Ingen melding funnet + title: Ingen melding funnet + no_such_user: + body: Det er ingen bruker med det navnet. + heading: Ingen bruker funnet + title: Ingen bruker funnet + outbox: + date: Dato + inbox: innboks + my_inbox: Min %{inbox_link} + no_sent_messages: folk i nærheten som lager kart + outbox: utboks + people_mapping_nearby: folk i nærheten som lager kart + subject: Emne + title: Utboks + to: Til + you_have_sent_messages: Du har sendt %{count} meldinger + read: + back_to_inbox: Tilbake til innboks + back_to_outbox: Tilbake til utboks + date: Dato + from: Fra + reading_your_messages: Leser dine meldinger + reading_your_sent_messages: Les dine sendte meldinger + reply_button: Svar + subject: Emne + title: Les melding + to: Til + unread_button: Marker som ulest + wrong_user: Du er logget inn som «%{user}», men meldingen du ønsker å lese ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å lese. + reply: + wrong_user: Du er logget inn som «%{user}», men meldingen du ønsker å svare på ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å svare. + sent_message_summary: + delete_button: Slett + notifier: + diary_comment_notification: + footer: Du kan også lese kommentaren på %{readurl} og du kan kommentere på %{commenturl} eller svare på %{replyurl} + header: "%{from_user} har kommentert på ditt siste OpenStreetMap-dagbokinnlegg med emnet %{subject}:" + hi: Hei %{to_user}, + subject: "[OpenStreetMap] %{user} kommenterte på en oppføring i dagboka di" + email_confirm: + subject: "[OpenStreetMap] Bekreft din e-postadresse" + email_confirm_html: + click_the_link: Om dette er deg, vennligst klikk på lenken under for å bekrefte endringen. + greeting: Hei, + hopefully_you: Noen (forhåpentligvis deg) ønsker å endre e-postadressen for %{server_url} til %{new_address}. + email_confirm_plain: + click_the_link: Hvis det er deg, klikk lenka nedenfor for å bekrefte endringen. + greeting: Hei, + hopefully_you_1: Noen (forhåpentligvis deg) ønsker å endre e-postadressen for + hopefully_you_2: "%{server_url} til %{new_address}." + friend_notification: + befriend_them: Du kan også legge dem til som venn på %{befriendurl}. + had_added_you: "%{user} har lagt deg til som venn på OpenStreetMap." + see_their_profile: Du kan se profilen deres på %{userurl}. + subject: "[OpenStreetMap] %{user} la deg til som en venn" + gpx_notification: + and_no_tags: og ingen merkelapper. + and_the_tags: "og følgende merkelapper:" + failure: + failed_to_import: "klarte ikke importere. Her er feilen:" + more_info_1: Mer informasjon om feil ved import av GPX og hvordan du kan unngå det + more_info_2: "de kan bli funnet hos:" + subject: "[OpenStreetMap] Feil under import av GPX" + greeting: Hei, + success: + loaded_successfully: lastet med %{trace_points} av %{possible_points} mulige punkter. + subject: "[OpenStreetMap] Vellykket import av GPX" + with_description: med beskrivelse + your_gpx_file: Det ser ut som GPX-filen din + lost_password: + subject: "[OpenStreetMap] Forespørsel om nullstilling av passord" + lost_password_html: + click_the_link: Hvis det er deg, klikk lenka nedenfor for å nullstille passordet ditt. + greeting: Hei, + hopefully_you: Noen (forhåpentligvis deg) har bedt å nullstille passordet for OpenStreetMap-kontoen knyttet til denne e-postadressen. + lost_password_plain: + click_the_link: Om dette er deg, vennligst klikk på lenken under for å tilbakestille passordet. + greeting: Hei, + hopefully_you_1: Noen (muligens deg) har bedt om å tilbakestille passordet på denne + hopefully_you_2: e-postadressser for openstreetmap.org-konto. + message_notification: + footer1: Du kan også lese meldingen på %{readurl} + footer2: og du kan svare til %{replyurl} + header: "%{from_user} har sendt deg en melding gjennom OpenStreetMap med emnet %{subject}:" + hi: Hei %{to_user}, + subject_header: "[OpenStreetMap] %{subject}" + signup_confirm: + subject: "[OpenStreetMap] Bekreft din e-postadresse" + signup_confirm_html: + ask_questions: Du kan stille spørsmål du har om OpenStreetMap på vårt spørsmål og svar-nettsted. + click_the_link: Hvis dette er deg, så er du velkommen! Klikke lenka nedenfor for å bekrefte kontoen og les videre for mer informasjon om OpenStreetMap + current_user: En liste over nåværende brukere i kategorier, basert på hvor i verden de er, er tilgjengelig fra Category:Users_by_geographical_region. + get_reading: Start å lese om OpenStreetMap på wikien, få med deg de siste nyhetene via OpenStreetMap-bloggen eller Twitter. Eller bla gjennom OpenStreetMaps grunnlegger Steve Coasts OpenGeoData-blogg for hele historien til prosjektet, som også har engelske podkaster du kan lytte til. + greeting: Hei der! + hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på + introductory_video: Du kan se en %{introductory_video_link}. + more_videos: Det er %{more_videos_link}. + more_videos_here: flere videoer her + user_wiki_page: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. + video_to_openstreetmap: introduksjonsvideo til OpenStreetMap + wiki_signup: Du vil kanskje melde deg inn i OpenStreetMap-wikien også. + signup_confirm_plain: + ask_questions: "Du kan stille spørsmål du har om OpenStreetMap på vårt spørsmål og svar-nettsted:" + blog_and_twitter: "Få med deg de siste nyhetene gjennom OpenStreetMap-bloggen eller Twitter:" + click_the_link_1: Om dette er deg, velkommen! Vennligst klikk på lenken under for å bekrefte din + click_the_link_2: konto og les videre for mer informasjon om OpenStreetMap. + current_user_1: En liste over nåværende brukere i kategorier, basert på hvor i verden + current_user_2: "de er, er tilgjengelig fra:" + greeting: Hei der! + hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på + introductory_video: "Du kan se en introduksjonsvideo for OpenStreetMap her:" + more_videos: "Det er flere videoer her:" + opengeodata: "OpenGeoData.org er bloggen til OpenStreetMap-grunnlegger Steve Coast, og den har podcast-er også:" + the_wiki: "Les mer om OpenStreetMap på wikien:" + user_wiki_1: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer + user_wiki_2: kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. + wiki_signup: "Du vil kanskje også melde deg inn i OpenStreetMap-wikien på:" + oauth: + oauthorize: + allow_read_gpx: les dine private GPS-spor. + allow_read_prefs: les brukerinnstillingene dine. + allow_to: "Tillat klientprogrammet å gjøre:" + allow_write_api: endre kartet. + allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. + allow_write_gpx: last opp GPS-spor. + allow_write_prefs: Innstillingene ble lagret. + request_access: Applikasjonen %{app_name} ber om tilgang til din konto, %{user}. Sjekk om du vil at applikasjonen skal ha følgende muligheter. Du kan velge så mange eller få du vil. + revoke: + flash: Du slettet nøkkelen for %{application} + oauth_clients: + create: + flash: Vellykket registrering av informasjonen + destroy: + flash: Ødelagt klientapplikasjonsregistreringen + edit: + submit: Rediger + title: Rediger ditt programvare + form: + allow_read_gpx: les deres private GPS-spor. + allow_read_prefs: les brukerinnstillingene deres. + allow_write_api: endre kartet. + allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. + allow_write_gpx: last opp GPS-spor. + allow_write_prefs: endre brukerinnstillingene deres. + callback_url: "URL for tilbakekall:" + name: Navn + requests: "Be om følgende tillatelser fra brukeren:" + required: Påkrevet + support_url: Støtte-URL + url: URL til hovedapplikasjonen + index: + application: Applikasjonsnavn + issued_at: Utstedt + list_tokens: "Følgende nøkler er utstedt til programmer i ditt navn:" + my_apps: Mine klientapplikasjoner + my_tokens: Mine autoriserte applikasjoner + no_apps: Har du et program som du vil registrere for bruk med oss gjennom %{oauth}-standarden? Da må du først registrere ditt nettprogram før det kan gjøre OAuth-forespørsler til denne tjenesten. + register_new: Registrer din applikasjon + registered_apps: "Du har registrert følgende klientapplikasjoner:" + revoke: Tilbakekall! + title: Mine OAuth-detaljer + new: + submit: Registrer + title: Registrer en ny applikasjon + not_found: + sorry: Klarte ikke finne den %{type}-en. + show: + access_url: URL for tilgangensnøkkel + allow_read_gpx: les deres private GPS-spor. + allow_read_prefs: les brukerinnstillingene deres. + allow_write_api: endre kartet. + allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. + allow_write_gpx: last opp GPS-spor. + allow_write_prefs: endre brukerinnstillingene deres. + authorize_url: "Godkjenn URL:" + edit: Rediger detaljer + key: "Forbrukernøkkel:" + requests: "Ber om følgende tillatelser fra brukeren:" + secret: "Forbrukerhemmelighet:" + support_notice: Vi støtter HMAC-SHA1 (anbefalt) så vel som ren tekst i ssl-modus. + title: OAuth-detaljer for %{app_name} + url: "URL for forespørelsnøkkel:" + update: + flash: Oppdaterte klientinformasjonen + site: + edit: + anon_edits_link_text: Finn ut hvorfor dette er tilfellet. + flash_player_required: Du trenger en Flash-spiller for å kunne bruke Potlatch, Flasheditoren for OpenStreetMap. Du kan laste ned Flash Player fra Adobe.com. Flere andre alternativ er også tilgjengelig for redigering av OpenStreetMap. + no_iframe_support: Nettleseren din støtter ikke HTML iframes som er nødvendig for denne egenskapen. + not_public: Du har ikke satt dine redigeringer til å være offentlige. + not_public_description: Du kan ikke lenger redigere kartet om du ikke gjør det. Du kan gjøre dine redigeringer offentlige fra din %{user_page}. + potlatch2_not_configured: Potlatch 2 har ikke blitt konfigurert - se http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 for mer informasjon + potlatch2_unsaved_changes: Du har endringer som ikke er lagret. (For å lagre i Potlatch 2, må du klikke lagre.) + potlatch_unsaved_changes: Du har ulagrede endringer. (For å lagre i Potlatch, må du fjerne markeringen av gjeldende vei eller punkt hvis du redigerer i live-modues eller klikke lagre hvis du har en lagreknapp.) + user_page_link: brukerside + index: + js_1: Du har en nettleser som ikke støtter JavaScript eller så har du slått av JavaScript. + js_2: OpenStreetMap bruker JavaScript på kartsidene. + js_3: Hvis du ikke kan slå på JavaScript, så kan du prøve de de statiske Tiles@Home-kartsidene. + license: + license_name: Creative Commons Navngivelse-Del på like vilkår 2.0 + notice: Lisensiert under lisensen %{license_name} av %{project_name} og dets bidragsytere. + project_name: OpenStreetMap-prosjekt + permalink: Permanent lenke + remote_failed: Klarte ikke redigere - forsikre deg at JOSM eller Merkaartor er lastet og fjernkontrollvalget er aktivert + shortlink: Kort lenke + key: + map_key: Kartforklaring + map_key_tooltip: Forklaring for kartet + table: + entry: + admin: Administrativ grense + allotments: Kolonihager + apron: + - terminal + - terminal + bridge: Sort kant = bru + bridleway: Ridevei + brownfield: Tidligere industriområde + building: Viktig bygning + byway: Stikkvei + cable: + - Kabelvogn + - stolheis + cemetery: Gravplass + centre: Sportssenter + commercial: Kommersielt område + common: + - Vanlig + - eng + construction: Veier under konstruksjon + cycleway: Sykkelvei + destination: Destinasjonstilgang + farm: Gård + footway: Gangvei + forest: Skog + golf: Golfbane + heathland: Heilandskap + industrial: Industriområde + lake: + - Innsjø + - reservoar + military: Militært område + motorway: Motorvei + park: Park + permissive: Betinget tilgang + pitch: Sportsarena + primary: Primær vei + private: Privat tilgang + rail: Jernbane + reserve: Naturreservat + resident: Boligområde + retail: Detaljsalgområde + runway: + - Flystripe + - taksebane + school: + - Skole + - universitet + secondary: Sekundær vei + station: Jernbanestasjon + subway: Undergrunnsbane + summit: + - Topp + - fjelltopp + tourist: Turistattraksjon + track: Spor + tram: + - Bybane + - trikk + trunk: Hovedvei + tunnel: Streket kant = tunnel + unclassified: Uklassifisert vei + unsurfaced: Vei uten dekke + wood: Ved + search: + search: Søk + search_help: "Eksempler: 'Lindesnes', 'Karl Johans gate', 'Sør-Trøndelag' og flere ..." + submit_text: Gå + where_am_i: Hvor er jeg? + where_am_i_title: Bruke søkemotoren til å beskrive gjeldende lokasjon. + sidebar: + close: Lukk + search_results: Søkeresultater + time: + formats: + friendly: "%e %B %Y kl. %H:%M" + trace: + create: + trace_uploaded: Din GPX-fil er last opp og venter på å bli satt inn i databasen. Dette skjer vanligvis innen en halvtime og en e-post blir sendt til deg når det er gjort. + upload_trace: Last opp GPS-spor + delete: + scheduled_for_deletion: Spor planlagt slettet + edit: + description: "Beskrivelse:" + download: last ned + edit: rediger + filename: "Filnavn:" + heading: Redigerer spor %{name} + map: kart + owner: "Eier:" + points: "Punkter:" + save_button: Lagre endringer + start_coord: "Startkoordinat:" + tags: "Markelapper:" + tags_help: kommaseparert + title: Redigerer spor %{name} + uploaded_at: "Lastet opp:" + visibility: "Synlighet:" + visibility_help: hva betyr dette? + list: + public_traces: Offentlig GPS-spor + public_traces_from: Offentlige GPS-spor fra %{user} + tagged_with: merket med %{tags} + your_traces: Dine GPS-spor + make_public: + made_public: Spor gjort offentlig + no_such_user: + body: Beklager, det finnes ingen bruker med navnet %{user}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. + heading: Brukeren %{user} finnes ikke + title: Ingen bruker funnet + offline: + heading: GPX-lagring er utilgjengelig + message: Systemet for opplasting og lagring av GPX-filer er ikke tilgjengelig for øyeblikket. + offline_warning: + message: Systemet for opplasting av GPX-filer er ikke tilgjengelig for øyeblikket. + trace: + ago: "%{time_in_words_ago} siden" + by: av + count_points: "%{count} punkter" + edit: rediger + edit_map: Rediger kart + identifiable: IDENTIFISERBAR + in: i + map: kart + more: mer + pending: VENTENDE + private: PRIVAT + public: OFFENTLIG + trace_details: Vis detaljer for spor + trackable: SPORBAR + view_map: Vis kart + trace_form: + description: "Beskrivelse:" + help: Hjelp + tags: "Merkelapper:" + tags_help: kommaseparert + upload_button: Last opp + upload_gpx: "Last opp GPX-fil:" + visibility: "Synlighet:" + visibility_help: hva betyr dette? + trace_header: + see_all_traces: Se alle spor + see_your_traces: Se alle dine spor + traces_waiting: Du har %{count} spor som venter på opplasting. Du bør vurdere å la disse bli ferdig før du laster opp flere spor slik at du ikke blokkerer køa for andre brukere. + upload_trace: Last opp et GPS-spor + trace_optionals: + tags: Merkelapper + trace_paging_nav: + next: Neste » + previous: « Forrige + showing_page: Viser side %{page} + view: + delete_track: Slett dette sporet + description: "Beskrivelse:" + download: last ned + edit: rediger + edit_track: Rediger dette sporet + filename: "Filnavn:" + heading: Viser spor %{name} + map: kart + none: Ingen + owner: "Eier:" + pending: VENTENDE + points: "Punkter:" + start_coordinates: "Startkoordinat:" + tags: "Markelapper:" + title: Viser spor %{name} + trace_not_found: Spor ikke funnet! + uploaded: "Lastet opp:" + visibility: "Synlighet:" + visibility: + identifiable: Identifiserbar (vist i sporlista og som identifiserbare, sorterte punkter med tidsstempel) + private: Privat (bare delt som anononyme, usorterte punkter) + public: Offentlig (vist i sporlista og som anononyme, usorterte punkter) + trackable: Sporbar (bare delt som anonyme, sorterte punkter med tidsstempel) + user: + account: + contributor terms: + agreed: Du har godkjent de nye bidragsytervilkårene + agreed_with_pd: Du har også opplyst at du anser dine redigeringer for å være offentlig eiendom (Public Domain). + heading: "Bidragsytervilkår:" + link text: hva er dette? + not yet agreed: Du har enda ikke godkjent de nye bidragsytervilkårene. + review link text: Vennligst følg denne lenken når det passer deg, for å se igjennom og godkjenne de nye bidragsytervilkårene. + current email address: "Nåværende e-postadresse:" + delete image: Fjern gjeldende bilde + email never displayed publicly: " (vis aldri offentlig)" + flash update success: Brukerinformasjon oppdatert. + flash update success confirm needed: Brukerinformasjon oppdatert. Sjekk eposten din for å bekrefte din epostadresse. + home location: "Hjemmeposisjon:" + image: "Bilde:" + image size hint: (kvadratiske bilder som er minst 100x100 fungerer best) + keep image: Behold gjeldende bilde + latitude: "Breddegrad:" + longitude: "Lengdegrad:" + make edits public button: Gjør alle mine redigeringer offentlig + my settings: Mine innstillinger + new email address: "Ny e-postadresse:" + new image: Legg til et bilde + no home location: Du har ikke skrevet inn din hjemmelokasjon. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: hva er dette? + openid: "OpenID:" + preferred editor: Foretrukket redigeringsverktøy + preferred languages: "Foretrukne språk:" + profile description: "Profilbeskrivelse:" + public editing: + disabled: Deaktivert og kan ikke redigere data. Alle tidligere redigeringer er anonyme. + disabled link text: hvorfor can jeg ikke redigere? + enabled: Aktivert. Ikke anonym og kan redigere data. + enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits + enabled link text: hva er dette? + heading: "Offentlig redigering:" + public editing note: + heading: Offentlig redigering + text: For øyeblikket er redigeringene dine anonyme og folk kan ikke sende deg meldinger eller se posisjonen din. For å vise hva du redigerte og tillate folk å kontakte deg gjennom nettsiden, klikk på knappen nedenfor. Siden overgangen til 0.6 API-et, kan kun offentlige brukere redigere kartdata. ( Finn ut hvorfor ).
    • Din e-postadresse vil ikke bli avslørt ved Ã¥ bli offentlig.
    • Denne handlingen kan ikke omgjøres, og alle nye brukere er nÃ¥ offentlig tilgjengelig som standard.
    + replace image: Erstatt gjeldende bilde + return to profile: Returner til profil + save changes button: Lagre endringer + title: Rediger konto + update home location on click: Oppdater hjemmelokasjon når jeg klikker på kartet? + confirm: + already active: Denne kontoen har allerede blitt bekreftet. + before you start: Vi vet du sannsynligvis har hastverk med å begynne å lage kart, men før du gjør dette kan du fylle inn litt informasjon om deg selv i skjemaet under. + button: Bekreft + heading: Bekreft en brukerkonto + press confirm button: Klikk bekreftknappen nedenfor for å aktivere kontoen din. + reconfirm: Hvis det er en stund siden du registrerte deg kan det hende du må sende degselv en ny bekreftelsesepost. + success: Kontoen din er bekreftet - takk for at du registrerte deg. + unknown token: Den koden ser ikke ut til å eksistere. + confirm_email: + button: Bekreft + failure: En e-postadresse er allerede bekreftet med denne nøkkelen. + heading: Bekreft endring av e-postadresse + press confirm button: Klikk bekreftknappen nedenfor for å bekrefte din nye e-postadressse. + success: E-postadressen din er bekreftet - takk for at du registrerte deg. + confirm_resend: + failure: Fant ikke brukeren %{name}. + success: Vi har sendt en ny bekreftelsesmelding til %{email} og så snart du bekrefter kontoen din kan du begynne å lage kart.

    Om du bruker et antispamsystem som sender bekreftelsesforspørsler, kontroller at du har hvitelistet webmaster@openstreetmap.org siden vi ikke kan svar på bekreftelsesforespørsler. + filter: + not_an_administrator: Du må være administrator for å gjøre det. + go_public: + flash success: Alle dine redigeringer er nå offentlig, og du har lov til å redigere. + list: + confirm: Bekreft valgte brukere + empty: Ingen samsvarende brukere funnet + heading: Brukere + hide: Skjul valgte brukere + showing: + one: Viser side %{page} (%{first_item} av %{items}) + other: Viser side %{page} (%{first_item}-%{last_item} av %{items}) + summary: "%{name} opprettet fra %{ip_address} den %{date}" + summary_no_ip: "%{name} opprettet %{date}" + title: Brukere + login: + account not active: Beklager, kontoen din er ikke aktivert ennå.
    Bruk lenka i kontobekreftelseseposten for å aktivere kontoen din, eller be om en ny bekreftelsesepost. + account suspended: Beklager, kontoen din er deaktivert på grunn av mistenkelig aktivitet.
    Vennligst kontakt %{webmaster} hvis du ønsker å diskutere dette. + auth failure: Beklager, kunne ikke logge inn med den informasjonen + create account minute: Opprett en konto. Det tar bare ett minutt. + email or username: "E-postadresse eller brukernavn:" + heading: Logg inn + login_button: Logg inn + lost password link: Mistet passordet ditt? + new to osm: Ny på OpenStreetMap? + notice: Finn ut mer om OpenStreetMap sitt kommende bytte av lisens (oversettelser) (diskusjon) + openid: "%{logo} OpenID:" + openid invalid: Beklager, din OpenID ser ut til å være dårlig formatert + openid missing provider: Beklager, fikk ikke kontakt med din OpenID-leverandør + openid_logo_alt: Logg inn med en OpenID + openid_providers: + aol: + alt: Logg inn med en AOL OpenID + title: Logg inn med AOL + google: + alt: Logg inn med en Google OpenID + title: Logg inn med Google + myopenid: + alt: Logg inn med en myOpenID OpenID + title: Logg inn med myOpenID + openid: + alt: Logg inn med en OpenID-URL + title: Logg inn med OpenID + wordpress: + alt: Logg inn med en Wordpress OpenID + title: Logg inn med Wordpress + yahoo: + alt: Logg inn med en Yahoo OpenID + title: Logg inn med Yahoo + password: "Passord:" + register now: Registrer deg nå + remember: "Huske meg:" + title: Logg inn + to make changes: For å gjøre endringer på OpenStreetMap-data, må du ha en konto. + webmaster: webmaster + with openid: "Alternativt kan du bruke din OpenID for å logge inn:" + with username: "Har du allerede en OpenStreetMap-konto? Logg inn med brukernavnet og passordet ditt:" + logout: + heading: Logg ut fra OpenStreetMap + logout_button: Logg ut + title: Logg ut + lost_password: + email address: "E-postadresse:" + heading: Glemt passord? + help_text: Skriv inn e-postadressen du brukte for å registrere deg, og vi vil sende deg ei lenke som du kan bruke til å nullstille passordet ditt. + new password button: Nullstill passord + notice email cannot find: Klarte ikke finne den e-postadressen. Beklager. + notice email on way: Synd at du mistet det, men en e-post er på vei slik at du kan tilbakestille det snart. + title: Glemt passord + make_friend: + already_a_friend: Du er allerede venner med %{name}. + failed: Klarte ikke legge til %{name} som venn. + success: "%{name} er nå din venn." + new: + confirm email address: "Bekreft e-postadresse:" + confirm password: "Bekreft passord:" + contact_webmaster: Kontakt webmaster for å opprette en konto. Vi vil prøve å behandle forespørselen så fort som mulig. + continue: Fortsett + display name: "Visningsnavn:" + display name description: Ditt offentlig fremviste brukernavn. Du kan endre dette senere i innstillingene. + email address: "E-postadresse:" + fill_form: Fyll ut skjemaet og vi vil sende deg en e-post for å aktivere kontoen din. + flash create success message: Takk for at du registrerte deg. Vi har sendt en bekreftelsesmelding til %{email} og så snart du bekrefter kontoen din kan du begynne å lage kart.

    Om du bruker et antispamsystem som sender bekreftelsesforspørsler, kontroller at du har hvitelistet webmaster@openstreetmap.org siden vi ikke kan svar på bekreftelsesforespørsler. + heading: Opprett en brukerkonto + license_agreement: Når du bekrefter kontoen din må du godkjenne bidragsytervilkårene. + no_auto_account_create: Beklageligvis kan vi for øyeblikket ikke opprette en konto for deg automatisk. + not displayed publicly: Ikke vist offentlig (se vår personvernpolitikk) + openid: "%{logo} OpenID:" + openid association: "

    Din OpenID er ikke tilknyttet en OpenStreetMap-konto ennå.

    \n
      \n
    • Hvis du er ny pÃ¥ OpenStreetMap, opprett en ny konto ved hjelp av skjemaet nedenfor.
    • \n
    • \n Hvis du allerede har en konto kan du logge inn pÃ¥ kontoen din\n ved hjelp av brukernavnet og passordet ditt og deretter knytte kontoen\n til din OpenID i brukerinnstillingene.\n
    • \n
    " + openid no password: Med OpenID kreves ikke et passord, men noen ekstraverktøy eller en tjener kan fortsatt kreve et. + password: "Passord:" + terms accepted: Takk for at du godtok de nye bidragsytervilkårene! + terms declined: Vi beklager at du har besluttet å ikke akseptere de nye bidragsytervilkårene. For mer informasjon, se denne wiki-siden . + title: Opprett konto + use openid: Alternativt kan du bruke %{logo} OpenID for å logge inn + no_such_user: + body: Det er ingen bruker med navnet %{user}. Sjekk om du har skrevet navnet feil eller om lenka du klikket er feil. + heading: Brukeren %{user} finnes ikke + title: Ingen bruker funnet + popup: + friend: Venn + nearby mapper: Bruker i nærheten + your location: Din posisjon + remove_friend: + not_a_friend: "%{name} er ikke en av dine venner." + success: "%{name} ble fjernet fra dine venner" + reset_password: + confirm password: "Bekreft passord:" + flash changed: Ditt passord er endret. + flash token bad: Kunne ikke finne den nøkkelen. Sjekke URLen kanskje? + heading: Nullstill passord for %{user} + password: "Passord:" + reset: Nullstill passord + title: Nullstill passord + set_home: + flash success: Hjemmelokasjon lagret + suspended: + body: "

    \nBeklager, kontoen din har blitt automatisk deaktivert på grunn av mistenkelig aktivitet.\n

    \n

    \nDenne avgjørelsen vil bli gjennomgÃ¥tt av en administrator snart, eller du kan kontakte %{webmaster} hvis du ønsker Ã¥ diskutere dette." + heading: Konto stengt + title: Konto stengt + webmaster: webmaster + terms: + agree: Jeg godkjenner + consider_pd: I tillegg til den ovennevnte avtalen anser jeg mine bidrag for Ã¥ være i public domain + consider_pd_why: hva er dette? + decline: AvslÃ¥ + guidance: "Informasjon for Ã¥ hjelpe Ã¥ forstÃ¥ disse vilkÃ¥rene: et menneskelig lesbart sammendrag og noen uformelle oversettelser" + heading: BidragsytervilkÃ¥rene + legale_names: + france: Frankrike + italy: Italia + rest_of_world: Resten av verden + legale_select: "Velg ditt bostedsland:" + read and accept: Les avtalen nedenfor og trykk godkjenningsknapp for Ã¥ bekrefte at du godtar betingelsene i denne avtalen for dine eksisterende og kommende bidrag. + title: BidragsytervilkÃ¥r + you need to accept or decline: Les og deretter enten godta eller avslÃ¥ de nye bidragsytervilkÃ¥rene for Ã¥ fortsette. + view: + activate_user: aktiver denne brukeren + add as friend: legg til som en venn + ago: (%{time_in_words_ago} siden) + block_history: vis mottatte blokkeringer + blocks by me: blokkeringer utført av meg + blocks on me: mine blokkeringer + confirm: Bekreft + confirm_user: bekreft denne brukeren + create_block: blokker denne brukeren + created from: "Opprettet fra:" + deactivate_user: deaktiver denne brukeren + delete_user: slett denne brukeren + description: Beskrivelse + diary: dagbok + edits: redigeringer + email address: "E-postadresse:" + hide_user: skjul denne brukeren + if set location: Hvis du setter din posisjon, sÃ¥ vil et fint kart og ting vises her. Du kan sette din hjemmeposisjon pÃ¥ din %{settings_link}-side. + km away: "%{count}km unna" + latest edit: "Siste redigering %{ago}:" + m away: "%{count}m unna" + mapper since: "Bruker siden:" + moderator_history: vis tildelte blokkeringer + my diary: min dagbok + my edits: mine redigeringer + my settings: mine innstillinger + my traces: mine spor + nearby users: Andre nærliggende brukere + new diary entry: ny dagbokoppføring + no friends: Du har ikke lagt til noen venner ennÃ¥. + no nearby users: Det er ingen andre brukere som innrømmer kartlegging i ditt omrÃ¥de ennÃ¥. + oauth settings: oauth-innstillinger + remove as friend: fjern som venn + role: + administrator: Denne brukeren er en administrator + grant: + administrator: Gi administrator-tilgang + moderator: Gi moderator-tilgang + moderator: Denne brukeren er en moderator + revoke: + administrator: Fjern administrator-tilgang + moderator: fjern moderator-tilgang + send message: send melding + settings_link_text: innstillinger + spam score: "Spamresultat:" + status: "Status:" + traces: spor + unhide_user: stopp Ã¥ skjule denne brukeren + user location: Brukerens posisjon + your friends: Dine venner + user_block: + blocks_by: + empty: "%{name} har ikke blokkert noen ennÃ¥." + heading: Liste over blokkeringer av %{name} + title: Blokkeringer av %{name} + blocks_on: + empty: "%{name} har ikke blitt blokkert ennÃ¥." + heading: Liste over blokkeringer av %{name} + title: Blokkeringer av %{name} + create: + flash: Opprettet en blokkering av bruker %{name}. + try_contacting: Vennligst prøv Ã¥ kontakte brukeren før du blokkerer dem og gi dem rimelig med tid til Ã¥ svare. + try_waiting: Vennligst prøv Ã¥ gi brukeren rimelig med tid til Ã¥ svare før du blokkerer dem. + edit: + back: Vis alle blokkeringer + heading: Endrer blokkering av %{name} + needs_view: MÃ¥ brukeren logge inn før denne blokkeringen blir fjernet? + period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. + reason: Årsaken til hvorfor %{name} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og oppgi sÃ¥ mange detaljer du kan om situasjonen. Husk at ikke alle brukere forstÃ¥r felleskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. + show: Vis denne blokkeringen + submit: Oppdater blokkering + title: Endrer blokkering av %{name} + filter: + block_expired: Blokkeringen har allerede utløpt og kan ikke endres. + block_period: Blokkeringsperioden mÃ¥ være en av verdiene som kan velges fra rullegardinen. + not_a_moderator: Du mÃ¥ være en moderator for Ã¥ utføre den handlingen. + helper: + time_future: Slutter om %{time}. + time_past: Sluttet %{time} siden. + until_login: Aktiv inntil brukeren logger inn. + index: + empty: Ingen blokkeringer har blitt utført ennÃ¥. + heading: Liste over brukerblokkeringer + title: Brukerblokkeringer + model: + non_moderator_revoke: MÃ¥ være en moderator for Ã¥ tilbakekalle en blokkering. + non_moderator_update: MÃ¥ være en moderator for Ã¥ opprette eller oppdatere en blokkering. + new: + back: Vis alle blokkeringer + heading: Oppretter blokkering av %{name} + needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. + period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. + reason: Årsaken til at %{name} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og gi sÃ¥ mange detaljer du kan om situasjonen, og husk pÃ¥ at meldingen blir synlig for offentligheten. Husk pÃ¥ at ikke alle brukere forstÃ¥r fellesskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. + submit: Opprett blokkering + title: Oppretter blokkering av %{name} + tried_contacting: Jeg har kontaktet brukeren og bedt dem stoppe. + tried_waiting: Jeg har gitt brukeren rimelig med tid til Ã¥ svare pÃ¥ disse kommunikasjonene. + not_found: + back: Tilbake til indeksen + sorry: Beklager, brukerblokkeringen med ID %{id} ble ikke funnet. + partial: + confirm: Er du sikker? + creator_name: Opprettet av + display_name: Blokkert bruker + edit: Rediger + not_revoked: (ikke tilbakekalt) + reason: Årsak for blokkering + revoke: Tilbakekall! + revoker_name: Tilbakekalt av + show: Vis + status: Status + period: + one: 1 time + other: "%{count} timer" + revoke: + confirm: Er du sikker pÃ¥ at du vil tilbakekalle denne blokkeringen? + flash: Denne blokkeringen har blitt tilbakekalt. + heading: Tilbakekaller blokkering pÃ¥ %{block_on} av %{block_by} + past: Denne blokkeringen endte %{time} siden og kan ikke tilbakekalles nÃ¥. + revoke: Tilbakekall! + time_future: Denne blokkeringen ender i %{time} + title: Tilbakekaller blokkering pÃ¥ %{block_on} + show: + back: Vis alle blokkeringer + confirm: Er du sikker? + edit: Rediger + heading: "%{block_on} blokkert av %{block_by}" + needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. + reason: "Årsak for blokkering:" + revoke: Tilbakekall! + revoker: "Tilbakekaller:" + show: Vis + status: Status + time_future: Slutter om %{time} + time_past: Sluttet %{time} siden + title: "%{block_on} blokkert av %{block_by}" + update: + only_creator_can_edit: Bare moderatoren som opprettet denne blokkeringen kan endre den. + success: Blokkering oppdatert. + user_role: + filter: + already_has_role: Brukeren har allerede rollen %{role}. + doesnt_have_role: Brukeren har ikke rollen %{role}. + not_a_role: Strengen "%{role}" er ikke en gyldig rolle. + not_an_administrator: Kun administratorer kan forandre roller, og du er ikke administrator. + grant: + are_you_sure: Er du sikker pÃ¥ at du vil gi rollen `%{role}' til brukeren `%{name}'? + confirm: Bekreft + fail: Kunne ikke gi rollen "%{role}" til bruker "%{name}". Sjekk at brukeren og rollen er gyldig. + heading: Bekreft rolletildeling + title: Bekreft rolletildeling + revoke: + are_you_sure: Er du sikker pÃ¥ at du vil fjerne rollen "%{role}" fra brukeren "%{name}"? + confirm: Bekreft + fail: Kunne ikke fjerne rollen "%{role}" fra bruker "%{name}". Sjekk at bruker og rolle er gyldig. + heading: Bekreft fjerning av rolle + title: Bekreft fjerning av rolle diff --git a/config/locales/nds.yml b/config/locales/nds.yml index 587d57fcf..e69a9e472 100644 --- a/config/locales/nds.yml +++ b/config/locales/nds.yml @@ -533,7 +533,6 @@ nds: map: base: cycle_map: Radkoort - noname: KeenNaam site: edit_tooltip: Koort ännern layouts: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 93d4b417a..55d45cd90 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -95,7 +95,7 @@ nl: osmchangexml: osmChange-XML title: Set wijzigingen changeset_details: - belongs_to: "Gemaakt door:" + belongs_to: "Hoort bij:" bounding_box: "Selectiekader:" box: kader closed_at: "Gesloten op:" @@ -106,7 +106,9 @@ nl: has_relations: one: "Heeft de volgende relatie:" other: "Heeft de volgende %{count} relaties:" - has_ways: "Bevat de volgende %{count} ways:" + has_ways: + one: "Bevat de volgende way:" + other: "Bevat de volgende %{count} ways:" no_bounding_box: Er is geen selectiekader opgeslagen voor deze set wijzigingen. show_area_box: Gebied weergeven common_details: @@ -132,7 +134,7 @@ nl: node: Node op grotere kaart bekijken relation: Relatie op grotere kaart bekijken way: Weg op grotere kaart bekijken - loading: Bezig met laden... + loading: Bezig met laden… navigation: all: next_changeset_tooltip: Volgende set wijzigingen @@ -207,7 +209,7 @@ nl: history_for_feature: Geschiedenis voor [[feature]] load_data: Gegevens laden loaded_an_area_with_num_features: U hebt een gebied geladen dat [[num_features]] objecten bevat. Sommige browsers kunnen niet goed overweg met zoveel gegevens. Normaal gesproken werken browsers het best met minder dan honderd objecten. Als u er meer weergeeft kan de browser traag worden of niet meer reageren. Als u zeker weet dat u de gegevens wilt weergeven, klik dan op de knop hieronder. - loading: Bezig met laden... + loading: Bezig met laden… manually_select: Handmatig een ander gebied selecteren object_list: api: Dit gebied via de API ophalen @@ -273,8 +275,8 @@ nl: still_editing: (nog aan het bewerken) view_changeset_details: Details wijzigingenset weergeven changeset_paging_nav: - next: Volgende » - previous: "« Vorige" + next: Volgende » + previous: « Vorige showing_page: Pagina %{page} changesets: area: Gebied @@ -594,7 +596,7 @@ nl: motorway_link: Autosnelwegverbindingsweg path: Pad pedestrian: Voetpad - platform: Platform + platform: Perron primary: Primaire weg primary_link: Primaire weg raceway: Racecircuit @@ -888,7 +890,8 @@ nl: map: base: cycle_map: Fietskaart - noname: GeenNaam + mapquest: MapQuest Open + transport_map: Transport Map site: edit_disabled_tooltip: Zoom in om de kaart te bewerken edit_tooltip: Kaart bewerken @@ -899,7 +902,7 @@ nl: layouts: community_blogs: Gemeenschapsblogs community_blogs_title: Blogs van leden van de OpenStreetMap-gemeenschap - copyright: Auteursrechten & licentie + copyright: Auteursrechten & licentie documentation: Documentatie documentation_title: Projectdocumentatie donate: Ondersteun OpenStreetMap door te %{link} aan het Hardware Upgrade-fonds. @@ -1356,8 +1359,8 @@ nl: trace_optionals: tags: Labels trace_paging_nav: - next: Volgende » - previous: "« Vorige" + next: Volgende » + previous: « Vorige showing_page: Pagina %{page} view: delete_track: Deze track verwijderen diff --git a/config/locales/no.yml b/config/locales/no.yml deleted file mode 100644 index 8a3eec23f..000000000 --- a/config/locales/no.yml +++ /dev/null @@ -1,1714 +0,0 @@ -# Messages for Norwegian (bokmÃ¥l)‬ (‪Norsk (bokmÃ¥l)‬) -# Exported from translatewiki.net -# Export driver: syck-pecl -# Author: Gustavf -# Author: Hansfn -# Author: Jon Harald Søby -# Author: Laaknor -# Author: Nghtwlkr -# Author: Oyvind -"no": - activerecord: - attributes: - diary_comment: - body: Brødtekst - diary_entry: - language: SprÃ¥k - latitude: Breddegrad - longitude: "Lengdegrad:" - title: Tittel - user: Bruker - friend: - friend: Venn - user: Bruker - message: - body: Brødtekst - recipient: Mottaker - sender: Avsender - title: Tittel - trace: - description: Beskrivelse - latitude: Breddegrad - longitude: "Lengdegrad:" - name: Navn - public: Offentlig - size: Størrelse - user: Bruker - visible: Synlig - user: - active: Aktive - description: Beskrivelse - display_name: Visningsnavn - email: E-post - languages: SprÃ¥k - pass_crypt: Passord - models: - acl: Tilgangskontrolliste - changeset: Endringssett - changeset_tag: Endringssettmerkelapp - country: Land - diary_comment: Dagbokskommentar - diary_entry: Dagbokoppføring - friend: Venn - language: SprÃ¥k - message: Melding - node: Node - node_tag: Nodemerkelapp - notifier: Varsling - old_node: Gammel node - old_node_tag: Gammel nodemerkelapp - old_relation: Gammel relasjon - old_relation_member: Gammelt relasjonsmedlem - old_relation_tag: Gammel relasjonsmerkelapp - old_way: Gammelvei - old_way_node: Gammel veinode - old_way_tag: Gammel veimerkelapp - relation: Relasjon - relation_member: Relasjonsmedlem - relation_tag: Relasjonsmerkelapp - session: Økt - trace: Spor - tracepoint: Punkt i spor - tracetag: Spormerkelapp - user: Bruker - user_preference: Brukerinnstillinger - user_token: Brukernøkkel - way: Vei - way_node: Veinode - way_tag: Veimerkelapp - application: - require_cookies: - cookies_needed: Du ser ut til Ã¥ ha deaktivert informasjonskapsler. Aktiver informasjonskapsler i nettleseren din før du fortsetter. - setup_user_auth: - blocked: Din tilgang til API-et er blokkert. Logg inn pÃ¥ nettstedet for Ã¥ finne ut mer. - need_to_see_terms: Din tilgang til API-et er midlertidig stoppet. Logg inn pÃ¥ nettsiden for Ã¥ lese bidragsytervilkÃ¥rene. Du trenger ikke godta vilkÃ¥rene, men du mÃ¥ lese dem. - browse: - changeset: - changeset: "Endringssett: %{id}" - changesetxml: XML for endringssett - download: Last ned %{changeset_xml_link} eller %{osmchange_xml_link} - feed: - title: Endringssett %{id} - title_comment: "Endringssett: %{id} - %{comment}" - osmchangexml: osmChange XML - title: Endringssett - changeset_details: - belongs_to: "Tilhører:" - bounding_box: "Avgrensingsboks:" - box: boks - closed_at: "Lukket:" - created_at: "Opprettet:" - has_nodes: - one: "Har følgende %{count} node:" - other: "Har følgende %{count} noder:" - has_relations: - one: "Har følgende %{count} relasjon:" - other: "Har følgende %{count} relasjoner:" - has_ways: - one: "Har følgende %{count} vei:" - other: "Har følgende %{count} veier:" - no_bounding_box: Ingen avgrensingsboks er lagret for dette endringssettet. - show_area_box: Vis boks for omrÃ¥de - common_details: - changeset_comment: "Kommentar:" - deleted_at: "Slettet:" - deleted_by: "Slettet av:" - edited_at: "Redigert:" - edited_by: "Redigert av:" - in_changeset: "I endringssett:" - version: "Versjon:" - containing_relation: - entry: Relasjon %{relation_name} - entry_role: Relasjon %{relation_name} (som %{relation_role}) - map: - deleted: Slettet - larger: - area: Vis omrÃ¥de pÃ¥ større kart - node: Vis node pÃ¥ større kart - relation: Vis relasjon pÃ¥ større kart - way: Vis vei pÃ¥ større kart - loading: Laster... - navigation: - all: - next_changeset_tooltip: Neste endringssett - next_node_tooltip: Neste node - next_relation_tooltip: Neste relasjon - next_way_tooltip: Neste vei - prev_changeset_tooltip: Forrige endringssett - prev_node_tooltip: Forrige node - prev_relation_tooltip: Forrige relasjon - prev_way_tooltip: Forrige vei - user: - name_changeset_tooltip: Vis redigeringer av %{user} - next_changeset_tooltip: Neste redigering av %{user} - prev_changeset_tooltip: Forrige redigering av %{user} - node: - download: "%{download_xml_link}, %{view_history_link} eller %{edit_link}" - download_xml: Last ned XML - edit: rediger - node: Node - node_title: "Node: %{node_name}" - view_history: vis historikk - node_details: - coordinates: "Koordinater:" - part_of: "Del av:" - node_history: - download: "%{download_xml_link} eller %{view_details_link}" - download_xml: Last ned XML - node_history: Nodehistorik - node_history_title: "Nodehistorikk: %{node_name}" - view_details: vis detaljer - not_found: - sorry: Klarte ikke finne %{type}-en med ID %{id}. - type: - changeset: endringssett - node: node - relation: relasjon - way: vei - paging_nav: - of: av - showing_page: Viser side - relation: - download: "%{download_xml_link} eller %{view_history_link}" - download_xml: Last ned XML - relation: Relasjon - relation_title: "Relasjon: %{relation_name}" - view_history: vis historikk - relation_details: - members: "Medlemmer:" - part_of: "Del av:" - relation_history: - download: "%{download_xml_link} eller %{view_details_link}" - download_xml: Last ned XML - relation_history: Relasjonshistorikk - relation_history_title: "Relasjonshistorikk: %{relation_name}" - view_details: vis detaljer - relation_member: - entry_role: "%{type} %{name} som %{role}" - type: - node: Node - relation: Relasjon - way: Vei - start: - manually_select: Velg et annet omrÃ¥de manuelt - view_data: Vis data for gjeldende kartvisning - start_rjs: - data_frame_title: Data - data_layer_name: Data - details: Detaljer - drag_a_box: Dra en boks pÃ¥ kartet for Ã¥ velge et omrÃ¥de - edited_by_user_at_timestamp: Redigert av [[user]], [[timestamp]] - hide_areas: Skjul omrÃ¥der - history_for_feature: Historikk for [[feature]] - load_data: Last inn data - loaded_an_area_with_num_features: "Du har lastet et omrÃ¥de som inneholder [[num_features]] objekter. Noen nettlesere fungerer ikke ved hÃ¥ndtering av sÃ¥ mye data. Nettlesere fungerer generelt best med mindre enn 100 objekter av gangen: noe mer kan gjøre at nettleseren fryser. Om du er sikker pÃ¥ at du vil se denne informasjonen kan du gjøre det ved Ã¥ klikke pÃ¥ knappen nedenfor." - loading: Laster... - manually_select: Velg et annet omrÃ¥de manuelt - object_list: - api: Hent dette omrÃ¥det fra API-et - back: Vis objektliste - details: Detaljer - heading: Objektliste - history: - type: - node: Node [[id]] - way: Vei [[id]] - selected: - type: - node: Node [[id]] - way: Vei [[id]] - type: - node: Node - way: Vei - private_user: privat bruker - show_areas: Vis omrÃ¥der - show_history: Vis historikk - unable_to_load_size: "Klarte ikke laste inn: Avgrensingsboks med størrelse [[bbox_size]] er for stor (mÃ¥ være mindre enn %{max_bbox_size})" - wait: Vent ... - zoom_or_select: Zoom inn eller velg et omrÃ¥de av kartet for visning - tag_details: - tags: "Markelapper:" - wiki_link: - key: Wiki-beskrivelsessiden for %{key}-elementet - tag: Wiki-beskrivelsessiden for %{key}=%{value}-elementet - wikipedia_link: Artikkelen %{page} pÃ¥ Wikipedia - timeout: - sorry: Beklager, data for %{type} med id %{id} brukte for lang tid pÃ¥ Ã¥ hentes. - type: - changeset: endringssett - node: node - relation: relasjon - way: vei - way: - download: "%{download_xml_link}, %{view_history_link} eller %{edit_link}" - download_xml: Last ned XML - edit: rediger - view_history: vis historikk - way: Vei - way_title: "Vei: %{way_name}" - way_details: - also_part_of: - one: ogsÃ¥ del av veien %{related_ways} - other: ogsÃ¥ del av veiene %{related_ways} - nodes: "Noder:" - part_of: "Del av:" - way_history: - download: "%{download_xml_link} eller %{view_details_link}" - download_xml: Last ned XML - view_details: vis detaljer - way_history: Veihistorikk - way_history_title: "Veihistorikk: %{way_name}" - changeset: - changeset: - anonymous: Anonym - big_area: (stor) - no_comment: (ingen) - no_edits: (ingen redigeringer) - show_area_box: vis boks for omrÃ¥de - still_editing: (redigerer forsatt) - view_changeset_details: Vis detaljer for endringssett - changeset_paging_nav: - next: Neste » - previous: « Forrige - showing_page: Viser side %{page} - changesets: - area: OmrÃ¥de - comment: Kommentar - id: ID - saved_at: Lagret - user: Bruker - list: - description: Siste endringer - description_bbox: Endringssett innenfor %{bbox} - description_user: Endringssett av %{user} - description_user_bbox: Endringssett av %{user} innen %{bbox} - heading: Endringssett - heading_bbox: Endringssett - heading_user: Endringssett - heading_user_bbox: Endringssett - title: Endringssett - title_bbox: Endringssett innenfor %{bbox} - title_user: Endringssett av %{user} - title_user_bbox: Endringssett av %{user} innen %{bbox} - timeout: - sorry: Beklager, listen over endringssett som du ba om tok for lang tid Ã¥ hente. - diary_entry: - diary_comment: - comment_from: Kommentar fra %{link_user}, %{comment_created_at} - confirm: Bekreft - hide_link: Skjul denne kommentaren - diary_entry: - comment_count: - one: 1 kommentar - other: "%{count} kommentarer" - comment_link: Kommenter denne oppføringen - confirm: Bekreft - edit_link: Rediger denne oppføringen - hide_link: Skjul denne oppføringen - posted_by: Skrevet av %{link_user} %{created} pÃ¥ %{language_link} - reply_link: Svar pÃ¥ denne oppføringen - edit: - body: "Kropp:" - language: "SprÃ¥k:" - latitude: "Breddegrad:" - location: "Posisjon:" - longitude: "Lengdegrad:" - marker_text: Lokasjon for dagbokoppføring - save_button: Lagre - subject: "Emne:" - title: Rediger oppføring i dagboka - use_map_link: bruk kart - feed: - all: - description: Nye oppføringer i dagbøkene til OpenStreetMap-brukere - title: Oppføringer OpenStreetMap-dagboka - language: - description: Nye oppføringer i dagbøkene til OpenStreetMap-brukere pÃ¥ %{language_name} - title: Oppføringer i OpenStreetMap-dagbøker pÃ¥ %{language_name} - user: - description: Nye oppføringer i OpenStreetMap-dagboka til %{user} - title: Oppføringer i OpenStreetMap-dagboka for %{user} - list: - in_language_title: Dagbokoppføringer pÃ¥ %{language} - new: Ny dagbokoppføring - new_title: Skriv en ny oppføring i i din brukerdagbok - newer_entries: Nyere oppføringer - no_entries: Ingen oppføringer i dagboka - older_entries: Eldre oppføringer - recent_entries: "Nye oppføringer i dagboka:" - title: Brukernes dagbøker - user_title: Dagboken for %{user} - location: - edit: Rediger - location: "Posisjon:" - view: Vis - new: - title: Ny dagbokoppføring - no_such_entry: - body: Det er ingen dagbokinnlegg eller kommentar med ID %{id}. Sjekk om du har skrevet feil eller om lenka du klikket er feil. - heading: Ingen oppføring med %{id} - title: Ingen slik dagbokoppføring - no_such_user: - body: Beklager, det finnes ingen bruker med navnet %{user}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. - heading: Brukeren %{user} finnes ikke - title: Ingen bruker funnet - view: - leave_a_comment: Legg igjen en kommentar - login: Logg inn - login_to_leave_a_comment: "%{login_link} for Ã¥ legge igjen en kommentar" - save_button: Lagre - title: "%{user} sin dagbok | %{title}" - user_title: Dagboken for %{user} - editor: - default: Standard (nÃ¥værende %{name}) - potlatch: - description: Potlatch 1 (rediger i nettleseren) - name: Potlatch 1 - potlatch2: - description: Potlatch 2 (rediger i nettleseren) - name: Potlatch 2 - remote: - description: Lokalt installert program (JOSM eller Merkaartor) - name: Lokalt installert program - export: - start: - add_marker: Legg til en markør pÃ¥ kartet - area_to_export: OmrÃ¥de som skal eksporteres - embeddable_html: HTML som kan bygges inn - export_button: Eksporter - export_details: Data fra OpenStreetMap er lisensiert under lisensen Creative Commons Navngivelse-Del pÃ¥ samme vilkÃ¥r 2.0. - format: Format - format_to_export: Format for eksport - image_size: Bildestørrelse - latitude: "Bre:" - licence: Lisens - longitude: "Len:" - manually_select: Velg et annet omrÃ¥de manuelt - mapnik_image: Mapnik-bilde - max: maks - options: Valg - osm_xml_data: OpenStreetMap XML-data - osmarender_image: Osmarender-bilde - output: Utdata - paste_html: Lim inn HTML som skal bygges inn i nettsted - scale: Skala - too_large: - body: Dette omrÃ¥det er for stort for Ã¥ bli eksportert som OpenStreetMap XML-data. Zoom inn eller velg et mindre omrÃ¥de. - heading: For stort omrÃ¥de - zoom: Zoom - start_rjs: - add_marker: Legg til en markør pÃ¥ kartet - change_marker: Endre markørposisjon - click_add_marker: Klikk pÃ¥ kartet for Ã¥ legge til en markør - drag_a_box: Dra en boks pÃ¥ kartet for Ã¥ velge et omrÃ¥de - export: Eksporter - manually_select: Velg et annet omrÃ¥de manuelt - view_larger_map: Vis større kart - geocoder: - description: - title: - geonames: Posisjon fra GeoNames - osm_namefinder: "%{types} fra OpenStreetMap Namefinder" - osm_nominatim: Sted fra OpenStreetMap Nominatim - types: - cities: Byer - places: Steder - towns: SmÃ¥byer - description_osm_namefinder: - prefix: "%{distance} %{direction} av %{type}" - direction: - east: øst - north: nord - north_east: nordøst - north_west: nordvest - south: sør - south_east: sørøst - south_west: sørvest - west: vest - distance: - one: omtrent 1 km - other: omtrent %{count} km - zero: mindre enn 1 km - results: - more_results: Flere resultat - no_results: Ingen resultat funnet - search: - title: - ca_postcode: Resultat fra Geocoder.CA - geonames: Resultat fra GeoNames - latlon: Resultat fra Internt - osm_namefinder: Resultat fra OpenStreetMap Namefinder - osm_nominatim: Resultat fra OpenStreetMap Nominatim - uk_postcode: Resultat fra NPEMap / FreeThe Postcode - us_postcode: Resultat fra Geocoder.us - search_osm_namefinder: - prefix: "%{type}" - suffix_parent: "%{suffix} (%{parentdistance} %{parentdirection} av %{parentname})" - suffix_place: ", %{distance} %{direction} av %{placename}" - search_osm_nominatim: - prefix: - amenity: - airport: Flyplass - arts_centre: Kunstsenter - atm: Minibank - auditorium: Auditorium - bank: Bank - bar: Bar - bench: Benk - bicycle_parking: Sykkelparkering - bicycle_rental: Sykkelutleie - brothel: Bordell - bureau_de_change: Vekslingskontor - bus_station: Busstasjon - cafe: Kafé - car_rental: Bilutleie - car_sharing: Bildeling - car_wash: Bilvask - casino: Kasino - cinema: Kino - clinic: Klinikk - club: Klubb - college: Høyskole - community_centre: Samfunnshus - courthouse: Rettsbygning - crematorium: Krematorium - dentist: Tannlege - doctors: Leger - dormitory: Sovesal - drinking_water: Drikkevann - driving_school: Kjøreskole - embassy: Ambassade - emergency_phone: Nødtelefon - fast_food: Hurtigmat - ferry_terminal: Ferjeterminal - fire_hydrant: Brannhydrant - fire_station: Brannstasjon - fountain: Fontene - fuel: Drivstoff - grave_yard: Gravlund - gym: Treningssenter - hall: Spisesal - health_centre: Helsesenter - hospital: Sykehus - hotel: Hotell - hunting_stand: Jaktbod - ice_cream: Iskrem - kindergarten: Barnehage - library: Bibliotek - market: Marked - marketplace: Markedsplass - mountain_rescue: Fjellredning - nightclub: Nattklubb - nursery: Førskole - nursing_home: Pleiehjem - office: Kontor - park: Park - parking: Parkeringsplass - pharmacy: Apotek - place_of_worship: Tilbedelsesplass - police: Politi - post_box: Postboks - post_office: Postkontor - preschool: Førskole - prison: Fengsel - pub: Pub - public_building: Offentlig bygning - public_market: Offentlig marked - reception_area: OppsamlingsomrÃ¥de - recycling: Resirkuleringspunkt - restaurant: Restaurant - retirement_home: Gamlehjem - sauna: Sauna - school: Skole - shelter: Tilfluktsrom - shop: Butikk - shopping: Handel - social_club: Sosial klubb - studio: Studio - supermarket: Supermarked - taxi: Drosje - telephone: Offentlig telefon - theatre: Teater - toilets: Toaletter - townhall: RÃ¥dhus - university: Universitet - vending_machine: Vareautomat - veterinary: Veterinærklinikk - village_hall: Forsamlingshus - waste_basket: Søppelkasse - wifi: WiFi-tilgangspunkt - youth_centre: Ungdomssenter - boundary: - administrative: Administrativ grense - building: - apartments: Leilighetsblokk - block: Bygningsblokk - bunker: Bunker - chapel: Kapell - church: Kirke - city_hall: RÃ¥dhus - commercial: Kommersiell bygning - dormitory: Sovesal - entrance: Bygningsinngang - faculty: Fakultetsbygning - farm: GÃ¥rdsbygg - flats: Leiligheter - garage: Garasje - hall: Spisesal - hospital: Sykehusbygg - hotel: Hotell - house: Hus - industrial: Industribygg - office: Kontorbygg - public: Offentlig bygg - residential: Boligbygg - retail: Detaljsalgbygg - school: Skolebygg - shop: Butikk - stadium: Stadion - store: Butikk - terrace: Terrasse - tower: TÃ¥rn - train_station: Jernbanestasjon - university: Universitetsbygg - highway: - bridleway: Ridevei - bus_guideway: Ledet bussfelt - bus_stop: Busstopp - byway: Stikkvei - construction: Motorvei under konstruksjon - cycleway: Sykkelsti - distance_marker: Avstandsmarkør - emergency_access_point: Nødtilgangspunkt - footway: Gangsti - ford: Vadested - gate: Bom - living_street: Gatetun - minor: Mindre vei - motorway: Motorvei - motorway_junction: Motorveikryss - motorway_link: Vei til motorvei - path: Sti - pedestrian: Gangvei - platform: Perrong - primary: Primær vei - primary_link: Primær vei - raceway: Racerbane - residential: Bolig - road: Vei - secondary: Sekundær vei - secondary_link: Sekundær vei - service: Tjenestevei - services: Motorveitjenester - steps: Trapper - stile: Stige - tertiary: Tertiær vei - track: Sti - trail: Sti - trunk: Hovedvei - trunk_link: Hovedvei - unclassified: Uklassifisert vei - unsurfaced: Vei uten dekke - historic: - archaeological_site: Arkeologisk plass - battlefield: Slagmark - boundary_stone: Grensestein - building: Bygning - castle: Slott - church: Kirke - house: Hus - icon: Ikon - manor: HerregÃ¥rd - memorial: Minne - mine: Gruve - monument: Monument - museum: Museum - ruins: Ruiner - tower: TÃ¥rn - wayside_cross: Veikant kors - wayside_shrine: Veikant alter - wreck: Vrak - landuse: - allotments: Kolonihager - basin: ElveomrÃ¥de - brownfield: Tidligere industriomrÃ¥de - cemetery: Gravplass - commercial: Kommersielt omrÃ¥de - conservation: Fredet - construction: Kontruksjon - farm: GÃ¥rd - farmland: Jordbruksland - farmyard: GÃ¥rdstun - forest: Skog - grass: Gress - greenfield: Ikke-utviklet omrÃ¥de - industrial: IndustriomrÃ¥de - landfill: Landfylling - meadow: Eng - military: Militært omrÃ¥de - mine: Gruve - mountain: Fjell - nature_reserve: Naturreservat - park: Park - piste: Løype - plaza: Torg - quarry: Steinbrudd - railway: Jernbane - recreation_ground: Idrettsplass - reservoir: Reservoar - residential: BoligomrÃ¥de - retail: Detaljsalg - village_green: landsbypark - vineyard: VingÃ¥rd - wetland: VÃ¥tland - wood: Skog - leisure: - beach_resort: Strandsted - common: Allmenning - fishing: FiskeomrÃ¥de - garden: Hage - golf_course: Golfbane - ice_rink: Skøytebane - marina: BÃ¥thavn - miniature_golf: Minigolf - nature_reserve: Naturreservat - park: Park - pitch: Sportsarena - playground: Lekeplass - recreation_ground: Idrettsplass - slipway: Slipp - sports_centre: Sportssenter - stadium: Stadion - swimming_pool: Svømmebaseng - track: Løpebane - water_park: Vannpark - natural: - bay: Bukt - beach: Strand - cape: Nes - cave_entrance: Huleinngang - channel: Kanal - cliff: Klippe - coastline: Kystlinje - crater: Krater - feature: Egenskap - fell: Fjellskrent - fjord: Fjord - geyser: Geysir - glacier: Isbre - heath: Vidde - hill: Ås - island: Øy - land: Land - marsh: Sump - moor: Myr - mud: Gjørme - peak: Topp - point: Punkt - reef: Rev - ridge: Rygg - river: Elv - rock: Stein - scree: Ur - scrub: Kratt - shoal: Grunning - spring: Kilde - strait: Stred - tree: Tre - valley: Dal - volcano: Vulkan - water: Vann - wetland: VÃ¥tmark - wetlands: VÃ¥tland - wood: Skog - place: - airport: Flyplass - city: By - country: Land - county: Fylke - farm: GÃ¥rd - hamlet: Grend - house: Hus - houses: Hus - island: Øy - islet: Holme - locality: Plass - moor: Myr - municipality: Kommune - postcode: Postnummer - region: OmrÃ¥de - sea: Hav - state: Delstat - subdivision: Underavdeling - suburb: Forstad - town: Tettsted - unincorporated_area: Kommunefritt omrÃ¥de - village: Landsby - railway: - abandoned: Forlatt jernbane - construction: Jernbane under konstruksjon - disused: Nedlagt jernbane - disused_station: Nedlagt jernbanestasjon - funicular: Kabelbane - halt: Togstopp - historic_station: Historisk jernbanestasjon - junction: Jernbanekryss - level_crossing: Planovergang - light_rail: Bybane - monorail: Enskinnebane - narrow_gauge: Smalspor jernbane - platform: Jernbaneperrong - preserved: Bevart jernbane - spur: Jernbaneforgrening - station: Jernbanestasjon - subway: T-banestasjon - subway_entrance: T-baneinngang - switch: Sporveksel - tram: Sporvei - tram_stop: Trikkestopp - yard: Skiftetomt - shop: - alcohol: Utenfor lisens - apparel: Klesbutikk - art: Kunstbutikk - bakery: Bakeri - beauty: Skjønnhetssalong - beverages: Drikkevarerbutikk - bicycle: Sykkelbutikk - books: Bokhandel - butcher: Slakter - car: Bilbutikk - car_dealer: Bilforhandler - car_parts: Bildeler - car_repair: Bilverksted - carpet: Teppebutikk - charity: Veldedighetsbutikk - chemist: Kjemiker - clothes: Klesbutikk - computer: Databutikk - confectionery: Konditori - convenience: Nærbutikk - copyshop: Kopieringsbutikk - cosmetics: Kosmetikkforretning - department_store: Varehus - discount: Tilbudsbutikk - doityourself: Gjør-det-selv - drugstore: Apotek - dry_cleaning: Renseri - electronics: Elektronikkforretning - estate_agent: Eiendomsmegler - farm: GÃ¥rdsbutikk - fashion: Motebutikk - fish: Fiskebutikk - florist: Blomsterbutikk - food: Matbutikk - funeral_directors: Begravelsesforretning - furniture: Møbler - gallery: Galleri - garden_centre: Hagesenter - general: Landhandel - gift: Gavebutikk - greengrocer: Grønnsakshandel - grocery: Dagligvarebutikk - hairdresser: Frisør - hardware: Jernvarehandel - hifi: Hi-Fi - insurance: Forsikring - jewelry: Gullsmed - kiosk: Kiosk - laundry: Vaskeri - mall: Kjøpesenter - market: Marked - mobile_phone: Mobiltelefonbutikk - motorcycle: Motorsykkelbutikk - music: Musikkbutikk - newsagent: NyhetsbyrÃ¥ - optician: Optiker - organic: Organisk matbutikk - outdoor: Utendørs butikk - pet: Dyrebutikk - photo: Fotobutikk - salon: Salong - shoes: Skobutikk - shopping_centre: Kjøpesenter - sports: Sportsbutikk - stationery: Papirbutikk - supermarket: Supermarked - toys: Lekebutikk - travel_agency: ReisebyrÃ¥ - video: Videobutikk - wine: Utenfor lisens - tourism: - alpine_hut: Fjellhytte - artwork: Kunstverk - attraction: Attraksjon - bed_and_breakfast: Bed and Breakfast - cabin: Hytte - camp_site: Teltplass - caravan_site: Campingplass - chalet: Fjellhytte - guest_house: Gjestehus - hostel: Vandrerhjem - hotel: Hotell - information: Informasjon - lean_to: Lenne inntil - motel: Motell - museum: Museum - picnic_site: Piknikplass - theme_park: Fornøyelsespark - valley: Dal - viewpoint: Utsiktspunkt - zoo: Dyrepark - waterway: - boatyard: BÃ¥than - canal: Kanal - connector: Vannveiforbindelse - dam: Demning - derelict_canal: Nedlagt kanal - ditch: Grøft - dock: Dokk - drain: Avløp - lock: Sluse - lock_gate: Sluseport - mineral_spring: Mineralkilde - mooring: Fortøyning - rapids: Stryk - river: Elv - riverbank: Elvebredd - stream: Strøm - wadi: Elveleie - water_point: Vannpunkt - waterfall: Foss - weir: Overløpskant \ - prefix_format: "%{name}" - javascripts: - map: - base: - cycle_map: Sykkelkart - mapnik: Mapnik - noname: IntetNavn - osmarender: Osmarender - overlays: - maplint: Maplint - site: - edit_disabled_tooltip: Zoom inn for Ã¥ redigere kartet - edit_tooltip: Rediger kartet - edit_zoom_alert: Du mÃ¥ zoome inn for Ã¥ redigere kartet - history_disabled_tooltip: Zoom inn for Ã¥ vise redigeringer i dette omrÃ¥det - history_tooltip: Vis redigeringer for dette omrÃ¥det - history_zoom_alert: Du mÃ¥ zoome inn for Ã¥ vise redigeringer i dette omrÃ¥det - layouts: - community_blogs: Fellesskapsblogger - community_blogs_title: Blogger fra medlemmene i OpenStreetMap-felleskapet - copyright: Opphavsrett & lisens - documentation: Dokumentasjon - documentation_title: Dokumentasjon for prosjektet - donate: Støtt OpenStreetMap ved %{link} til Hardware Upgrade Fund (et fond for maskinvareoppgraderinger). - donate_link_text: donering - edit: Rediger - edit_with: Rediger med %{editor} - export: Eksporter - export_tooltip: Eksporter kartdata - foundation: Stiftelse - foundation_title: OpenStreetMap stiftelsen - gps_traces: GPS-spor - gps_traces_tooltip: Behandle GPS-spor - help: Hjelp - help_centre: Brukerstøtte - help_title: Hjelpenettsted for prosjektet - history: Historikk - home: hjem - home_tooltip: GÃ¥ til hjemmeposisjon - inbox: innboks (%{count}) - inbox_tooltip: - one: Din innboks inneholder 1 ulest melding - other: Din innboks inneholder %{count} uleste meldinger - zero: Din innboks inneholder ingen uleste meldinger - intro_1: OpenStreetMap er et fritt redigerbart kart over hele jorda. Det er lagd av folk som deg. - intro_2: OpenStreetMap gjør det mulig Ã¥ vise, redigere og bruke geografiske data pÃ¥ en samarbeidende mÃ¥te fra hvor som helst pÃ¥ jorda. - intro_3: OpenStreetMaps tjenerplass støttes av %{ucl} og %{bytemark}. Andre støttespillere av prosjektet er oppført i %{partners}. - intro_3_partners: wiki - license: - title: Data fra OpenStreetMap er lisensiert under lisensen Creative Commons Navngivelse-Del pÃ¥ like vilkÃ¥r 2.0 Generisk - log_in: logg inn - log_in_tooltip: Logg inn med en eksisterende konto - logo: - alt_text: OpenStreetMap-logo - logout: logg ut - logout_tooltip: Logg ut - make_a_donation: - text: Doner - title: Støtt OpenStreetMap med en donasjon - osm_offline: OpenStreetMap databasen er for øyeblikket utilgjengelig mens essensielt vedlikeholdsarbeid utføres. - osm_read_only: OpenStreetMap databasen er for øyeblikket i kun-lese-modus mens essensielt vedlikeholdsarbeid utføres. - project_name: - h1: OpenStreetMap - title: OpenStreetMap - sign_up: registrer - sign_up_tooltip: Opprett en konto for redigering - sotm2011: Kom til 2011 OpenStreetMap-konferansen, «Kartets tilstand», 11.-9. september i Denver! - tag_line: Fritt Wiki-verdenskart - user_diaries: Brukerdagbok - user_diaries_tooltip: Vis brukerens dagbok - view: Vis - view_tooltip: Vis kartet - welcome_user: Velkommen, %{user_link} - welcome_user_link_tooltip: Din brukerside - wiki: Wiki - wiki_title: Wikinettsted for prosjektet - license_page: - foreign: - english_link: den engelske originalen - text: I tilfellet av en konflikt mellom denne oversatte siden og %{english_original_link} har den engelske presedens - title: Om denne oversettelsen - legal_babble: "

    Opphavsrett og lisenser

    \n

    \n OpenStreetMap er åpne data, lisensiert under Creative\n Commons Navngivelse-DelPåSammeVilkår 2.0 (CC-BY-SA).\n

    \n

    \n Du er fri til å kopiere, distribuere, overføre og tilpasse våre kart og data, så lenge du krediterer OpenStreetMap og dens\n bidragsytere. Hvis du endrer eller bygger på våre kart eller data, kan du bare distribuere resultatet under samme lisens. \n Den fulle juridiske\n koden forklarer rettighetene og ansvaret.\n

    \n\n

    Hvordan kreditere OpenStreetMap

    \n

    \n Hvis du bruker OpenStreetMap kartbilder, ber vi om at din kreditering minst inneholder \n «© OpenStreetMap-bidragsytere, CC-BY-SA». Hvis du bare bruker kartdata, ber vi om \n «Kartdata © OpenStreetMap-bidragsytere, CC-BY-SA».\n

    \n

    \n Der det er mulig, bør OpenStreetMap bli lenket til http://www.openstreetmap.org/\n og CC-BY-SA til http://creativecommons.org/licenses/by-sa/2.0/. Hvis\n du bruker et medium der lenker ikke er mulig (f.eks. i utskrevne arbeid), foreslår vi at du henviser leserne til\n www.openstreetmap.org (kanskje ved å utvide 'OpenStreetMap' til denne fullstendige adressen) og til\n www.creativecommons.org.\n

    \n\n

    Finn ut mer

    \n

    \n Les mer om hvordan du bruker våre data i den juridiske\n FAQ-en.\n

    \n

    \n OSM-bidragsytere blir påminnet å aldri legge til data fra opphavsrettsbeskyttede kilder (f.eks. Google Maps eller utskrevne kart) uten\n uttrykkelig tillatelse fra rettighetshavere.\n

    \n

    \n Selv om OpenStreetMap er åpne data kan vi ikke gi et\n gratis kart-API til tredjepartsutviklere.\n\n Se våre retningslinjer for bruken av API-et,\n kartbilder (Tiles)\n og Nominatim.\n

    \n\n

    VÃ¥re bidragsytere

    \n

    \n Vår CC-BY-SA-lisens krever at du «gir den opprinnelige forfatteren rimelig kreditt til mediet eller måten du\n benytter». Individuelle OSM-kartleggere krever ikke en kreditering utover «OpenStreetMap bidragsytere»,\n men der data fra et nasjonal kartleggingsbyrå eller fra en annen stor kilde er blitt inkludert inne i\n OpenStreetMap, kan det være fornuftig å kreditere dem ved direkte\n reprodusering av deres kreditt eller ved å linke til det på denne siden.\n

    \n\n\n\n
      \n
    • Australia: Inneholder forstaddata basert\n pÃ¥ Australian Bureau of Statistics data.
    • \n
    • Canada: Inneholder data fra\n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada), og StatCan (Geography Division,\n Statistics Canada).
    • \n
    • New Zealand: Inneholder data hentet fra\n Land Information New Zealand. Crown Copyright reservert.
    • \n
    • Polen: Inneholder data fra UMP-pcPL maps. Copyright\n UMP-pcPL bidragsytere.
    • \n
    • Storbritannia: Inneholder Ordnance\n Survey data © Crown copyright og database-rettigheter\n 2010.
    • \n
    \n\n

    \n Inkludering av data i OpenStreetMap innebærer ikke at den opprinnelige\n dataleverandøren støtter OpenStreetMap, gir noen garanti eller\n godtar noe erstatningsansvar.\n

    " - native: - mapping_link: start kartlegging - native_link: Norsk versjon - text: Du ser den engelske versjonen av opphavsrettssiden. Du kan gå tilbake til den %{native_link} av denne siden, eller du kan stoppe å lese om opphavsrett og %{mapping_link}. - title: Om denne siden - message: - delete: - deleted: Melding slettet - inbox: - date: Dato - from: Fra - my_inbox: Min innboks - no_messages_yet: Du har ingen meldinger enda. Kanskje du kan prøve å komme i kontakt med %{people_mapping_nearby_link}? - outbox: utboks - people_mapping_nearby: folk i nærheten som lager kart - subject: Emne - title: Innboks - you_have: Du har %{new_count} ny meldinger og %{old_count} gamle meldinger - mark: - as_read: Melding markert som lest - as_unread: Melding markert som ulest - message_summary: - delete_button: Slett - read_button: Marker som lest - reply_button: Svar - unread_button: Marker som ulest - new: - back_to_inbox: Tilbake til innboks - body: Kropp - limit_exceeded: Du har sendt mange meldinger i det siste. Vent en stind før du prøver å sende flere. - message_sent: Melding sendt - send_button: Send - send_message_to: Send en ny melding til %{name} - subject: Emne - title: Send melding - no_such_message: - body: Det er ingen melding med den ID-en. - heading: Ingen melding funnet - title: Ingen melding funnet - no_such_user: - body: Det er ingen bruker med det navnet. - heading: Ingen bruker funnet - title: Ingen bruker funnet - outbox: - date: Dato - inbox: innboks - my_inbox: Min %{inbox_link} - no_sent_messages: folk i nærheten som lager kart - outbox: utboks - people_mapping_nearby: folk i nærheten som lager kart - subject: Emne - title: Utboks - to: Til - you_have_sent_messages: Du har sendt %{count} meldinger - read: - back_to_inbox: Tilbake til innboks - back_to_outbox: Tilbake til utboks - date: Dato - from: Fra - reading_your_messages: Leser dine meldinger - reading_your_sent_messages: Les dine sendte meldinger - reply_button: Svar - subject: Emne - title: Les melding - to: Til - unread_button: Marker som ulest - wrong_user: Du er logget inn som «%{user}», men meldingen du ønsker å lese ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å lese. - reply: - wrong_user: Du er logget inn som «%{user}», men meldingen du ønsker å svare på ble ikke sendt til den brukeren. Logg inn som korrekt bruker for å svare. - sent_message_summary: - delete_button: Slett - notifier: - diary_comment_notification: - footer: Du kan også lese kommentaren på %{readurl} og du kan kommentere på %{commenturl} eller svare på %{replyurl} - header: "%{from_user} har kommentert på ditt siste OpenStreetMap-dagbokinnlegg med emnet %{subject}:" - hi: Hei %{to_user}, - subject: "[OpenStreetMap] %{user} kommenterte på en oppføring i dagboka di" - email_confirm: - subject: "[OpenStreetMap] Bekreft din e-postadresse" - email_confirm_html: - click_the_link: Om dette er deg, vennligst klikk på lenken under for å bekrefte endringen. - greeting: Hei, - hopefully_you: Noen (forhåpentligvis deg) ønsker å endre e-postadressen for %{server_url} til %{new_address}. - email_confirm_plain: - click_the_link: Hvis det er deg, klikk lenka nedenfor for å bekrefte endringen. - greeting: Hei, - hopefully_you_1: Noen (forhåpentligvis deg) ønsker å endre e-postadressen for - hopefully_you_2: "%{server_url} til %{new_address}." - friend_notification: - befriend_them: Du kan også legge dem til som venn på %{befriendurl}. - had_added_you: "%{user} har lagt deg til som venn på OpenStreetMap." - see_their_profile: Du kan se profilen deres på %{userurl}. - subject: "[OpenStreetMap] %{user} la deg til som en venn" - gpx_notification: - and_no_tags: og ingen merkelapper. - and_the_tags: "og følgende merkelapper:" - failure: - failed_to_import: "klarte ikke importere. Her er feilen:" - more_info_1: Mer informasjon om feil ved import av GPX og hvordan du kan unngå det - more_info_2: "de kan bli funnet hos:" - subject: "[OpenStreetMap] Feil under import av GPX" - greeting: Hei, - success: - loaded_successfully: lastet med %{trace_points} av %{possible_points} mulige punkter. - subject: "[OpenStreetMap] Vellykket import av GPX" - with_description: med beskrivelse - your_gpx_file: Det ser ut som GPX-filen din - lost_password: - subject: "[OpenStreetMap] Forespørsel om nullstilling av passord" - lost_password_html: - click_the_link: Hvis det er deg, klikk lenka nedenfor for å nullstille passordet ditt. - greeting: Hei, - hopefully_you: Noen (forhåpentligvis deg) har bedt å nullstille passordet for OpenStreetMap-kontoen knyttet til denne e-postadressen. - lost_password_plain: - click_the_link: Om dette er deg, vennligst klikk på lenken under for å tilbakestille passordet. - greeting: Hei, - hopefully_you_1: Noen (muligens deg) har bedt om å tilbakestille passordet på denne - hopefully_you_2: e-postadressser for openstreetmap.org-konto. - message_notification: - footer1: Du kan også lese meldingen på %{readurl} - footer2: og du kan svare til %{replyurl} - header: "%{from_user} har sendt deg en melding gjennom OpenStreetMap med emnet %{subject}:" - hi: Hei %{to_user}, - subject_header: "[OpenStreetMap] %{subject}" - signup_confirm: - subject: "[OpenStreetMap] Bekreft din e-postadresse" - signup_confirm_html: - ask_questions: Du kan stille spørsmål du har om OpenStreetMap på vårt spørsmål og svar-nettsted. - click_the_link: Hvis dette er deg, så er du velkommen! Klikke lenka nedenfor for å bekrefte kontoen og les videre for mer informasjon om OpenStreetMap - current_user: En liste over nåværende brukere i kategorier, basert på hvor i verden de er, er tilgjengelig fra Category:Users_by_geographical_region. - get_reading: Start å lese om OpenStreetMap på wikien, få med deg de siste nyhetene via OpenStreetMap-bloggen eller Twitter. Eller bla gjennom OpenStreetMaps grunnlegger Steve Coasts OpenGeoData-blogg for hele historien til prosjektet, som også har engelske podkaster du kan lytte til. - greeting: Hei der! - hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på - introductory_video: Du kan se en %{introductory_video_link}. - more_videos: Det er %{more_videos_link}. - more_videos_here: flere videoer her - user_wiki_page: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. - video_to_openstreetmap: introduksjonsvideo til OpenStreetMap - wiki_signup: Du vil kanskje melde deg inn i OpenStreetMap-wikien også. - signup_confirm_plain: - ask_questions: "Du kan stille spørsmål du har om OpenStreetMap på vårt spørsmål og svar-nettsted:" - blog_and_twitter: "Få med deg de siste nyhetene gjennom OpenStreetMap-bloggen eller Twitter:" - click_the_link_1: Om dette er deg, velkommen! Vennligst klikk på lenken under for å bekrefte din - click_the_link_2: konto og les videre for mer informasjon om OpenStreetMap. - current_user_1: En liste over nåværende brukere i kategorier, basert på hvor i verden - current_user_2: "de er, er tilgjengelig fra:" - greeting: Hei der! - hopefully_you: Noen (forhåpentligvis deg) ønsker å opprette en konto på - introductory_video: "Du kan se en introduksjonsvideo for OpenStreetMap her:" - more_videos: "Det er flere videoer her:" - opengeodata: "OpenGeoData.org er bloggen til OpenStreetMap-grunnlegger Steve Coast, og den har podcast-er også:" - the_wiki: "Les mer om OpenStreetMap på wikien:" - user_wiki_1: Det anbefales at du oppretter en brukerside på wiki-en som inkluderer - user_wiki_2: kategorimerker som viser hvor du er, f.eks [[Category:Users_in_London]]. - wiki_signup: "Du vil kanskje også melde deg inn i OpenStreetMap-wikien på:" - oauth: - oauthorize: - allow_read_gpx: les dine private GPS-spor. - allow_read_prefs: les brukerinnstillingene dine. - allow_to: "Tillat klientprogrammet å gjøre:" - allow_write_api: endre kartet. - allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. - allow_write_gpx: last opp GPS-spor. - allow_write_prefs: Innstillingene ble lagret. - request_access: Applikasjonen %{app_name} ber om tilgang til din konto. Sjekk om du vil at applikasjonen skal ha følgende muligheter. Du kan velge så mange eller få du vil. - revoke: - flash: Du slettet nøkkelen for %{application} - oauth_clients: - create: - flash: Vellykket registrering av informasjonen - destroy: - flash: Ødelagt klientapplikasjonsregistreringen - edit: - submit: Rediger - title: Rediger ditt programvare - form: - allow_read_gpx: les deres private GPS-spor. - allow_read_prefs: les brukerinnstillingene deres. - allow_write_api: endre kartet. - allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. - allow_write_gpx: last opp GPS-spor. - allow_write_prefs: endre brukerinnstillingene deres. - callback_url: "URL for tilbakekall:" - name: Navn - requests: "Be om følgende tillatelser fra brukeren:" - required: Påkrevet - support_url: Støtte-URL - url: URL til hovedapplikasjonen - index: - application: Applikasjonsnavn - issued_at: Utstedt - list_tokens: "Følgende nøkler er utstedt til programmer i ditt navn:" - my_apps: Mine klientapplikasjoner - my_tokens: Mine autoriserte applikasjoner - no_apps: Har du et program som du vil registrere for bruk med oss gjennom %{oauth}-standarden? Da må du først registrere ditt nettprogram før det kan gjøre OAuth-forespørsler til denne tjenesten. - register_new: Registrer din applikasjon - registered_apps: "Du har registrert følgende klientapplikasjoner:" - revoke: Tilbakekall! - title: Mine OAuth-detaljer - new: - submit: Registrer - title: Registrer en ny applikasjon - not_found: - sorry: Klarte ikke finne den %{type}-en. - show: - access_url: URL for tilgangensnøkkel - allow_read_gpx: les deres private GPS-spor. - allow_read_prefs: les brukerinnstillingene deres. - allow_write_api: endre kartet. - allow_write_diary: opprett dagbokoppføringer, kommentarer og finn venner. - allow_write_gpx: last opp GPS-spor. - allow_write_prefs: endre brukerinnstillingene deres. - authorize_url: "Godkjenn URL:" - edit: Rediger detaljer - key: "Forbrukernøkkel:" - requests: "Ber om følgende tillatelser fra brukeren:" - secret: "Forbrukerhemmelighet:" - support_notice: Vi støtter HMAC-SHA1 (anbefalt) så vel som ren tekst i ssl-modus. - title: OAuth-detaljer for %{app_name} - url: "URL for forespørelsnøkkel:" - update: - flash: Oppdaterte klientinformasjonen - site: - edit: - anon_edits_link_text: Finn ut hvorfor dette er tilfellet. - flash_player_required: Du trenger en Flash-spiller for å kunne bruke Potlatch, Flasheditoren for OpenStreetMap. Du kan laste ned Flash Player fra Adobe.com. Flere andre alternativ er også tilgjengelig for redigering av OpenStreetMap. - no_iframe_support: Nettleseren din støtter ikke HTML iframes som er nødvendig for denne egenskapen. - not_public: Du har ikke satt dine redigeringer til å være offentlige. - not_public_description: Du kan ikke lenger redigere kartet om du ikke gjør det. Du kan gjøre dine redigeringer offentlige fra din %{user_page}. - potlatch2_not_configured: Potlatch 2 har ikke blitt konfigurert - se http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 for mer informasjon - potlatch2_unsaved_changes: Du har endringer som ikke er lagret. (For å lagre i Potlatch 2, må du klikke lagre.) - potlatch_unsaved_changes: Du har ulagrede endringer. (For å lagre i Potlatch, må du fjerne markeringen av gjeldende vei eller punkt hvis du redigerer i live-modues eller klikke lagre hvis du har en lagreknapp.) - user_page_link: brukerside - index: - js_1: Du har en nettleser som ikke støtter JavaScript eller så har du slått av JavaScript. - js_2: OpenStreetMap bruker JavaScript på kartsidene. - js_3: Hvis du ikke kan slå på JavaScript, så kan du prøve de de statiske Tiles@Home-kartsidene. - license: - license_name: Creative Commons Navngivelse-Del på like vilkår 2.0 - notice: Lisensiert under lisensen %{license_name} av %{project_name} og dets bidragsytere. - project_name: OpenStreetMap-prosjekt - permalink: Permanent lenke - remote_failed: Klarte ikke redigere - forsikre deg at JOSM eller Merkaartor er lastet og fjernkontrollvalget er aktivert - shortlink: Kort lenke - key: - map_key: Kartforklaring - map_key_tooltip: Forklaring for kartet - table: - entry: - admin: Administrativ grense - allotments: Kolonihager - apron: - - terminal - - terminal - bridge: Sort kant = bru - bridleway: Ridevei - brownfield: Tidligere industriområde - building: Viktig bygning - byway: Stikkvei - cable: - - Kabelvogn - - stolheis - cemetery: Gravplass - centre: Sportssenter - commercial: Kommersielt område - common: - - Vanlig - - eng - construction: Veier under konstruksjon - cycleway: Sykkelvei - destination: Destinasjonstilgang - farm: Gård - footway: Gangvei - forest: Skog - golf: Golfbane - heathland: Heilandskap - industrial: Industriområde - lake: - - Innsjø - - reservoar - military: Militært område - motorway: Motorvei - park: Park - permissive: Betinget tilgang - pitch: Sportsarena - primary: Primær vei - private: Privat tilgang - rail: Jernbane - reserve: Naturreservat - resident: Boligområde - retail: Detaljsalgområde - runway: - - Flystripe - - taksebane - school: - - Skole - - universitet - secondary: Sekundær vei - station: Jernbanestasjon - subway: Undergrunnsbane - summit: - - Topp - - fjelltopp - tourist: Turistattraksjon - track: Spor - tram: - - Bybane - - trikk - trunk: Hovedvei - tunnel: Streket kant = tunnel - unclassified: Uklassifisert vei - unsurfaced: Vei uten dekke - wood: Ved - search: - search: Søk - search_help: "Eksempler: 'Lindesnes', 'Karl Johans gate', 'Sør-Trøndelag' og flere ..." - submit_text: Gå - where_am_i: Hvor er jeg? - where_am_i_title: Bruke søkemotoren til å beskrive gjeldende lokasjon. - sidebar: - close: Lukk - search_results: Søkeresultater - time: - formats: - friendly: "%e %B %Y kl. %H:%M" - trace: - create: - trace_uploaded: Din GPX-fil er last opp og venter på å bli satt inn i databasen. Dette skjer vanligvis innen en halvtime og en e-post blir sendt til deg når det er gjort. - upload_trace: Last opp GPS-spor - delete: - scheduled_for_deletion: Spor planlagt slettet - edit: - description: "Beskrivelse:" - download: last ned - edit: rediger - filename: "Filnavn:" - heading: Redigerer spor %{name} - map: kart - owner: "Eier:" - points: "Punkter:" - save_button: Lagre endringer - start_coord: "Startkoordinat:" - tags: "Markelapper:" - tags_help: kommaseparert - title: Redigerer spor %{name} - uploaded_at: "Lastet opp:" - visibility: "Synlighet:" - visibility_help: hva betyr dette? - list: - public_traces: Offentlig GPS-spor - public_traces_from: Offentlige GPS-spor fra %{user} - tagged_with: merket med %{tags} - your_traces: Dine GPS-spor - make_public: - made_public: Spor gjort offentlig - no_such_user: - body: Beklager, det finnes ingen bruker med navnet %{user}. Vennligst sjekk at du har stavet riktig, eller kanskje lenken du fulgte er feil. - heading: Brukeren %{user} finnes ikke - title: Ingen bruker funnet - offline: - heading: GPX-lagring er utilgjengelig - message: Systemet for opplasting og lagring av GPX-filer er ikke tilgjengelig for øyeblikket. - offline_warning: - message: Systemet for opplasting av GPX-filer er ikke tilgjengelig for øyeblikket. - trace: - ago: "%{time_in_words_ago} siden" - by: av - count_points: "%{count} punkter" - edit: rediger - edit_map: Rediger kart - identifiable: IDENTIFISERBAR - in: i - map: kart - more: mer - pending: VENTENDE - private: PRIVAT - public: OFFENTLIG - trace_details: Vis detaljer for spor - trackable: SPORBAR - view_map: Vis kart - trace_form: - description: Beskrivelse - help: Hjelp - tags: Merkelapper - tags_help: kommaseparert - upload_button: Last opp - upload_gpx: Last opp GPX-fil - visibility: Synlighet - visibility_help: hva betyr dette? - trace_header: - see_all_traces: Se alle spor - see_your_traces: Se alle dine spor - traces_waiting: Du har %{count} spor som venter på opplasting. Du bør vurdere å la disse bli ferdig før du laster opp flere spor slik at du ikke blokkerer køa for andre brukere. - upload_trace: Last opp et GPS-spor - trace_optionals: - tags: Merkelapper - trace_paging_nav: - next: Neste » - previous: « Forrige - showing_page: Viser side %{page} - view: - delete_track: Slett dette sporet - description: "Beskrivelse:" - download: last ned - edit: rediger - edit_track: Rediger dette sporet - filename: "Filnavn:" - heading: Viser spor %{name} - map: kart - none: Ingen - owner: "Eier:" - pending: VENTENDE - points: "Punkter:" - start_coordinates: "Startkoordinat:" - tags: "Markelapper:" - title: Viser spor %{name} - trace_not_found: Spor ikke funnet! - uploaded: "Lastet opp:" - visibility: "Synlighet:" - visibility: - identifiable: Identifiserbar (vist i sporlista og som identifiserbare, sorterte punkter med tidsstempel) - private: Privat (bare delt som anononyme, usorterte punkter) - public: Offentlig (vist i sporlista og som anononyme, usorterte punkter) - trackable: Sporbar (bare delt som anonyme, sorterte punkter med tidsstempel) - user: - account: - contributor terms: - agreed: Du har godkjent de nye bidragsytervilkårene - agreed_with_pd: Du har også opplyst at du anser dine redigeringer for å være offentlig eiendom (Public Domain). - heading: "Bidragsytervilkår:" - link text: hva er dette? - not yet agreed: Du har enda ikke godkjent de nye bidragsytervilkårene. - review link text: Vennligst følg denne lenken når det passer deg, for å se igjennom og godkjenne de nye bidragsytervilkårene. - current email address: "Nåværende e-postadresse:" - delete image: Fjern gjeldende bilde - email never displayed publicly: " (vis aldri offentlig)" - flash update success: Brukerinformasjon oppdatert. - flash update success confirm needed: Brukerinformasjon oppdatert. Sjekk eposten din for å bekrefte din epostadresse. - home location: "Hjemmeposisjon:" - image: "Bilde:" - image size hint: (kvadratiske bilder som er minst 100x100 fungerer best) - keep image: Behold gjeldende bilde - latitude: "Breddegrad:" - longitude: "Lengdegrad:" - make edits public button: Gjør alle mine redigeringer offentlig - my settings: Mine innstillinger - new email address: "Ny e-postadresse:" - new image: Legg til et bilde - no home location: Du har ikke skrevet inn din hjemmelokasjon. - preferred editor: Foretrukket redigeringsverktøy - preferred languages: "Foretrukne språk:" - profile description: "Profilbeskrivelse:" - public editing: - disabled: Deaktivert og kan ikke redigere data. Alle tidligere redigeringer er anonyme. - disabled link text: hvorfor can jeg ikke redigere? - enabled: Aktivert. Ikke anonym og kan redigere data. - enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits - enabled link text: hva er dette? - heading: "Offentlig redigering:" - public editing note: - heading: Offentlig redigering - text: For øyeblikket er redigeringene dine anonyme og folk kan ikke sende deg meldinger eller se posisjonen din. For å vise hva du redigerte og tillate folk å kontakte deg gjennom nettsiden, klikk på knappen nedenfor. Siden overgangen til 0.6 API-et, kan kun offentlige brukere redigere kartdata. ( Finn ut hvorfor ).
    • Din e-postadresse vil ikke bli avslørt ved Ã¥ bli offentlig.
    • Denne handlingen kan ikke omgjøres, og alle nye brukere er nÃ¥ offentlig tilgjengelig som standard.
    - replace image: Erstatt gjeldende bilde - return to profile: Returner til profil - save changes button: Lagre endringer - title: Rediger konto - update home location on click: Oppdater hjemmelokasjon når jeg klikker på kartet? - confirm: - already active: Denne kontoen har allerede blitt bekreftet. - before you start: Vi vet du sannsynligvis har hastverk med å begynne å lage kart, men før du gjør dette kan du fylle inn litt informasjon om deg selv i skjemaet under. - button: Bekreft - heading: Bekreft en brukerkonto - press confirm button: Klikk bekreftknappen nedenfor for å aktivere kontoen din. - reconfirm: Hvis det er en stund siden du registrerte deg kan det hende du må sende degselv en ny bekreftelsesepost. - success: Kontoen din er bekreftet - takk for at du registrerte deg. - unknown token: Den koden ser ikke ut til å eksistere. - confirm_email: - button: Bekreft - failure: En e-postadresse er allerede bekreftet med denne nøkkelen. - heading: Bekreft endring av e-postadresse - press confirm button: Klikk bekreftknappen nedenfor for å bekrefte din nye e-postadressse. - success: E-postadressen din er bekreftet - takk for at du registrerte deg. - confirm_resend: - failure: Fant ikke brukeren %{name}. - success: Vi har sendt en ny bekreftelsesmelding til %{email} og så snart du bekrefter kontoen din kan du begynne å lage kart.

    Om du bruker et antispamsystem som sender bekreftelsesforspørsler, kontroller at du har hvitelistet webmaster@openstreetmap.org siden vi ikke kan svar på bekreftelsesforespørsler. - filter: - not_an_administrator: Du må være administrator for å gjøre det. - go_public: - flash success: Alle dine redigeringer er nå offentlig, og du har lov til å redigere. - list: - confirm: Bekreft valgte brukere - empty: Ingen samsvarende brukere funnet - heading: Brukere - hide: Skjul valgte brukere - showing: - one: Viser side %{page} (%{first_item} av %{items}) - other: Viser side %{page} (%{first_item}-%{last_item} av %{items}) - summary: "%{name} opprettet fra %{ip_address} den %{date}" - summary_no_ip: "%{name} opprettet %{date}" - title: Brukere - login: - account not active: Beklager, kontoen din er ikke aktivert ennå.
    Bruk lenka i kontobekreftelseseposten for å aktivere kontoen din, eller be om en ny bekreftelsesepost. - account suspended: Beklager, kontoen din er deaktivert på grunn av mistenkelig aktivitet.
    Vennligst kontakt %{webmaster} hvis du ønsker å diskutere dette. - auth failure: Beklager, kunne ikke logge inn med den informasjonen - create account minute: Opprett en konto. Det tar bare ett minutt. - email or username: "E-postadresse eller brukernavn:" - heading: Logg inn - login_button: Logg inn - lost password link: Mistet passordet ditt? - new to osm: Ny på OpenStreetMap? - notice: Finn ut mer om OpenStreetMap sitt kommende bytte av lisens (oversettelser) (diskusjon) - password: "Passord:" - register now: Registrer deg nå - remember: "Huske meg:" - title: Logg inn - to make changes: For å gjøre endringer på OpenStreetMap-data, må du ha en konto. - webmaster: webmaster - logout: - heading: Logg ut fra OpenStreetMap - logout_button: Logg ut - title: Logg ut - lost_password: - email address: "E-postadresse:" - heading: Glemt passord? - help_text: Skriv inn e-postadressen du brukte for å registrere deg, og vi vil sende deg ei lenke som du kan bruke til å nullstille passordet ditt. - new password button: Nullstill passord - notice email cannot find: Klarte ikke finne den e-postadressen. Beklager. - notice email on way: Synd at du mistet det, men en e-post er på vei slik at du kan tilbakestille det snart. - title: Glemt passord - make_friend: - already_a_friend: Du er allerede venner med %{name}. - failed: Klarte ikke legge til %{name} som venn. - success: "%{name} er nå din venn." - new: - confirm email address: "Bekreft e-postadresse:" - confirm password: "Bekreft passord:" - contact_webmaster: Kontakt webmaster for å opprette en konto. Vi vil prøve å behandle forespørselen så fort som mulig. - continue: Fortsett - display name: "Visningsnavn:" - display name description: Ditt offentlig fremviste brukernavn. Du kan endre dette senere i innstillingene. - email address: "E-postadresse:" - fill_form: Fyll ut skjemaet og vi vil sende deg en e-post for å aktivere kontoen din. - flash create success message: Takk for at du registrerte deg. Vi har sendt en bekreftelsesmelding til %{email} og så snart du bekrefter kontoen din kan du begynne å lage kart.

    Om du bruker et antispamsystem som sender bekreftelsesforspørsler, kontroller at du har hvitelistet webmaster@openstreetmap.org siden vi ikke kan svar på bekreftelsesforespørsler. - heading: Opprett en brukerkonto - license_agreement: Når du bekrefter kontoen din må du godkjenne bidragsytervilkårene. - no_auto_account_create: Beklageligvis kan vi for øyeblikket ikke opprette en konto for deg automatisk. - not displayed publicly: Ikke vist offentlig (se vår personvernpolitikk) - password: "Passord:" - terms accepted: Takk for at du godtok de nye bidragsytervilkårene! - terms declined: Vi beklager at du har besluttet å ikke akseptere de nye bidragsytervilkårene. For mer informasjon, se denne wiki-siden . - title: Opprett konto - no_such_user: - body: Det er ingen bruker med navnet %{user}. Sjekk om du har skrevet navnet feil eller om lenka du klikket er feil. - heading: Brukeren %{user} finnes ikke - title: Ingen bruker funnet - popup: - friend: Venn - nearby mapper: Bruker i nærheten - your location: Din posisjon - remove_friend: - not_a_friend: "%{name} er ikke en av dine venner." - success: "%{name} ble fjernet fra dine venner" - reset_password: - confirm password: "Bekreft passord:" - flash changed: Ditt passord er endret. - flash token bad: Kunne ikke finne den nøkkelen. Sjekke URLen kanskje? - heading: Nullstill passord for %{user} - password: "Passord:" - reset: Nullstill passord - title: Nullstill passord - set_home: - flash success: Hjemmelokasjon lagret - suspended: - body: "

    \nBeklager, kontoen din har blitt automatisk deaktivert på grunn av mistenkelig aktivitet.\n

    \n

    \nDenne avgjørelsen vil bli gjennomgÃ¥tt av en administrator snart, eller du kan kontakte %{webmaster} hvis du ønsker Ã¥ diskutere dette." - heading: Konto stengt - title: Konto stengt - webmaster: webmaster - terms: - agree: Jeg godkjenner - consider_pd: I tillegg til den ovennevnte avtalen anser jeg mine bidrag for Ã¥ være i public domain - consider_pd_why: hva er dette? - decline: AvslÃ¥ - guidance: "Informasjon for Ã¥ hjelpe Ã¥ forstÃ¥ disse vilkÃ¥rene: et menneskelig lesbart sammendrag og noen uformelle oversettelser" - heading: BidragsytervilkÃ¥rene - legale_names: - france: Frankrike - italy: Italia - rest_of_world: Resten av verden - legale_select: "Velg ditt bostedsland:" - read and accept: Les avtalen nedenfor og trykk godkjenningsknapp for Ã¥ bekrefte at du godtar betingelsene i denne avtalen for dine eksisterende og kommende bidrag. - title: BidragsytervilkÃ¥r - you need to accept or decline: Les og deretter enten godta eller avslÃ¥ de nye bidragsytervilkÃ¥rene for Ã¥ fortsette. - view: - activate_user: aktiver denne brukeren - add as friend: legg til som en venn - ago: (%{time_in_words_ago} siden) - block_history: vis mottatte blokkeringer - blocks by me: blokkeringer utført av meg - blocks on me: mine blokkeringer - confirm: Bekreft - confirm_user: bekreft denne brukeren - create_block: blokker denne brukeren - created from: "Opprettet fra:" - deactivate_user: deaktiver denne brukeren - delete_user: slett denne brukeren - description: Beskrivelse - diary: dagbok - edits: redigeringer - email address: "E-postadresse:" - hide_user: skjul denne brukeren - if set location: Hvis du setter din posisjon, sÃ¥ vil et fint kart og ting vises her. Du kan sette din hjemmeposisjon pÃ¥ din %{settings_link}-side. - km away: "%{count}km unna" - latest edit: "Siste redigering %{ago}:" - m away: "%{count}m unna" - mapper since: "Bruker siden:" - moderator_history: vis tildelte blokkeringer - my diary: min dagbok - my edits: mine redigeringer - my settings: mine innstillinger - my traces: mine spor - nearby users: Andre nærliggende brukere - new diary entry: ny dagbokoppføring - no friends: Du har ikke lagt til noen venner ennÃ¥. - no nearby users: Det er ingen andre brukere som innrømmer kartlegging i ditt omrÃ¥de ennÃ¥. - oauth settings: oauth-innstillinger - remove as friend: fjern som venn - role: - administrator: Denne brukeren er en administrator - grant: - administrator: Gi administrator-tilgang - moderator: Gi moderator-tilgang - moderator: Denne brukeren er en moderator - revoke: - administrator: Fjern administrator-tilgang - moderator: fjern moderator-tilgang - send message: send melding - settings_link_text: innstillinger - spam score: "Spamresultat:" - status: "Status:" - traces: spor - unhide_user: stopp Ã¥ skjule denne brukeren - user location: Brukerens posisjon - your friends: Dine venner - user_block: - blocks_by: - empty: "%{name} har ikke blokkert noen ennÃ¥." - heading: Liste over blokkeringer av %{name} - title: Blokkeringer av %{name} - blocks_on: - empty: "%{name} har ikke blitt blokkert ennÃ¥." - heading: Liste over blokkeringer av %{name} - title: Blokkeringer av %{name} - create: - flash: Opprettet en blokkering av bruker %{name}. - try_contacting: Vennligst prøv Ã¥ kontakte brukeren før du blokkerer dem og gi dem rimelig med tid til Ã¥ svare. - try_waiting: Vennligst prøv Ã¥ gi brukeren rimelig med tid til Ã¥ svare før du blokkerer dem. - edit: - back: Vis alle blokkeringer - heading: Endrer blokkering av %{name} - needs_view: MÃ¥ brukeren logge inn før denne blokkeringen blir fjernet? - period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. - reason: Årsaken til hvorfor %{name} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og oppgi sÃ¥ mange detaljer du kan om situasjonen. Husk at ikke alle brukere forstÃ¥r felleskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. - show: Vis denne blokkeringen - submit: Oppdater blokkering - title: Endrer blokkering av %{name} - filter: - block_expired: Blokkeringen har allerede utløpt og kan ikke endres. - block_period: Blokkeringsperioden mÃ¥ være en av verdiene som kan velges fra rullegardinen. - not_a_moderator: Du mÃ¥ være en moderator for Ã¥ utføre den handlingen. - helper: - time_future: Slutter om %{time}. - time_past: Sluttet %{time} siden. - until_login: Aktiv inntil brukeren logger inn. - index: - empty: Ingen blokkeringer har blitt utført ennÃ¥. - heading: Liste over brukerblokkeringer - title: Brukerblokkeringer - model: - non_moderator_revoke: MÃ¥ være en moderator for Ã¥ tilbakekalle en blokkering. - non_moderator_update: MÃ¥ være en moderator for Ã¥ opprette eller oppdatere en blokkering. - new: - back: Vis alle blokkeringer - heading: Oppretter blokkering av %{name} - needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. - period: Hvor lenge, fra nÃ¥, brukeren vil bli blokkert fra API-en. - reason: Årsaken til at %{name} blir blokkert. Vennligst vær sÃ¥ rolig og rimelig som mulig og gi sÃ¥ mange detaljer du kan om situasjonen, og husk pÃ¥ at meldingen blir synlig for offentligheten. Husk pÃ¥ at ikke alle brukere forstÃ¥r fellesskapssjargongen sÃ¥ prøv Ã¥ bruke lekmannsuttrykk. - submit: Opprett blokkering - title: Oppretter blokkering av %{name} - tried_contacting: Jeg har kontaktet brukeren og bedt dem stoppe. - tried_waiting: Jeg har gitt brukeren rimelig med tid til Ã¥ svare pÃ¥ disse kommunikasjonene. - not_found: - back: Tilbake til indeksen - sorry: Beklager, brukerblokkeringen med ID %{id} ble ikke funnet. - partial: - confirm: Er du sikker? - creator_name: Opprettet av - display_name: Blokkert bruker - edit: Rediger - not_revoked: (ikke tilbakekalt) - reason: Årsak for blokkering - revoke: Tilbakekall! - revoker_name: Tilbakekalt av - show: Vis - status: Status - period: - one: 1 time - other: "%{count} timer" - revoke: - confirm: Er du sikker pÃ¥ at du vil tilbakekalle denne blokkeringen? - flash: Denne blokkeringen har blitt tilbakekalt. - heading: Tilbakekaller blokkering pÃ¥ %{block_on} av %{block_by} - past: Denne blokkeringen endte %{time} siden og kan ikke tilbakekalles nÃ¥. - revoke: Tilbakekall! - time_future: Denne blokkeringen ender i %{time} - title: Tilbakekaller blokkering pÃ¥ %{block_on} - show: - back: Vis alle blokkeringer - confirm: Er du sikker? - edit: Rediger - heading: "%{block_on} blokkert av %{block_by}" - needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. - reason: "Årsak for blokkering:" - revoke: Tilbakekall! - revoker: "Tilbakekaller:" - show: Vis - status: Status - time_future: Slutter om %{time} - time_past: Sluttet %{time} siden - title: "%{block_on} blokkert av %{block_by}" - update: - only_creator_can_edit: Bare moderatoren som opprettet denne blokkeringen kan endre den. - success: Blokkering oppdatert. - user_role: - filter: - already_has_role: Brukeren har allerede rollen %{role}. - doesnt_have_role: Brukeren har ikke rollen %{role}. - not_a_role: Strengen "%{role}" er ikke en gyldig rolle. - not_an_administrator: Kun administratorer kan forandre roller, og du er ikke administrator. - grant: - are_you_sure: Er du sikker pÃ¥ at du vil gi rollen `%{role}' til brukeren `%{name}'? - confirm: Bekreft - fail: Kunne ikke gi rollen "%{role}" til bruker "%{name}". Sjekk at brukeren og rollen er gyldig. - heading: Bekreft rolletildeling - title: Bekreft rolletildeling - revoke: - are_you_sure: Er du sikker pÃ¥ at du vil fjerne rollen "%{role}" fra brukeren "%{name}"? - confirm: Bekreft - fail: Kunne ikke fjerne rollen "%{role}" fra bruker "%{name}". Sjekk at bruker og rolle er gyldig. - heading: Bekreft fjerning av rolle - title: Bekreft fjerning av rolle diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 8d95f4eb6..794a40659 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -84,6 +84,7 @@ pl: cookies_needed: Wydaje się, że masz wyłączoną obsługę ciasteczek (cookies) w swojej przeglądarce internetowej – włącz ją, zanim przejdziesz dalej. setup_user_auth: blocked: Twój dostęp do API jest zablokowany. Zaloguj się do interfejsu sieciowego, aby dowiedzieć się więcej. + need_to_see_terms: Dostęp do API został czasowo zawieszony. Proszę się zalogować do interfejsu sieci, aby wyświetlić postanowienia. Nie musisz ich akceptować, ale chociaż przejrzeć. browse: changeset: changeset: "Zestaw zmian: %{id}" @@ -278,8 +279,8 @@ pl: still_editing: (nadal edytowany) view_changeset_details: Zobacz szczegóły zestawu zmian changeset_paging_nav: - next: Następna » - previous: "« Poprzednia" + next: Następna » + previous: « Poprzednia showing_page: Strona %{page} changesets: area: Obszar @@ -893,7 +894,6 @@ pl: map: base: cycle_map: Mapa Rowerowa - noname: BrakNazwy site: edit_disabled_tooltip: Powiększ, aby edytować mapę edit_tooltip: Edytuje mapę @@ -904,7 +904,7 @@ pl: layouts: community_blogs: Blogi wspólnoty community_blogs_title: Blogi członków społeczności OpenStreetMap - copyright: Prawa autorskie i licencja + copyright: Prawa autorskie i licencja documentation: Dokumentacja documentation_title: Dokumentacja projektu donate: Wspomóż projekt OpenStreetMap %{link} na fundusz rozbudowy sprzętu komputerowego. @@ -1149,6 +1149,8 @@ pl: title: Rejestracja nowej aplikacji show: edit: Edytuj szczegóły + key: "Klucz odbiorcy:" + secret: "Sekret odbiorcy:" title: Szczegóły OAuth dla %{app_name} site: edit: @@ -1325,8 +1327,8 @@ pl: trace_optionals: tags: Znaczniki trace_paging_nav: - next: Następny » - previous: "« Poprzedni" + next: Następny » + previous: « Poprzedni showing_page: Wyświetlanie strony %{page} view: delete_track: Wykasuj ten ślad diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 0f4a7cb64..612af1ac7 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -145,11 +145,11 @@ pt-BR: prev_way_tooltip: Caminho anterior paging: all: - next: "%{id} »" - prev: "« %{id}" + next: "%{id} »" + prev: « %{id} user: - next: "%{id} »" - prev: "« %{id}" + next: "%{id} »" + prev: « %{id} user: name_changeset_tooltip: Ver edições de %{user} next_changeset_tooltip: Editado posteriormente por %{user} @@ -282,8 +282,8 @@ pt-BR: still_editing: (ainda editando) view_changeset_details: Ver detalhes das alterações changeset_paging_nav: - next: Seguinte » - previous: "« Anterior" + next: Seguinte » + previous: « Anterior showing_page: Exibindo página %{page} changesets: area: Área @@ -903,8 +903,9 @@ pt-BR: base: cycle_map: Cycle Map mapnik: Mapnik - noname: Sem nomes + mapquest: MapQuest Open osmarender: Osmarender + transport_map: Mapa de transporte público overlays: maplint: Maplint site: @@ -917,7 +918,7 @@ pt-BR: layouts: community_blogs: Blogs da Comunidade community_blogs_title: Blogs de membros da comunidade OpenStreetMap - copyright: Direitos Autorais & Licença + copyright: Direitos Autorais & Licença documentation: Documentação documentation_title: Documentação do projeto donate: "Ajude o OpenStreetMap fazendo doações para o Fundo de Upgrade de Hardware: %{link}." diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml new file mode 100644 index 000000000..3fe999313 --- /dev/null +++ b/config/locales/pt-PT.yml @@ -0,0 +1,2 @@ +pt-PT: + dummy: dummy diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 58cb88089..69f8bf45c 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -213,14 +213,16 @@ pt: way_history_title: "Histórico do Trajeto: %{way_name}" changeset: changeset_paging_nav: - next: Seguinte » - previous: "« Anterior" + next: Seguinte » + previous: « Anterior changesets: area: Área comment: Comentário id: ID saved_at: Salvo em user: Utilizador + list: + description: Mudanças recentes diary_entry: diary_comment: comment_from: Comentário de %{link_user} em %{comment_created_at} @@ -625,8 +627,8 @@ pt: trace_optionals: tags: Etiquetas trace_paging_nav: - next: Próximo » - previous: "« Anterior" + next: Próximo » + previous: « Anterior showing_page: Mostrando página %{page} view: delete_track: Apagar este caminho diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 03d3ab7dd..29de0d5dd 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -225,7 +225,7 @@ ro: way_details: also_part_of: one: de asemenea parte din calea %{related_ways} - other: de asemenea parte din căile %{related_ways + other: de asemenea parte din căile %{related_ways} nodes: "Noduri:" part_of: "Parte din:" way_history: @@ -268,7 +268,7 @@ ro: delete_button: Şterge oauth: oauthorize: - request_access: Aplicația %{app_name} cere acces la contul dumneavoastră. Vă rugăm să alegeți care din următoarele capabilități le poate avea aplicația. Puteți alege cât de multe sau de puține doriți. + request_access: Aplicația %{app_name} cere acces la contul dumneavoastră, %{user}. Vă rugăm să alegeți care din următoarele permisiuni le poate avea aplicația. Puteți alege cât de multe sau cât de puține doriți. oauth_clients: edit: submit: Editează @@ -297,11 +297,11 @@ ro: no_such_user: title: Nu există acest utilizator trace_form: - description: Descriere - tags: Etichete + description: "Descriere:" + tags: "Etichete:" tags_help: use commas - upload_gpx: Încărcați fișier GPX - visibility: Vizibilitate + upload_gpx: "Încărcați fișier GPX:" + visibility: "Vizibilitate:" visibility_help: ce înseamnă asta? view: filename: "Nume fișier:" diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 54cd4f2e2..96a4a53a2 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -5,6 +5,7 @@ # Author: Aleksandr Dezhin # Author: Calibrator # Author: Chilin +# Author: Dr&mx # Author: Eleferen # Author: EugeneZelenko # Author: Ezhick @@ -69,7 +70,7 @@ ru: old_relation_member: Старый участник отношения old_relation_tag: Старый тег отношения old_way: Старая линия - old_way_node: Старый узел линии + old_way_node: Старая точка линии old_way_tag: Старый тег линии relation: Отношение relation_member: Участник отношения @@ -134,7 +135,7 @@ ru: deleted: Удалено edit: area: Править область - node: Править узел + node: Править точку relation: Править отношение way: Править линию larger: @@ -900,8 +901,9 @@ ru: base: cycle_map: Карта для велосипедистов mapnik: Mapnik - noname: Выделить улицы без названий + mapquest: MapQuest Open osmarender: Osmarender + transport_map: Транспортные карты overlays: maplint: Maplint site: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8d49eb285..a49399c4d 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -244,8 +244,8 @@ sk: still_editing: (stále sa upravuje) view_changeset_details: ZobraziÅ¥ detaily zmenového súboru changeset_paging_nav: - next: ĎalÅ¡ia » - previous: "« PredoÅ¡lá" + next: ĎalÅ¡ia » + previous: « PredoÅ¡lá showing_page: Zobrazená stránka %{page} changesets: area: OblasÅ¥ @@ -815,7 +815,6 @@ sk: map: base: cycle_map: Cyklomapa - noname: Bez mena site: edit_disabled_tooltip: PriblížiÅ¥ na editovateľnú mapu edit_tooltip: UpraviÅ¥ mapu @@ -1223,8 +1222,8 @@ sk: trace_optionals: tags: Tagy trace_paging_nav: - next: Dopredu » - previous: "« Naspäť" + next: Dopredu » + previous: « Naspäť showing_page: Strana %{page} view: delete_track: VymazaÅ¥ túto stopu diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ab36a9063..252073be3 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -271,8 +271,8 @@ sl: still_editing: (Å¡e ureja) view_changeset_details: Ogled podrobnosti paketa sprememb changeset_paging_nav: - next: Naslednja » - previous: "« PrejÅ¡nja" + next: Naslednja » + previous: « PrejÅ¡nja showing_page: Prikazovanje strani %{page} changesets: area: Področje @@ -886,7 +886,6 @@ sl: map: base: cycle_map: Kolesarska karta - noname: Brez imena site: edit_disabled_tooltip: Povečajte za urejanje zemljevida edit_tooltip: Urejanje zemljevida @@ -897,7 +896,7 @@ sl: layouts: community_blogs: Blogi skupnosti community_blogs_title: Blogi članov skupnosti OpenStreetMap - copyright: Avtorske pravice & licenca + copyright: Avtorske pravice & licenca documentation: Dokumentacija documentation_title: Dokumentacija projekta donate: Podprite OpenStreetMap z %{link} v fond za nadgradnjo strojne opreme. @@ -1356,8 +1355,8 @@ sl: trace_optionals: tags: Oznake trace_paging_nav: - next: Naslednja » - previous: "« PrejÅ¡nja" + next: Naslednja » + previous: « PrejÅ¡nja showing_page: Prikazujem stran %{page} view: delete_track: IzbriÅ¡i to sled diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 7d9e0b357..2a5d532fd 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -493,8 +493,8 @@ sq: trace_optionals: tags: Etiketa trace_paging_nav: - next: Vazhdo » - previous: "« Paraprake" + next: Vazhdo » + previous: « Paraprake showing_page: Duke shfaqun faqen %{page} view: delete_track: Fshij ket gjurm diff --git a/config/locales/sr-EC.yml b/config/locales/sr-EC.yml index e6d3e68d0..6cc93b298 100644 --- a/config/locales/sr-EC.yml +++ b/config/locales/sr-EC.yml @@ -276,8 +276,8 @@ sr-EC: still_editing: (још увек уређује) view_changeset_details: Погледај детаље скупа измена changeset_paging_nav: - next: Следећа » - previous: "« Претходна" + next: Следећа » + previous: « Претходна showing_page: Приказ странице %{page} changesets: area: Подручје @@ -382,7 +382,7 @@ sr-EC: start: add_marker: Додај маркер на мапу area_to_export: Подручје за извоз - embeddable_html: Уградиви HTML кôд + embeddable_html: Уградиви HTML код export_button: Извези export_details: Подаци Опенстритмапа су доступни под лиценцом Кријејтив комонс Ауторство-Делити под истим условима 2.0. format: Формат @@ -398,7 +398,7 @@ sr-EC: osm_xml_data: Опенстритмап XML подаци osmarender_image: Осмарендер слика output: Излаз - paste_html: Убаците HTML кôд на веб страницу да бисте приказали мапу + paste_html: Убаците HTML код за уграђивање на странице scale: Размера too_large: body: Ово подручје је превелико да би било извезено у формату XML. Увећајте приказ или изаберите мању површину. @@ -891,7 +891,8 @@ sr-EC: map: base: cycle_map: Бициклистичка мапа - noname: Безимене улице + mapquest: Мапквест опен + transport_map: Саобраћајна карта site: edit_disabled_tooltip: Увећајте приказ да бисте уредили мапу edit_tooltip: Уредите мапу @@ -1096,9 +1097,9 @@ sr-EC: hopefully_you: Неко (вероватно ви) желео би да отвори налог на introductory_video: Можете погледати %{introductory_video_link}. more_videos: Постоји %{more_videos_link}. - more_videos_here: више видео снимака овде + more_videos_here: више видео-снимака овде user_wiki_page: Препоручујемо вам да направите корисничку страницу на викију која укључује ознаке категорија које означавају где се налазите, као на пример [[Category:Users_in_London]]. - video_to_openstreetmap: уводни видео снимак о Опенстритмапу + video_to_openstreetmap: уводни видео-снимак за Опенстритмап wiki_signup: Можете и да отворите налог на викију. signup_confirm_plain: ask_questions: "Можете поставити било које питање о Опенстритмапу на нашим страницама за питања и одговоре:" @@ -1109,8 +1110,8 @@ sr-EC: current_user_2: "где живе, доступан је на:" greeting: Поздрав! hopefully_you: Неко (вероватно ви) желео би да отвори налог на - introductory_video: "Уводни видео снимак о Опенстритмапу можете погледати овде:" - more_videos: "Овде се налази још више видео снимака:" + introductory_video: "Погледајте уводни видео-снимак за Опенстритмап овде:" + more_videos: "Више видео-снимака можете наћи овде:" opengeodata: "OpenGeoData.org је блог Стива Коста, оснивача Опенстритмапа:" the_wiki: "Прочитајте више о Опенстритмапу на викију:" user_wiki_1: Препоручујемо вам да направите корисничку страницу која укључује @@ -1338,9 +1339,9 @@ sr-EC: pending: НА_ЧЕКАЊУ private: ПРИВАТНИ public: ЈАВНИ - trace_details: Погледај детаље трага + trace_details: Погледајте детаље о трагу trackable: УТВРДЉИВ - view_map: Погледај мапу + view_map: Погледај карту trace_form: description: "Опис:" help: Помоћ @@ -1358,8 +1359,8 @@ sr-EC: trace_optionals: tags: Ознаке trace_paging_nav: - next: Следећи » - previous: "« Претходни" + next: Следећи » + previous: « Претходни showing_page: Приказ странице %{page} view: delete_track: Обриши овај траг @@ -1576,7 +1577,7 @@ sr-EC: consider_pd: Према горенаведеном уговору, сматрам да моји доприноси припадају јавном власништву consider_pd_why: шта је ово? decline: Одбаци - guidance: "Подаци који ће вам помоћи да разумете услове: читљиви сажетак и неформални преводи" + guidance: "Подаци који ће вам помоћи да разумете ове услове: кратак опис и неки неформални преводи" heading: Услови уређивања legale_names: france: Француска diff --git a/config/locales/sr-EL.yml b/config/locales/sr-EL.yml new file mode 100644 index 000000000..9cd2da71f --- /dev/null +++ b/config/locales/sr-EL.yml @@ -0,0 +1,1742 @@ +# Messages for Serbian (Latin script) (‪Srpski (latinica)‬) +# Exported from translatewiki.net +# Export driver: syck-pecl +# Author: Rancher +sr-EL: + activerecord: + attributes: + diary_comment: + body: Tekst + diary_entry: + language: Jezik + latitude: Geografska Å¡irina + longitude: Geografska dužina + title: Naslov + user: Korisnik + friend: + friend: Prijatelj + user: Korisnik + message: + body: Tekst + recipient: Primalac + sender: PoÅ¡iljalac + title: Naslov + trace: + description: Opis + latitude: Geografska Å¡irina + longitude: Geografska dužina + name: Ime + public: Javno + size: Veličina + user: Korisnik + visible: Vidljivo + user: + active: Aktivan + description: Opis + display_name: Ime prikaza + email: E-poÅ¡ta + languages: Jezici + pass_crypt: Lozinka + models: + acl: Upravljanje pristupom + changeset: Skup izmena + changeset_tag: Oznaka skupa izmena + country: Zemlja + diary_comment: Komentar na dnevnik + diary_entry: Unos u dnevniku + friend: Prijatelj + language: Jezik + message: Poruka + node: Čvor + node_tag: Oznaka čvora + notifier: Izvestilac + old_node: Stari čvor + old_node_tag: Oznaka starog čvora + old_relation: Stari odnos + old_relation_member: Član starog odnosa + old_relation_tag: Oznaka starog odnosa + old_way: Stara putanja + old_way_node: Čvor stare putanje + old_way_tag: Oznaka starog puta + relation: Odnos + relation_member: Član odnosa + relation_tag: Oznaka odnosa + session: Sesija + trace: Trag + tracepoint: Tačka traga + tracetag: Oznaka traga + user: Korisnik + user_preference: Korisničke postavke + user_token: Korisnički znak + way: Putanja + way_node: Čvor putanje + way_tag: Oznaka puta + application: + require_cookies: + cookies_needed: Izgleda da ste onemogućili kolačiće. Omogućite ih pre nego Å¡to nastavite. + setup_user_auth: + blocked: VaÅ¡ pristup API-ju je blokiran. Prijavite se da saznate viÅ¡e. + need_to_see_terms: VaÅ¡ pristup API-ju je privremeno ukinut. Prijavite se da biste pogledali uslove uređivanja. Ne morate da ih prihvatite, već samo da ih vidite. + browse: + changeset: + changeset: "Skup izmena: %{id}" + changesetxml: XML skup izmena + download: Preuzmi %{changeset_xml_link} ili %{osmchange_xml_link} + feed: + title: Skup izmena %{id} + title_comment: Skup izmena %{id} – %{comment} + osmchangexml: osmChange XML + title: Skup izmena + changeset_details: + belongs_to: "Pripada:" + bounding_box: "Granični okvir:" + box: okvir + closed_at: "Zatvoreno:" + created_at: "Napravljeno:" + has_nodes: + few: "Ima sledeća %{count} čvora:" + one: "Ima sledeći čvor:" + other: "Ima sledećih %{count} čvorova:" + has_relations: + few: "Ima sledeća %{count} odnosa:" + one: "Ima sledeći odnos:" + other: "Ima sledećih %{count} odnosa:" + has_ways: + few: "Ima sledeće %{count} putanje:" + one: "Ima sledeću putanju:" + other: "Ima sledećih %{count} putanja:" + no_bounding_box: Nijedan granični okvir nije sačuvan za ovaj skup izmena. + show_area_box: Prikaži okvir područja + common_details: + changeset_comment: "Komentar:" + deleted_at: "Obrisano:" + deleted_by: "Obrisao:" + edited_at: "Izmenjeno:" + edited_by: "Izmenio:" + in_changeset: "U skupu izmena:" + version: "Izdanje:" + containing_relation: + entry: Odnos %{relation_name} + entry_role: Odnos %{relation_name} (kao %{relation_role}) + map: + deleted: Obrisano + edit: + area: Uredi područje + node: Uredi čvor + relation: Uredi odnos + way: Uredi putanju + larger: + area: Pogledaj područje na većoj mapi + node: Pogledaj čvor na većoj mapi + relation: Pogledaj odnos na većoj mapi + way: Pogledaj putanju na većoj mapi + loading: Učitavam… + navigation: + all: + next_changeset_tooltip: Sledeći skup izmena + next_node_tooltip: Sledeći čvor + next_relation_tooltip: Sledeći odnos + next_way_tooltip: Sledeća putanja + prev_changeset_tooltip: Prethodni skup izmena + prev_node_tooltip: Prethodni čvor + prev_relation_tooltip: Prethodni odnos + prev_way_tooltip: Prethodna putanja + user: + name_changeset_tooltip: Pogledaj izmene korisnika %{user} + next_changeset_tooltip: Sledeća izmena korisnika %{user} + prev_changeset_tooltip: Prethodna izmena korisnika %{user} + node: + download: "%{download_xml_link}, %{view_history_link} ili %{edit_link}" + download_xml: Preuzmi XML + edit: uredi + node: Čvor + node_title: "Čvor: %{node_name}" + view_history: prikaži istoriju + node_details: + coordinates: "Koordinate:" + part_of: "Deo:" + node_history: + download: "%{download_xml_link} ili %{view_details_link}" + download_xml: Preuzmi XML + node_history: Istorija čvora + node_history_title: "Istorija čvora: %{node_name}" + view_details: prikaži detalje + not_found: + sorry: Žao nam je, ali %{type} s IB %{id} nije pronađen. + type: + changeset: skup izmena + node: čvor + relation: odnos + way: putanja + paging_nav: + of: od + showing_page: Prikaz stranice + relation: + download: "%{download_xml_link} ili %{view_history_link}" + download_xml: Preuzmi XML + relation: Odnos + relation_title: "Odnos: %{relation_name}" + view_history: prikaži istoriju + relation_details: + members: "Članovi:" + part_of: "Deo:" + relation_history: + download: "%{download_xml_link} ili %{view_details_link}" + download_xml: Preuzmi XML + relation_history: Istorija odnosa + relation_history_title: "Istorija odnosa: %{relation_name}" + view_details: pogledaj detalje + relation_member: + entry_role: "%{type} %{name} kao %{role}" + type: + node: Čvor + relation: Odnos + way: Putanja + start: + manually_select: Ručno izaberite drugo područje + view_data: Pogledaj podatke trenutnog prikaza mape + start_rjs: + data_frame_title: Podaci + data_layer_name: Podaci + details: Detalji + drag_a_box: Prevucite okvir na mapi da biste izabrali područje + edited_by_user_at_timestamp: Izmenio [[user]] u [[timestamp]] + hide_areas: Sakrij područja + history_for_feature: Istorija za [[feature]] + load_data: Učitaj podatke + loaded_an_area_with_num_features: "Učitali ste područje koje sadrži [[num_features]] mogućnosti. Neki pregledači se ne mogu nositi s tolikom količinom podataka. Oni najbolje rade kada prikazuju manje od sto mogućnosti istovremeno: ako radite joÅ¡ neÅ¡to, to može usporiti pregledač ili ga zakočiti. Ako ste sigurni da želite da prikažete ove podatke, možete to uraditi klikom na dugme ispod." + loading: Učitavam… + manually_select: Ručno izaberite drugo područje + object_list: + api: Dobavi ovo područje pomoću API-ja + back: Prikaži spisak predmeta + details: Detalji + heading: Spisak predmeta + history: + type: + node: Čvor [[id]] + way: Putanja [[id]] + selected: + type: + node: Čvor [[id]] + way: Putanja [[id]] + type: + node: Čvor + way: Putanja + private_user: privatni korisnik + show_areas: Prikaži područja + show_history: Prikaži istoriju + unable_to_load_size: "Ne mogu da učitam: granična veličina okvira [[bbox_size]] je prevelika (mora biti manja od %{max_bbox_size})" + wait: Pričekajte… + zoom_or_select: Uvećajte ili izaberite područje koje želite da pogledate + tag_details: + tags: "Oznake:" + wiki_link: + key: Stranica s opisom za oznaku %{key} + tag: Stranica s opisom za oznaku %{key}=%{value} + wikipedia_link: "%{page} članak na Vikipediji" + timeout: + sorry: Žao nam je, ali dobavljanje podataka za %{type} s IB %{id} predugo traje. + type: + changeset: skup izmena + node: tačka + relation: odnos + way: putanja + way: + download: "%{download_xml_link}, %{view_history_link} ili %{edit_link}" + download_xml: Preuzmi XML + edit: uredi + view_history: pogledaj istoriju + way: Putanja + way_title: "Putanja: %{way_name}" + way_details: + also_part_of: + one: takođe deo putanje %{related_ways} + other: takođe deo putanja %{related_ways} + nodes: "Čvorovi:" + part_of: "Deo:" + way_history: + download: "%{download_xml_link} ili %{view_details_link}" + download_xml: Preuzmi XML + view_details: pogledaj detalje + way_history: Istorija putanje + way_history_title: "Istorija putanje: %{way_name}" + changeset: + changeset: + anonymous: Anonimno + big_area: (veliko) + no_comment: (nema komentara) + no_edits: (nema izmena) + show_area_box: pogledaj okvir područja + still_editing: (joÅ¡ uvek uređuje) + view_changeset_details: Pogledaj detalje skupa izmena + changeset_paging_nav: + next: Sledeća » + previous: "« Prethodna" + showing_page: Prikaz stranice %{page} + changesets: + area: Područje + comment: Komentar + id: IB + saved_at: Sačuvano u + user: Korisnik + list: + description: SkoraÅ¡nje izmene + description_bbox: Skupovi izmena unutar %{bbox} + description_user: Skupovi izmena korisnika %{user} + description_user_bbox: Skupovi izmena korisnika %{user} unutar %{bbox} + heading: Skupovi izmena + heading_bbox: Skupovi izmena + heading_user: Skupovi izmena + heading_user_bbox: Skupovi izmena + title: Skupovi izmena + title_bbox: Skupovi izmena unutar %{bbox} + title_user: Skupovi izmena korisnika %{user} + title_user_bbox: Skupovi izmena korisnika %{user} unutar %{bbox} + timeout: + sorry: Žao nam je, ali spisak izmena koji ste zahtevali je predugačak. + diary_entry: + diary_comment: + comment_from: Komentar korisnika %{link_user} u %{comment_created_at} + confirm: Potvrdi + hide_link: Sakrij ovaj komentar + diary_entry: + comment_count: + one: 1 komentar + other: "%{count} komentara" + comment_link: ProkomentariÅ¡i ovaj unos + confirm: Potvrdi + edit_link: Uredi ovaj unos + hide_link: Sakrij ovaj unos + posted_by: Postavio korisnik %{link_user} u %{created} na %{language_link} + reply_link: Odgovori na ovaj unos + edit: + body: "Tekst:" + language: "Jezik:" + latitude: "Geografska Å¡irina:" + location: "Lokacija:" + longitude: "Geografska dužina:" + marker_text: Lokacija unosa u dnevniku + save_button: Sačuvaj + subject: "Tema:" + title: Uredi unos u dnevniku + use_map_link: koristi mapu + feed: + all: + description: SkoraÅ¡nji unosi u dnevniku od korisnika Openstritmapa + title: Unosi u dnevniku Openstritmapa + language: + description: SkoraÅ¡nji unosi u dnevniku od korisnika na %{language_name} + title: Unosi u dnevniku na %{language_name} + user: + description: SkoraÅ¡nji unosi u dnevniku od korisnika %{user} + title: Unosi u dnevniku za korisnika %{user} + list: + in_language_title: Dnevnici na %{language} + new: Novi unos u dnevniku + new_title: ZapiÅ¡ite novi unos u korisnički dnevnik + newer_entries: Noviji unosi + no_entries: Nema unosa u dnevniku + older_entries: Stariji unosi + recent_entries: "SkoraÅ¡nji unosi u dnevniku:" + title: Korisnički dnevnici + user_title: Dnevnik korisnika %{user} + location: + edit: Uredi + location: "Lokacija:" + view: Pogledaj + new: + title: Novi unos u dnevniku + no_such_entry: + body: Žao nam je, ali nema unosa u dnevniku ili komentar s IB %{id}. Proverite ispravnost upisa ili veze koju ste kliknuli. + heading: "Nema unosa s IB: %{id}" + title: Nema takvog unosa u dnevniku + no_such_user: + body: Žao nam je, ali nema korisnika s imenom %{user}. Proverite ispravnost upisa ili veze koju ste kliknuli. + heading: Korisnik %{user} ne postoji + title: Nema takvog korisnika + view: + leave_a_comment: Ostavite komentar + login: Prijavite se + login_to_leave_a_comment: "%{login_link} da ostavite komentar" + save_button: Sačuvaj + title: Dnevnik korisnika %{user} | %{title} + user_title: Dnevnik korisnika %{user} + editor: + default: Podrazumevano (trenutno %{name}) + potlatch: + description: Potlač 1 (uređivač u pregledaču) + name: Potlač 1 + potlatch2: + description: Potlač 2 (uređivač u pregledaču) + name: Potlač 2 + remote: + description: Daljinsko upravljanje (JOSM ili Merkaartor) + name: Daljinsko upravljanje + export: + start: + add_marker: Dodaj marker na mapu + area_to_export: Područje za izvoz + embeddable_html: Ugradivi HTML kôd + export_button: Izvezi + export_details: Podaci Openstritmapa su dostupni pod licencom Krijejtiv komons Autorstvo-Deliti pod istim uslovima 2.0. + format: Format + format_to_export: Format za izvoz + image_size: Veličina slike + latitude: "GÅ :" + licence: Licenca + longitude: "GD:" + manually_select: Ručno izaberite drugo područje + mapnik_image: Mapnik slika + max: najviÅ¡e + options: Mogućnosti + osm_xml_data: Openstritmap XML podaci + osmarender_image: Osmarender slika + output: Izlaz + paste_html: Ubacite HTML kod za ugrađivanje na stranice + scale: Razmera + too_large: + body: Ovo područje je preveliko da bi bilo izvezeno u formatu XML. Uvećajte prikaz ili izaberite manju povrÅ¡inu. + heading: Područje je preveliko + zoom: Uvećanje + start_rjs: + add_marker: Dodaj marker na mapu + change_marker: Promeni položaj markera + click_add_marker: Kliknite na mapu da biste dodali marker + drag_a_box: Prevucite okvir na mapi da biste izabrali područje + export: Izvezi + manually_select: Ručno izaberite drugo područje + view_larger_map: Pogledaj veću mapu + geocoder: + description: + title: + geonames: Lokacija iz Geografskih imena + osm_namefinder: "%{types} iz Tragača naziva" + osm_nominatim: Lokacija iz Nominatima + types: + cities: Gradovi + places: Mesta + towns: VaroÅ¡ice + description_osm_namefinder: + prefix: "%{distance} %{direction} od %{type}" + direction: + east: istočno + north: severno + north_east: severoistočno + north_west: severozapadno + south: južno + south_east: jugoistočno + south_west: jugozapadno + west: zapadno + distance: + one: oko jednog kilometra + other: oko %{count} kilometra + zero: manje od jednog kilometra + results: + more_results: ViÅ¡e rezultata + no_results: Nema rezultata + search: + title: + ca_postcode: Rezultati iz Geokodera + geonames: Rezultati iz Geografskih imena + latlon: Rezultati iz Internala + osm_namefinder: Rezultati iz Tragača naziva + osm_nominatim: Rezultati iz Nominatima + uk_postcode: Rezultati iz NPEMap-a + us_postcode: Rezultati iz Geokodera + search_osm_namefinder: + suffix_parent: "%{suffix} (%{parentdistance} %{parentdirection} od %{parentname})" + suffix_place: ", %{distance} %{direction} od %{placename}" + search_osm_nominatim: + prefix: + amenity: + airport: Aerodrom + arts_centre: Umetnički centar + atm: Bankomat + auditorium: Dvorana + bank: Banka + bar: Bar + bench: Klupa + bicycle_parking: Biciklistički parking + bicycle_rental: Iznajmljivanje bicikla + brothel: Javna kuća + bureau_de_change: Menjačnica + bus_station: Autobuska stanica + cafe: Kafe + car_rental: Iznajmljivanje automobila + car_sharing: Zajedničko korišćenje automobila + car_wash: Auto-perionica + casino: Kazino + cinema: Bioskop + clinic: Klinika + club: Klub + college: Fakultet + community_centre: DruÅ¡tveni centar + courthouse: Sud + crematorium: Krematorijum + dentist: Zubar + doctors: Doktor + dormitory: Studentski dom + drinking_water: Pijaća voda + driving_school: Auto-Å¡kola + embassy: Ambasada + emergency_phone: Telefon za hitne slučajeve + fast_food: Brza hrana + ferry_terminal: Skela + fire_hydrant: Hidrant + fire_station: Vatrogasna stanica + fountain: Fontana + fuel: Benzinska pumpa + grave_yard: Groblje + gym: Fitnes centar + hall: Hala + health_centre: Dom zdravlja + hospital: Bolnica + hotel: Hotel + hunting_stand: Lovački dom + ice_cream: Prodavnica sladoleda + kindergarten: ObdaniÅ¡te + library: Biblioteka + market: Pijaca + marketplace: Pijaca + mountain_rescue: Gorska služba + nightclub: 'Noćni klub' + nursery: Jaslice + nursing_home: Starački dom + office: Poslovnica + park: Park + parking: Parking + pharmacy: Apoteka + place_of_worship: Mesto bogosluženja + police: Policija + post_box: PoÅ¡tansko sanduče + post_office: PoÅ¡ta + preschool: PredÅ¡kolska ustanova + prison: Zatvor + pub: Pab + public_building: Ustanova + public_market: Pijaca + reception_area: Prijemno područje + recycling: Mesto za reciklažu + restaurant: Restoran + retirement_home: Starački dom + sauna: Sauna + school: Å kola + shelter: SkloniÅ¡te + shop: Prodavnica + shopping: Trgovački centar + social_club: DruÅ¡tveni klub + studio: Studio + supermarket: Supermarket + taxi: Taksi + telephone: Telefonska govornica + theatre: PozoriÅ¡te + toilets: Toaleti + townhall: Gradska skupÅ¡tina + university: Univerzitet + vending_machine: Automat + veterinary: Veterinarska hirurgija + village_hall: Seoski dom + waste_basket: Korpa za otpatke + wifi: Vi-Fi pristup + youth_centre: Dom omladine + boundary: + administrative: Administrativna granica + building: + apartments: Stambeni blok + block: Blok zgrada + bunker: Bunker + chapel: Kapela + church: Crkva + city_hall: Gradska skupÅ¡tina + commercial: Poslovna zgrada + dormitory: Studentski dom + entrance: Ulaz u zgradu + faculty: Zgrada fakulteta + farm: Zgrada farme + flats: Stanovi + garage: Garaža + hall: Hala + hospital: Bolnica + hotel: Hotel + house: Kuća + industrial: Industrijska zgrada + office: Poslovnica + public: Javna zgrada + residential: Stambena zgrada + retail: Maloprodajna radnja + school: Å kola + shop: Prodavnica + stadium: Stadion + store: Prodavnica + terrace: Terasa + tower: Toranj + train_station: Železnička stanica + university: Univerzitetska zgrada + highway: + bridleway: Konjička staza + bus_guideway: Autobuska traka + bus_stop: Autobuska stanica + byway: Prečica + construction: Auto-put u izgradnji + cycleway: Biciklistička staza + distance_marker: Oznaka udaljenosti + emergency_access_point: Izlaz za slučaj opasnosti + footway: PeÅ¡ačka staza + ford: Gaz + gate: Kapija + living_street: Ulica smirenog prometa + minor: Drugorazredni put + motorway: Auto-put + motorway_junction: Petlja + motorway_link: Moto-put + path: Staza + pedestrian: PeÅ¡ačka staza + platform: Platforma + primary: Glavni put + primary_link: Glavni put + raceway: Trkačka staza + residential: Ulica + road: Put + secondary: Sporedni put + secondary_link: Sporedni put + service: Servisni put + services: Usluge na auto-putu + steps: Stepenice + stile: Prelaz preko ograde + tertiary: Lokalni put + track: Makadam + trail: Staza + trunk: Magistralni put + trunk_link: Magistralni put + unclassified: Nekategorisani put + unsurfaced: Neasfaltirani put + historic: + archaeological_site: ArheoloÅ¡ko nalaziÅ¡te + battlefield: BojiÅ¡te + boundary_stone: Granični kamen + building: Zgrada + castle: Dvorac + church: Crkva + house: Kuća + icon: Ikona + manor: Plemićko imanje + memorial: Spomenik + mine: Rudnik + monument: Spomenik + museum: Muzej + ruins: RuÅ¡evine + tower: Toranj + wayside_cross: KrajputaÅ¡ + wayside_shrine: Usputno svetiÅ¡te + wreck: Olupina + landuse: + allotments: BaÅ¡te + basin: Basen + brownfield: ZemljiÅ¡te za prenamenu + cemetery: Groblje + commercial: Poslovno područje + conservation: ZaÅ¡tićeno područje + construction: GradiliÅ¡te + farm: Farma + farmland: Polje + farmyard: Farma + forest: Å uma + grass: Trava + greenfield: Zeleno polje + industrial: Industrijsko područje + landfill: Deponija + meadow: Livada + military: Vojno područje + mine: Rudnik + mountain: Planina + nature_reserve: Rezervat prirode + park: Park + piste: SkijaÅ¡ka staza + plaza: Å etaliÅ¡te + quarry: Kamenolom + railway: Železnička pruga + recreation_ground: Rekreacijsko područje + reservoir: Rezervoar + residential: Stambeno područje + retail: Maloprodaja + village_green: Seosko polje + vineyard: Vinograd + wetland: Močvara + wood: Å uma + leisure: + beach_resort: Morsko odmaraliÅ¡te + common: OpÅ¡tinsko zemljiÅ¡te + fishing: Ribolovno područje + garden: BaÅ¡ta + golf_course: Golf teren + ice_rink: KlizaliÅ¡te + marina: Marina + miniature_golf: Mini golf + nature_reserve: Rezervat prirode + park: Park + pitch: Sportsko igraliÅ¡te + playground: IgraliÅ¡te + recreation_ground: Rekreacijsko područje + slipway: Navoz + sports_centre: Sportski centar + stadium: Stadion + swimming_pool: Bazen + track: Staza za trčanje + water_park: Vodeni park + natural: + bay: Zaliv + beach: Plaža + cape: Rt + cave_entrance: Ulaz u pećinu + channel: Kanal + cliff: Litica + coastline: Obala + crater: Krater + feature: Obeležje + fell: Brdo + fjord: Fjord + geyser: Gejzir + glacier: Glečer + heath: Ravnica + hill: Brdo + island: Ostrvo + land: ZemljiÅ¡te + marsh: Močvara + moor: Močvara + mud: Blato + peak: Vrh + point: Tačka + reef: Greben + ridge: Greben + river: Reka + rock: Stena + scree: Osulina + scrub: GuÅ¡tara + shoal: Sprud + spring: Izvor + strait: Moreuz + tree: Drvo + valley: Dolina + volcano: Vulkan + water: Voda + wetland: Močvara + wetlands: Močvara + wood: Å uma + place: + airport: Aerodrom + city: Grad + country: Država + county: Okrug + farm: Farma + hamlet: Zaselak + house: Kuća + houses: Kuće + island: Ostrvo + islet: Hrid + locality: Lokalitet + moor: Močvara + municipality: OpÅ¡tina + postcode: PoÅ¡tanski broj + region: Područje + sea: More + state: Savezna država + subdivision: Podgrupa + suburb: Predgrađe + town: VaroÅ¡ica + unincorporated_area: Slobodna zemlja + village: Selo + railway: + abandoned: NapuÅ¡tena železnica + construction: Železnička pruga u izgradnji + disused: NapuÅ¡tena železnica + disused_station: NapuÅ¡tena železnička stanica + funicular: Žičana železnica + halt: Železničko stajaliÅ¡te + historic_station: Istorijska železnička stanica + junction: Železnički čvor + level_crossing: Pružni prelaz + light_rail: Laka železnica + monorail: Jednotračna pruga + narrow_gauge: Uskotračna pruga + platform: Železnička platforma + preserved: Očuvana železnica + spur: Pruga + station: Železnička stanica + subway: Metro stanica + subway_entrance: Ulaz u metro + switch: Skretnica + tram: Tramvaj + tram_stop: Tramvajsko stajaliÅ¡te + yard: Ranžirna stanica + shop: + alcohol: Trgovina pićem + apparel: Trgovina odećom + art: Atelje + bakery: Pekara + beauty: Parfimerija + beverages: Prodavnica pića + bicycle: Prodavnica bicikala + books: Knjižara + butcher: Mesara + car: Auto-kuća + car_dealer: Auto-diler + car_parts: Auto-delovi + car_repair: Auto-servis + carpet: Prodavnica tepiha + charity: Dobrotvorna prodavnica + chemist: Apotekar + clothes: Butik + computer: Računarska oprema + confectionery: Poslastičarnica + convenience: PotrepÅ¡tine + copyshop: Kopirnica + cosmetics: Kozmetičarska radnja + department_store: Robna kuća + discount: Diskont + doityourself: Uradi sam + drugstore: Drogerija + dry_cleaning: Hemijsko čišćenje + electronics: Elektronska oprema + estate_agent: Agent za nekretnine + farm: Poljoprivredna apoteka + fashion: Modna prodavnica + fish: Ribarnica + florist: Cvećara + food: Bakalnica + funeral_directors: Pogrebno preduzeće + furniture: NameÅ¡taj + gallery: Galerija + garden_centre: Vrtni centar + general: Prodavnica meÅ¡ovite robe + gift: Suvenirnica + greengrocer: Piljarnica + grocery: Bakalnica + hairdresser: Frizerski salon + hardware: Gvožđara + hifi: Muzička oprema + insurance: Osiguranje + jewelry: Zlatara + kiosk: Kiosk + laundry: Perionica rublja + mall: Tržni centar + market: Market + mobile_phone: Prodavnica mobilnih telefona + motorcycle: Prodavnica motocikala + music: Muzička prodavnica + newsagent: Novinar + optician: Optičar + organic: Prodavnica zdrave hrane + outdoor: Å tand + pet: Prodavnica kućnih ljubimaca + photo: Fotografska radnja + salon: Salon + shoes: Prodavnica obuće + shopping_centre: Tržni centar + sports: Sportska oprema + stationery: Papirnica + supermarket: Supermarket + toys: Prodavnica igračaka + travel_agency: Turistička agencija + video: Videoteka + wine: Trgovina pićem + tourism: + alpine_hut: Planinarski dom + artwork: Galerija + attraction: Atrakcija + bed_and_breakfast: Polupansion + cabin: Koliba + camp_site: Kamp + caravan_site: Kamp-prikolice + chalet: Planinska koliba + guest_house: Gostinska kuća + hostel: Hostel + hotel: Hotel + information: Podaci + lean_to: SkloniÅ¡te + motel: Motel + museum: Muzej + picnic_site: Mesto za piknik + theme_park: Tematski park + valley: Dolina + viewpoint: Vidikovac + zoo: ZooloÅ¡ki vrt + waterway: + boatyard: BrodogradiliÅ¡te + canal: Kanal + connector: Spoj vodnih puteva + dam: Brana + derelict_canal: Odbačeni kanal + ditch: Jarak + dock: Dok + drain: Odvod + lock: Brana + lock_gate: Vrata brane + mineral_spring: Mineralni izvor + mooring: SidriÅ¡te + rapids: Brzaci + river: Reka + riverbank: Rečna obala + stream: Potok + wadi: Suvo korito reke + water_point: Tačka vodotoka + waterfall: Vodopad + weir: Brana + javascripts: + map: + base: + cycle_map: Biciklistička mapa + mapquest: Mapkvest open + transport_map: Saobraćajna karta + site: + edit_disabled_tooltip: Uvećajte prikaz da biste uredili mapu + edit_tooltip: Uredite mapu + edit_zoom_alert: Morate uvećati prikaz da biste uredili mapu + history_disabled_tooltip: Uvećajte prikaz da biste videli izmene za ovo područje + history_tooltip: Pogledajte izmene za ovo područje + history_zoom_alert: Morate uvećati prikaz da biste videli izmene za ovo područje + layouts: + community_blogs: Blogovi zajednice + community_blogs_title: Blogovi članova zajednice + copyright: Autorska prava i licenca + documentation: Dokumentacija + documentation_title: Dokumentacija projekta + donate: Pomozite nam tako Å¡to ćete %{link} radi održavanja potrebnog hardvera. + donate_link_text: priložiti novac + edit: Uredi + edit_with: Uredi uređivačem %{editor} + export: Izvezi + export_tooltip: Izvezite podatke mape + foundation: Zadužbina + foundation_title: Zadužbina Openstritmap + gps_traces: GPS tragovi + gps_traces_tooltip: Upravljajte GPS tragovima + help: Pomoć + help_centre: Centar za pomoć + help_title: Stranica pomoći za projekat + history: Istorija + home: dom + home_tooltip: Idi na lokaciju doma + inbox: primljene (%{count}) + inbox_tooltip: + one: VaÅ¡e sanduče sadrži jednu nepročitanu poruku + other: VaÅ¡e sanduče sadrži %{count} nepročitane poruke + zero: VaÅ¡e sanduče ne sadrži nepročitane poruke + intro_1: Openstritmap je slobodna karta celog sveta. Sačinjavaju je korisnici kao Å¡to ste vi. + intro_2: Openstritmap vam omogućava da pregledate, uređujete i koristite geografske podatke s bilo kog mesta na zemlji. + intro_3: Održavanje Openstritmapa podržava %{ucl}, %{ic} i %{bytemark}. Ostale pristalice projekta su na spisku %{partners}. + intro_3_ic: Londonski kraljevski koledž + intro_3_partners: viki + license: + title: Podaci Openstritmapa su objavljeni pod licencom Krijejtiv komons Autorstvo-Deliti pod istim uslovima 2.0 + log_in: prijavi me + log_in_tooltip: Prijavite se s postojećim nalogom + logo: + alt_text: Logotip Openstritmapa + logout: odjavi me + logout_tooltip: Odjavite se + make_a_donation: + text: Priložite novac + title: Podržite Openstritmap novčanim prilogom + osm_offline: Baza podataka Openstritmapa je trenutno nedostupna dok se ne zavrÅ¡e važni radovi na održavanju. + osm_read_only: Zbog radova na održavanju baze podataka Openstritmapa, istu trenutno nije moguće menjati. + sign_up: otvori nalog + sign_up_tooltip: Otvorite nalog da biste uređivali + sotm2011: Dođite na Konferenciju Openstritmapa 2011, Stanje mape, od 9. do 11. septembra u Denveru! + tag_line: Slobodna viki mapa sveta + user_diaries: Dnevnici + user_diaries_tooltip: Pogledajte korisničke dnevnike + view: Pregled + view_tooltip: Pogledajte mapu + welcome_user: Dobro doÅ¡li, %{user_link} + welcome_user_link_tooltip: VaÅ¡a korisnička stranica + wiki: viki + wiki_title: Viki stranice projekta + license_page: + foreign: + english_link: engleskog originala + text: U slučaju sukoba između prevedene stranice i %{english_original_link}, engleska stranica ima prednost + title: O prevodu + legal_babble: "

    Autorska prava i licenca

    \n

    \n Openstritmap čine slobodni podaci koji su objavljeni pod\n licencom \n Krijejtiv komons Autorstvo-Deliti pod istim uslovima 2.0 (CC-BY-SA).\n

    \n

    \n Slobodni ste da umnožavate, delite, prenosite i prilagođavate\n naše mape i podatke, sve dok imenujete Openstritmap i njene\n uređivače. Ako želite da menjate i dograđujete naše podatke,\n možete ih deliti samo pod istom licencom.\n Ceo \n tekst ugovora objašnjava vam vaša prava i odgovornosti.\n

    \n\n

    Kako da imenujete Openstritmap

    \n

    \n Ako koristite naÅ¡e slike mapa, tražimo da zasluge sadrže\n bar “© OpenStreetMap\n contributors, CC-BY-SA”. Ako koristite samo podatke mapa,\n navedite “Map data © OpenStreetMap contributors,\n CC-BY-SA”.\n

    \n

    \n Gde je moguće, Openstritmap bi trebalo da vodi ka adresi http://www.openstreetmap.org/\n i CC-BY-SA ka http://creativecommons.org/licenses/by-sa/2.0/.\n Ako koristite medijum gde veze nije moguće postaviti\n (npr. Å¡tampani rad), predlažemo da usmerite vaÅ¡e\n čitaoce na www.openstreetmap.org (po mogućstvu\n proÅ¡iravanjem ‘OpenStreetMap’ na celu adresu)\n i na www.creativecommons.org.\n

    \n\n

    Saznajte više

    \n

    \n Pročitajte više o korišćenju naših podataka na ČPP.\n

    \n

    \n OSM uređivači se podsećaju da nikada ne dodaju podatke\n od bilo kog izvora zaštićenog autorskim pravima (npr.\n Gugl mape ili štampane mape) bez izričite dozvole\n nosioca autorskog prava.\n

    \n

    \n Iako Openstritmap čine slobodni podaci, ne možemo da\n obezbedimo besplatne API-je mapa drugim programerima.\n\n Pogledajte našu politiku\n o korišćenju API-ja, politiku\n o prikazivanju mapa i politiku\n o korišćenju Nominatima.\n\n

    Naši saradnici

    \n

    \n NaÅ¡a licenca CC-BY-SA zahteva od vas da “morate\n navesti ime izvornog autora ili davaoca licence”.\n Pojedinačni maperi ne zahtevaju isticanje zasluga osim\n “Openstritmap saradnika”, ali kada podaci\n pripadaju nacionalnoj geografskoj agenciji ili drugom\n većem izvoru koji je uključen u Openstritmap, razumno je\n navesti izvor ili ostaviti hipervezu do izvora.\n

    \n\n\n\n
      \n
    • Australija: sadrži podatke o opÅ¡tinama\n na osnovu podataka Australijskog biroa za statistiku.
    • \n
    • Austrija: sadrži podatke iz\n Å tata Viena pod licencom\n CC-BY.
    • \n
    • Kanada: sadrži podatke iz\n Beobaze®, Geogratisa (© Odeljenje za prirodne\n resurse Kanade), Kanvek (© Odeljenje za prirodne\n resurse Kanade) i Statkan (Geografski odsek,\n Zavod za statistiku Kanade).
    • \n
    • Francuska: sadrži podatke koji potiču od\n Generalne direkcije za oporezivanje.
    • \n
    • Novi Zeland: sadrži podatke koji potiču od\n Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Poljska: sadrži podatke iz UMP-pcPL mapa. Autorska prava\n UMP-pcPL saradnici.
    • \n
    • Ujedinjeno Kraljevstvo: sadrži Zvanične\n podatke geodetskog premeravanja © Autorska prava 2010.
    • \n
    \n\n

    \n Uključivanje podataka u Openstritmap ne podrazumeva da izvorni\n vlasnik podataka prihvata Openstritmap, obezbeđuje bilo kakvu\n garanciju ili prihvata odgovornost.\n

    " + native: + mapping_link: počnite s mapiranjem + native_link: srpsko izdanje + text: Trenutno posmatrate englesko izdanje stranice o autorskim pravima. Možete se vratiti na %{native_link} ove stranice ili jednostavno zaboravite na autorska prava i %{mapping_link}. + title: O stranici + message: + delete: + deleted: Poruka je obrisana + inbox: + date: Datum + from: Od + my_inbox: Primljene + no_messages_yet: JoÅ¡ uvek nemate poruka. ZaÅ¡to ne biste stupili u kontakt s %{people_mapping_nearby_link}? + outbox: poslate + people_mapping_nearby: maperima u vaÅ¡oj okolini + subject: Naslov + title: Primljene + you_have: Imate %{new_count} novih i %{old_count} starih poruka + mark: + as_read: Poruka je označena kao pročitana + as_unread: Poruka je označena kao nepročitana + message_summary: + delete_button: ObriÅ¡i + read_button: Označi kao pročitano + reply_button: Odgovori + unread_button: Označi kao nepročitano + new: + back_to_inbox: Nazad na primljene + body: Tekst + limit_exceeded: Nedavno ste poslali mnogo poruka. Sačekajte neko vreme pre nego pokuÅ¡avate da poÅ¡aljete joÅ¡ neku. + message_sent: Poruka je poslata. + send_button: PoÅ¡alji + send_message_to: PoÅ¡alji novu poruku za %{name} + subject: Naslov + title: PoÅ¡alji poruku + no_such_message: + body: Nažalost, nema poruke s tim IB. + heading: Nema takve poruke + title: Nema takve poruke + no_such_user: + body: Nažalost, ne postoji korisnik s tim imenom. + heading: Nema takvog korisnika + title: Nema takvog korisnika + outbox: + date: Datum + inbox: primljene + my_inbox: "%{inbox_link}" + no_sent_messages: JoÅ¡ uvek nemate poslatih poruka. ZaÅ¡to ne biste stupili u kontakt s %{people_mapping_nearby_link}? + outbox: poslate + people_mapping_nearby: maperima u vaÅ¡oj okolini + subject: Naslov + title: Poslate + to: Za + you_have_sent_messages: Imate %{count} poslatih poruka + read: + back_to_inbox: Nazad na primljene + back_to_outbox: Nazad na poslate + date: Datum + from: Od + reading_your_messages: VaÅ¡e poruke + reading_your_sent_messages: VaÅ¡e poslate poruke + reply_button: Odgovori + subject: Naslov + title: Pročitaj poruku + to: Za + unread_button: Označi kao nepročitano + wrong_user: Prijavljeni ste kao %{user}, ali poruka koju ste želeli da pročitate nije poslata tom korisniku. Prijavite se kao ispravan korisnik da biste je pročitali. + reply: + wrong_user: Prijavljeni ste kao %{user}, ali poruka na koju ste želeli da odgovorite nije poslata tom korisniku. Prijavite se kao ispravan korisnik da biste odgovorili. + sent_message_summary: + delete_button: ObriÅ¡i + notifier: + diary_comment_notification: + footer: Možete pročitati komentare na %{readurl}, prokomentarisati na %{commenturl} ili odgovoriti na %{replyurl} + header: "%{from_user} prokomentarisa vaÅ¡ skoraÅ¡nji unos u dnevniku pod naslovom %{subject}:" + hi: Pozdrav, %{to_user}, + subject: "[OpenStreetMap] %{user} prokomentarisa vaÅ¡ unos u dnevniku" + email_confirm: + subject: "[OpenStreetMap] Potvrdite vaÅ¡u e-adresu" + email_confirm_html: + click_the_link: Ako ste to vi, kliknite na vezu ispod da biste potvrdili izmene. + greeting: Pozdrav, + hopefully_you: Neko (verovatno vi) želeo bi da promeni e-adresu sa %{server_url} na %{new_address}. + email_confirm_plain: + click_the_link: Ako ste to vi, kliknite na vezu ispod da biste potvrdili izmene. + greeting: Pozdrav, + hopefully_you_1: Neko (verovatno vi) želeo bi da promeni e-adresu na + hopefully_you_2: "%{server_url} na %{new_address}." + friend_notification: + befriend_them: Možete ga/je dodati i kao prijatelja na %{befriendurl}. + had_added_you: "%{user} vas dodade kao prijatelja na Openstritmapu." + see_their_profile: Možete videti njegov/njen profil na %{userurl}. + subject: "[OpenStreetMap] %{user} vas dodade kao prijatelja" + gpx_notification: + and_no_tags: i bez oznaka. + and_the_tags: "i sa sledećim oznakama:" + failure: + failed_to_import: "Uvoz nije uspeo. GreÅ¡ka:" + more_info_1: ViÅ¡e o neuspelom GPX uvozu i kako to izbeći + more_info_2: "može se naći na:" + subject: "[OpenStreetMap] GPX uvoz nije uspeo" + greeting: Pozdrav, + success: + loaded_successfully: uspeÅ¡no učitano sa %{trace_points} od mogućih %{possible_points} tačaka. + subject: "[OpenStreetMap] GPX uvoz je uspeo" + with_description: s opisom + your_gpx_file: Liči na vaÅ¡u GPX datoteku + lost_password: + subject: "[OpenStreetMap] Zahtev za poniÅ¡tavanje lozinke" + lost_password_html: + click_the_link: Ako ste to vi, kliknite na vezu ispod da biste poniÅ¡tili lozinku. + greeting: Pozdrav, + hopefully_you: Neko (verovatno vi) zatražio je poniÅ¡tavanje lozinke za ovaj nalog. + lost_password_plain: + click_the_link: Ako ste to vi, kliknite na vezu ispod da biste poniÅ¡tili lozinku. + greeting: Pozdrav, + hopefully_you_1: Neko (verovatno vi) zatražio je poniÅ¡tavanje lozinke za + hopefully_you_2: nalog s ovom e-adresom. + message_notification: + footer1: Možete pročitati poruku i na %{readurl} + footer2: i možete odgovoriti na %{replyurl} + header: "%{from_user} vam posla poruku preko Openstritmapa pod naslovom %{subject}:" + hi: Pozdrav, %{to_user}, + signup_confirm: + subject: "[OpenStreetMap] Potvrdite vaÅ¡u e-adresu" + signup_confirm_html: + ask_questions: Možete postaviti bilo koje pitanje o Openstritmapu na naÅ¡im stranicama za pitanja i odgovore. + click_the_link: Ako ste to vi, dobro doÅ¡li! Kliknite na vezu ispod da biste potvrdili vaÅ¡ nalog i pročitali viÅ¡e o Openstritmapu + current_user: Spisak trenutnih korisnika u kategorijama, zasnovan na tome gde se oni nalaze, dostupan je na Category:Users_by_geographical_region. + get_reading: Pročitajte viÅ¡e o Openstritmapu na vikiju, budite u toku s najnovijim vestima preko bloga ili Tvitera ili pretražite OpenGeoData, blog osnivača Openstritmapa za istoriju projekata. Možete da sluÅ¡ate i podemisije! + greeting: Pozdrav! + hopefully_you: Neko (verovatno vi) želeo bi da otvori nalog na + introductory_video: Možete pogledati %{introductory_video_link}. + more_videos: Postoji %{more_videos_link}. + more_videos_here: viÅ¡e video snimaka ovde + user_wiki_page: Preporučujemo vam da napravite korisničku stranicu na vikiju koja uključuje oznake kategorija koje označavaju gde se nalazite, kao na primer [[Category:Users_in_London]]. + video_to_openstreetmap: uvodni video snimak o Openstritmapu + wiki_signup: Možete i da otvorite nalog na vikiju. + signup_confirm_plain: + ask_questions: "Možete postaviti bilo koje pitanje o Openstritmapu na naÅ¡im stranicama za pitanja i odgovore:" + blog_and_twitter: "Budite u toku s najnovijim vestima preko bloga ili Tvitera:" + click_the_link_1: Ako ste to vi, dobro doÅ¡li! Kliknite na vezu ispod da biste potvrdili svoj + click_the_link_2: korisnički nalog. Pročitajte viÅ¡e o Openstritmapu. + current_user_1: Spisak trenutnih korisnika u kategorijama, na osnovu položaja u svetu + current_user_2: "gde žive, dostupan je na:" + greeting: Pozdrav! + hopefully_you: Neko (verovatno vi) želeo bi da otvori nalog na + introductory_video: "Uvodni video snimak o Openstritmapu možete pogledati ovde:" + more_videos: "Ovde se nalazi joÅ¡ viÅ¡e video snimaka:" + opengeodata: "OpenGeoData.org je blog Stiva Kosta, osnivača Openstritmapa:" + the_wiki: "Pročitajte viÅ¡e o Openstritmapu na vikiju:" + user_wiki_1: Preporučujemo vam da napravite korisničku stranicu koja uključuje + user_wiki_2: oznake kategorija koje označavaju odakle ste, kao na primer [[Category:Users_in_London]]. + wiki_signup: "Možete i otvoriti nalog na naÅ¡em vikiju:" + oauth: + oauthorize: + allow_read_gpx: čita vaÅ¡e privatne GPS tragove. + allow_read_prefs: čita vaÅ¡e korisničke postavke. + allow_to: "Dozvoli programu da:" + allow_write_api: menja mapu. + allow_write_diary: pravi unose u dnevniku, komentariÅ¡e i dodaje prijatelje. + allow_write_gpx: otprema GPS tragove. + allow_write_prefs: menja vaÅ¡e korisničke postavke. + request_access: Program %{app_name} zahteva pristup vaÅ¡em nalogu, %{user}. Odlučite se da li želite da mu ga omogućite. Možete izabrati bilo koji program. + revoke: + flash: Opozvali ste novčić za %{application} + oauth_clients: + create: + flash: Podaci su uspeÅ¡no upisani + destroy: + flash: Upis programa je ukinut + edit: + submit: Uredi + title: Uredi program + form: + allow_read_gpx: čitanje privatnih GPS tragova. + allow_read_prefs: čitanje korisničkih postavki. + allow_write_api: menjanje mape. + allow_write_diary: pravljenje unosa u dnevniku, komentarisanje i dodavanje prijatelja. + allow_write_gpx: otpremanje GPS tragova. + allow_write_prefs: menjanje korisničkih postavki. + callback_url: Povratna adresa + name: Ime + requests: "Zahtevaj sledeće dozvole od korisnika:" + required: Neophodno + support_url: Adresa podrÅ¡ke + url: Adresa glavnog programa + index: + application: Naziv programa + issued_at: Izdano + list_tokens: "Sledeći novčići su izdani programima na vaÅ¡e ime:" + my_apps: Programi + my_tokens: Odobreni programi + no_apps: Imate li program koji želite da koristite sa standardom %{oauth}? Morate upisati vaÅ¡ program pre nego Å¡to on može da traži OAuth zahteve. + register_new: UpiÅ¡i program + registered_apps: "Sledeći programi su upisani:" + revoke: Opozovi + title: OAuth detalji + new: + submit: Otvori nalog + title: UpiÅ¡i novi program + not_found: + sorry: Žao nam je, %{type} nije pronađen. + show: + access_url: "Adresa pristupnog novčića:" + allow_read_gpx: čita privatne GPS tragove. + allow_read_prefs: čita korisničke postavke. + allow_write_api: menja mapu. + allow_write_diary: pravi unose u dnevniku, komentariÅ¡e i dodaje prijatelje. + allow_write_gpx: otprema GPS tragove. + allow_write_prefs: menja korisničke postavke. + authorize_url: "Adresa ovlašćenja:" + edit: Detalji izmene + key: "Ključ potroÅ¡ača:" + requests: "Zahtevanje sledećih dozvola od korisnika:" + secret: "Tajna potroÅ¡ača:" + support_notice: Podržavamo HMAC-SHA1, kao i običan tekst u režimu SSL. + title: OAuth detalji za %{app_name} + url: "Adresa zahtevnog novčića:" + update: + flash: Podaci o klijentu su uspeÅ¡no ažurirani + site: + edit: + anon_edits_link_text: Saznajte zaÅ¡to je to slučaj. + flash_player_required: Potreban vam je fleÅ¡ plejer da biste koristili uređivač mapa. Preuzmite ga odavde. Dostupne su i neke druge mogućnosti za uređivanje Openstritmapa. + no_iframe_support: VaÅ¡ pregledač ne podržava HTML iframes, a oni su potrebni za ovu mogućnost. + not_public: Niste podesili da vaÅ¡e izmene budu javne. + not_public_description: Ne možete uređivati mapu sve dok to ne uradite. Možete podesiti da vaÅ¡e izmene budu javne s %{user_page}. + potlatch2_not_configured: Potlač 2 nije podeÅ¡en. Pogledajte http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 za viÅ¡e informacija + potlatch2_unsaved_changes: Niste sačuvali izmene. Da biste to uradili, kliknite na dugme za čuvanje. + potlatch_unsaved_changes: Niste sačuvali izmene. Da biste to uradili, poniÅ¡tite tekuću putanju ili tačku, ako uređujete naživo, ili kliknite na dugme za čuvanje. + user_page_link: korisničke stranice + index: + js_1: Koristite pregledač koji ne podržava javaskript ili ste ga onemogućili. + js_2: Openstritmap koristi javaskript za prikazivanje mapa. + js_3: Probajte Tiles@Home, pregledač statičnih pločica ako ne možete da omogućite javaskript. + license: + license_name: Krijejtiv komons Autorstvo-Deliti pod istim uslovima 2.0 + notice: Objavljeno pod licencom %{license_name} od %{project_name} i njenih saradnika. + project_name: Openstritmapa + permalink: Trajna veza + remote_failed: Uređivanje nije uspelo. Proverite da li je JOSM ili Merkaartor učitan i da je mogućnost daljinskog upravljanja omogućena + shortlink: Kratka veza + key: + map_key: Legenda + map_key_tooltip: Legenda mape + table: + entry: + admin: Administrativna granica + allotments: BaÅ¡te + apron: + - Aerodromski peron + - terminal + bridge: Crni okvir – most + bridleway: Konjička staza + brownfield: Građevinsko zemljiÅ¡te + building: Značajna zgrada + byway: Sporedni put + cable: + - Žičara + - sediÅ¡nica + cemetery: Groblje + centre: Sportski centar + commercial: Poslovno područje + common: + - Poljana + - livada + construction: Putevi u izgradnji + cycleway: Biciklistička staza + destination: Pristup odrediÅ¡tu + farm: Farma + footway: PeÅ¡ačka staza + forest: Å uma + golf: Golf teren + heathland: PustoÅ¡ + industrial: Industrijsko područje + lake: + - Jezero + - rezervoar + military: Vojno područje + motorway: Auto-put + park: Park + permissive: Pristup uz dozvolu + pitch: Sportsko igraliÅ¡te + primary: Glavni put + private: Privatni posed + rail: Železnička pruga + reserve: Rezervat prirode + resident: Stambeno područje + retail: Maloprodajno područje + runway: + - Aerodromska pista + - rulne staze + school: + - Å kola + - univerzitet + secondary: Sporedni put + station: Železnička stanica + subway: Podzemna železnica + summit: + - UzviÅ¡enje + - vrh + tourist: Turistička atrakcija + track: Makadam + tram: + - Laka železnica + - tramvaj + trunk: Magistralni put + tunnel: Isprekidan okvir – tunel + unclassified: Nekategorisani put + unsurfaced: Neasfaltirani put + wood: Å uma + search: + search: Pretraga + search_help: "primeri: „Novi Sad“, „Vojvode Stepe, Beograd“ ili „železnička stanica, Niš“ viÅ¡e primera…" + submit_text: Idi + where_am_i: Gde sam? + where_am_i_title: Ustanovite trenutnu lokaciju pomoću pretraživača + sidebar: + close: Zatvori + search_results: Rezultati pretrage + time: + formats: + friendly: "%e %B %Y u %H:%M" + trace: + create: + trace_uploaded: GPX datoteka je otpremljena i čeka ubacivanje u bazu. Ovo obično traje oko pola sata, nakon čega ćete dobiti obaveÅ¡tenje o zavrÅ¡etku. + upload_trace: Otpremi GPS trag + delete: + scheduled_for_deletion: Trag postavljen za brisanje + edit: + description: "Opis:" + download: preuzmi + edit: uredi + filename: "Naziv datoteke:" + heading: Uređivanje traga %{name} + map: mapa + owner: "Vlasnik:" + points: "Tačaka:" + save_button: Sačuvaj izmene + start_coord: "Početna koordinata:" + tags: "Oznake:" + tags_help: razdvojeno zapetama + title: Uređivanje traga %{name} + uploaded_at: "Otpremljeno:" + visibility: "Vidljivost:" + visibility_help: Å¡ta ovo znači? + list: + public_traces: Javni GPS tragovi + public_traces_from: Javni GPS tragovi korisnika %{user} + tagged_with: " označeni sa %{tags}" + your_traces: VaÅ¡i GPS tragovi + make_public: + made_public: Javni trag + no_such_user: + body: Žao nam je, ali ne postoji korisnik s imenom %{user}. Proverite ispravnost upisa ili veze koju ste kliknuli. + heading: Korisnik %{user} ne postoji + title: Nema takvog korisnika + offline: + heading: GPX ostava je van mreže + message: GPX ostava i otpremanje trenutno nisu dostupni. + offline_warning: + message: Sistem za otpremanje GPX datoteka trenutno nije dostupan + trace: + ago: pre %{time_in_words_ago} + by: od + count_points: "%{count} tačaka" + edit: uredi + edit_map: Uredi mapu + identifiable: POISTOVETLJIV + in: u + map: mapa + more: viÅ¡e + pending: NA_ČEKANJU + private: PRIVATNI + public: JAVNI + trace_details: Pogledaj detalje traga + trackable: UTVRDLJIV + view_map: Pogledaj mapu + trace_form: + description: "Opis:" + help: Pomoć + tags: "Oznake:" + tags_help: razdvojeno zapetama + upload_button: Otpremi + upload_gpx: "Otpremi GPX datoteku:" + visibility: "Vidljivost:" + visibility_help: Å¡ta ovo znači? + trace_header: + see_all_traces: Pogledaj sve tragove + see_your_traces: Pogledaj svoje tragove + traces_waiting: Imate %{count} tragova na čekanju za slanje. Sačekajte da se prvo oni zavrÅ¡e pre otpremanja novih tragova, da ne biste blokirali druge korisnike. + upload_trace: Otpremi trag + trace_optionals: + tags: Oznake + trace_paging_nav: + next: Sledeći » + previous: "« Prethodni" + showing_page: Prikaz stranice %{page} + view: + delete_track: ObriÅ¡i ovaj trag + description: "Opis:" + download: preuzmi + edit: uredi + edit_track: Uredi ovaj trag + filename: "Naziv datoteke:" + heading: Pregled traga %{name} + map: mapa + none: niÅ¡ta + owner: "Vlasnik:" + pending: NA_ČEKANJU + points: "Tačaka:" + start_coordinates: "Početna koordinata:" + tags: "Oznake:" + title: Pregled traga %{name} + trace_not_found: Trag nije pronađen. + uploaded: "Otpremljeno:" + visibility: "Vidljivost:" + visibility: + identifiable: Može se prepoznati (prikazano u spisku tragova kao javne, poređane i datirane tačke) + private: Privatni (prikazuje se kao anonimne, neraspoređene tačke) + public: Javni (prikazane u spisku tragova kao anonimne, neraspoređene tačke) + trackable: Može se pratiti (prikazuje se kao anonimne, poređane i datirane tačke) + user: + account: + contributor terms: + agreed: Prihvatili ste nove uslove uređivanja. + agreed_with_pd: Takođe se slažete da vaÅ¡e izmene budu u javnom vlasniÅ¡tvu. + heading: "Uslovi uređivanja:" + link text: Å¡ta je ovo? + not yet agreed: Niste prihvatili nove uslove uređivanja. + review link text: Pratite ovu vezu da biste pregledali i prihvatili nove uslove uređivanja. + current email address: "Trenutna e-adresa:" + delete image: Ukloni trenutnu sliku + email never displayed publicly: (nikada se ne prikazuje javno) + flash update success: Podaci o korisniku su uspeÅ¡no ažurirani. + flash update success confirm needed: Podaci o korisniku su uspeÅ¡no ažurirani. Proverite e-poÅ¡tu da biste potvrdili svoju novu e-adresu. + home location: "Mesto stanovanja:" + image: "Slika:" + image size hint: (kvadratne slike od barem 100×100 piksela rade najbolje) + keep image: Zadrži trenutnu sliku + latitude: "Geografska Å¡irina:" + longitude: "Geografska dužina:" + make edits public button: Neka sve moje izmene budu javne + my settings: Postavke + new email address: "Nova e-adresa:" + new image: Dodaj sliku + no home location: Niste uneli mesto stanovanja. + openid: + link: http://wiki.openstreetmap.org/wiki/OpenID + link text: Å¡ta je ovo? + openid: "OpenID:" + preferred editor: "Željeni uređivač:" + preferred languages: "Željeni jezici:" + profile description: "Opis profila:" + public editing: + disabled: Onemogućeno i ne mogu se uređivati podaci. Sve prethodne izmene su anonimne. + disabled link text: zaÅ¡to ne mogu da uređujem? + enabled: Omogućeno. Nije anonimno i mogu se uređivati podaci. + enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits + enabled link text: Å¡ta je ovo? + heading: "Javno uređivanje:" + public editing note: + heading: Javno uređivanje + text: Trenutno su vaÅ¡e izmene anonimne i ljudi vam ne mogu slati poruke ili videti vaÅ¡u lokaciju. Da biste pokazali vaÅ¡e izmene i dozvolili ljudima da vas kontaktiraju, kliknite na dugme ispod. Od promena API-ja 0.6, samo javni korisnici mogu uređivati mape. (saznajte zaÅ¡to).
    • VaÅ¡a e-adresa neće biti otkrivena na ovaj način.
    • Ova radnja ne može biti opozvana i svi novi korisnici su od sada postavljeni kao javni.
    + replace image: Zameni trenutnu sliku + return to profile: Nazad na profil + save changes button: Sačuvaj izmene + title: Uredi nalog + update home location on click: Ažurirati mesto stanovanja kada kliknem na mapu? + confirm: + already active: Ovaj nalog je već potvrđen. + before you start: Pre nego što počnete s mapiranjem, popunite neke podatke o sebi u obrascu koji se nalazi ispod. + button: Potvrdi + heading: Potvrda korisničkog naloga + press confirm button: Pritisnite dugme za potvrdu da biste aktivirali nalog. + reconfirm: Ako je prošlo neko vreme otkako ste otvorili nalog, možda ćete morati da zatražite novu potvrdu e-poštom. + success: Vaš nalog je potvrđen. Hvala vam na upisu! + unknown token: Izgleda da taj novčić ne postoji. + confirm_email: + button: Potvrdi + failure: E-adresa s ovim novčićem je već potvrđena. + heading: Potvrda promene e-adrese + press confirm button: Kliknite na dugme za potvrdu da biste potvrdili svoju novu e-adresu. + success: Vaša e-adresa je potvrđena. Hvala vam na upisu! + confirm_resend: + failure: Korisnik %{name} nije pronađen. + success: Poslali smo novu potvrdnu poruku na %{email}. Nakon što potvrdite svoj nalog, moći ćete da počnete s mapiranjem.

    Ako koristite sistem protiv nepoželjnih poruka, dodajte webmaster@openstreetmap.org u spisak dozvoljenih adresa jer nismo u mogućnosti da odgovorimo na bilo koji zahtev za potvrdu. + filter: + not_an_administrator: Morate biti administrator da biste izvršili ovu radnju. + go_public: + flash success: Sve vaše izmene su sada javne. Dozvoljeno vam je uređivanje. + list: + confirm: Potvrdi izabrane korisnike + empty: Nije pronađen nijedan korisnik + heading: Korisnici + hide: Sakrij izabrane korisnike + showing: + one: Prikaz stranice %{page} (%{first_item} od %{items}) + other: Prikaz stranica %{page} (%{first_item}-%{last_item} od %{items}) + summary: "%{name} napravljeno od %{ip_address} dana %{date}" + summary_no_ip: "%{name} napravljeno %{date}" + title: Korisnici + login: + account not active: Žao nam je, vaš nalog još uvek nije aktiviran.
    Pratite vezu u poruci za potvrdu e-pošte da biste ga aktivirali ili zatražite novu poruku. + account suspended: Žao nam je, vaš nalog je privremeno ukinut zbog sumnjive aktivnosti.
    Kontaktirajte %{webmaster}a ako želite da se žalite. + auth failure: Ne mogu da vas prijavim s unetim podacima. + create account minute: Otvorite nalog. Potrebno je samo nekoliko trenutaka. + email or username: "E-adresa ili korisničko ime:" + heading: Prijava + login_button: Prijavi me + lost password link: Zaboravili ste lozinku? + new to osm: Novi ste na sajtu? + notice: Saznajte više o predstojećoj izmeni licence (prevodi) (razgovor) + openid: "%{logo} OpenID:" + openid invalid: Izgleda da OpenID nije ispravan + openid missing provider: Ne mogu da se povežem s OpenID dobavljačem + openid_logo_alt: Prijavite se s OpenID-jem + openid_providers: + aol: + alt: Prijavite se preko AOL-a + title: Prijava putem AOL-a + google: + alt: Prijavite se preko Gugla + title: Prijava putem Gugla + myopenid: + alt: Prijavite se preko myOpenID-ja + title: Prijava putem myOpenID-ja + openid: + alt: Prijavite se s OpenID-jem + title: Prijava putem OpenID-ja + wordpress: + alt: Prijavite se preko Vordpresa + title: Prijava putem Vordpresa + yahoo: + alt: Prijavite se preko Jahua + title: Prijava putem Jahua + password: "Lozinka:" + register now: Otvorite nalog + remember: "Zapamti me:" + title: Prijava + to make changes: Da biste pravili izmene, morate imati nalog. + webmaster: administrator + with openid: "Rezervni način je da koristite OpenID:" + with username: "Već imate nalog? Prijavite se s korisničkim imenom i lozinkom:" + logout: + heading: Odjava + logout_button: Odjavi me + title: Odjava + lost_password: + email address: "E-adresa:" + heading: Zaboravili ste lozinku? + help_text: Unesite e-adresu koju ste uneli pri upisu, a mi ćemo vam poslati vezu pomoću koje možete da poništite lozinku. + new password button: Poništi lozinku + notice email cannot find: E-adresa nije pronađena. + notice email on way: Poruka za poništavanje lozinke je poslata. + title: Povratak lozinke + make_friend: + already_a_friend: Već ste prijatelj sa %{name}. + failed: Ne mogu da dodam %{name} kao prijatelja. + success: "%{name} je sada vaš prijatelj." + new: + confirm email address: "Potvrdite e-adresu:" + confirm password: "Potvrdite lozinku:" + contact_webmaster: Kontaktirajte administratora za otvaranje novog naloga. Obradićemo zahtev što je pre moguće. + continue: Nastavi + display name: "Ime prikaza:" + display name description: Javno prikazano korisničko ime. Kasnije ga možete promeniti u postavkama. + email address: "E-adresa:" + fill_form: Kada popunite obrazac, poslaćemo vam poruku za aktiviranje naloga. + flash create success message: Hvala vam na otvaranju naloga. Poslali smo vam potvrdnu poruku na %{email}. Nakon što potvrdite svoj nalog, moći ćete da počnete s mapiranjem.

    Ako koristite sistem protiv nepoželjnih poruka, dodajte webmaster@openstreetmap.org u spisak dozvoljenih adresa jer nismo u mogućnosti da odgovorimo na bilo koji zahtev za potvrdu. + heading: Otvaranje korisničkog naloga + license_agreement: Nakon što potvrdite nalog, moraćete da prihvatite uslove uređivanja. + no_auto_account_create: Nažalost, trenutno nismo u mogućnosti da otvorimo novi nalog. + not displayed publicly: Ne prikazuje se javno (pogledajte politiku privatnosti) + openid: "%{logo} OpenID:" + openid association: "

    Vaš OpenID nije povezan s nalogom na Openstritmapu.

    \n
      \n
    • Ako joÅ¡ uvek nemate nalog, otvorite ga koristeći obrazac ispod.
    • \n
    • \n Ako imate nalog, prijavite se sa svojim korisničkim imenom\n i lozinkom, pa ga onda povežite s OpenID-jem u postavkama.\n
    • \n
    " + openid no password: S OpenID-jem, lozinka nije potrebna, ali neke dodatne alatke ipak zahtevaju lozinku. + password: "Lozinka:" + terms accepted: Hvala vam što prihvatate nove uslove uređivanja. + terms declined: Žao nam je što ste odlučili da ne prihvatite nove uslove uređivanja. Pogledajte ovu stranicu za više informacija. + title: Otvaranje naloga + use openid: Rezervni način je da koristite %{logo} OpenID + no_such_user: + body: Ne postoji korisnik s imenom %{user}. Proverite ispravnost upisa ili veze koju ste kliknuli. + heading: Korisnik %{user} ne postoji + title: Nema takvog korisnika + popup: + friend: Prijatelj + nearby mapper: Obližnji maper + your location: Vaša lokacija + remove_friend: + not_a_friend: "%{name} nije vaš prijatelj." + success: "%{name} je izbačen iz prijatelja." + reset_password: + confirm password: "Potvrdite lozinku:" + flash changed: Vaša lozinka je promenjena. + flash token bad: Takav novčić nije pronađen. Proverite adresu. + heading: Poništavanje lozinke za %{user} + password: "Lozinka:" + reset: Poništi lozinku + title: Poništi lozinku + set_home: + flash success: Mesto stanovanja je uspešno sačuvano + suspended: + body: "

    \n Žao nam je, vaš nalog je privremeno ukinut\n zbog sumnjive aktivnosti.\n

    \n

    \n Ovu odluku će ubrzo razmotriti administrator. Takođe,\n možete kontaktirati %{webmaster}a ako želite da se žalite.\n

    " + heading: Suspendovan nalog + title: Suspendovan nalog + webmaster: administrator + terms: + agree: Prihvati + consider_pd: Prema gorenavedenom ugovoru, smatram da moji doprinosi pripadaju javnom vlasniÅ¡tvu + consider_pd_why: Å¡ta je ovo? + decline: Odbaci + guidance: "Podaci koji će vam pomoći da razumete uslove: čitljivi sažetak i neformalni prevodi" + heading: Uslovi uređivanja + legale_names: + france: Francuska + italy: Italija + rest_of_world: Ostatak sveta + legale_select: "Izaberite zemlju prebivaliÅ¡ta:" + read and accept: Pročitajte ugovor ispod i pritisnite dugme za potvrdu da biste prihvatili uslove za postojeće i buduće doprinose. + title: Uslovi uređivanja + you need to accept or decline: Molimo vas da pročitate ugovor pre nego Å¡to ga prihvatite. + view: + activate_user: aktiviraj ovog korisnika + add as friend: dodaj kao prijatelja + ago: (pre %{time_in_words_ago}) + block_history: pogledaj dobijene blokade + blocks by me: moja blokiranja + blocks on me: blokiranja na mene + confirm: Potvrdi + confirm_user: potvrdi ovog korisnika + create_block: blokiraj ovog korisnika + created from: "Napravljeno iz:" + deactivate_user: deaktiviraj ovog korisnika + delete_user: obriÅ¡i ovog korisnika + description: Opis + diary: dnevnik + edits: izmene + email address: "E-adresa:" + hide_user: sakrij ovog korisnika + if set location: Ako postavite svoju lokaciju, zgodna mapa će biti prikazana ispod. Možete je podesiti u %{settings_link}. + km away: udaljeno %{count} km + latest edit: "Poslednja izmena pre %{ago}:" + m away: udaljeno %{count} m + mapper since: "Maper od:" + moderator_history: pogledaj date blokade + my diary: moj dnevnik + my edits: moje izmene + my settings: moje postavke + my traces: moji tragovi + nearby users: "Ostali obližnji korisnici:" + new diary entry: novi unos u dnevniku + no friends: Niste dodali nijednog prijatelja. + no nearby users: JoÅ¡ uvek nema obližnjih korisnika koji mapiraju. + oauth settings: oAuth postavke + remove as friend: ukloni kao prijatelja + role: + administrator: Ovaj korisnik je administrator + grant: + administrator: Dodeli ovlašćenja administratora + moderator: Dodeli ovlašćenja urednika + moderator: Ovaj korisnik je urednik + revoke: + administrator: Opozovi ovlašćenja administratora + moderator: Opozovi ovlašćenja urednika + send message: poÅ¡alji poruku + settings_link_text: postavkama + spam score: "Ocena spama:" + status: "Stanje:" + traces: tragovi + unhide_user: otkrij ovog korisnika + user location: Lokacija korisnika + your friends: VaÅ¡i prijatelji + user_block: + blocks_by: + empty: "%{name} joÅ¡ uvek nije blokirao nikoga." + heading: Spisak blokada od %{name} + title: Blokade od %{name} + blocks_on: + empty: "%{name} joÅ¡ nije bio blokiran/a." + heading: Spisak blokada za %{name} + title: Blokade za %{name} + create: + flash: Blokiraj korisnika %{name}. + try_contacting: Kontaktirajte korisnika pre blokiranja da biste mu dali dovoljno vremena da odgovori. + try_waiting: Dajte korisniku dovoljno vremena da odgovori pre nego Å¡to ga blokirate. + edit: + back: Pogledaj sve blokade + heading: Uređivanje blokade za %{name} + needs_view: Da li korisnik mora da se prijavi da bi blokada bila uklonjena? + period: Koliko dugo će korisnik biti blokiran od API-ja, počev od sada. + reason: Razlog zaÅ¡to je %{name} blokiran/a. Budite razumni i pružite nam Å¡to viÅ¡e detalja. Imajte na umu da ne znaju svi korisnici žargon zajednice, te im pokuÅ¡ajte objasniti jednostavnim jezikom. + show: Pogledaj ovu blokadu + submit: Ažuriraj blokadu + title: Uređivanje blokade za %{name} + filter: + block_expired: Blokada je već istekla i ne može se uređivati. + block_period: Period blokade mora biti jedna od vrednosti iz padajućeg spiska. + not_a_moderator: Morate biti urednik da biste izvrÅ¡ili ovu radnju. + helper: + time_future: ZavrÅ¡ava se u %{time}. + time_past: ZavrÅ¡eno pre %{time}. + until_login: Aktivno sve dok se korisnik ne prijavi. + index: + empty: Nije napravljena nijedna blokada. + heading: Spisak korisničkih blokada + title: Korisničke blokade + model: + non_moderator_revoke: Morate biti urednik da biste ukinuli blokadu. + non_moderator_update: Morate biti urednik da biste postavljali ili ažurirali blokadu. + new: + back: Pogledaj sve blokade + heading: Blokiranje %{name} + needs_view: Korisnik mora da se prijavi da bi blokada bila uklonjena + period: Koliko dugo će korisnik biti blokiran od API-ja, počev od sada. + reason: Razlog zaÅ¡to je %{name} blokiran/a. Budite razumni i pružite nam Å¡to viÅ¡e detalja. Imajte na umu da ne znaju svi korisnici žargon zajednice, te im pokuÅ¡ajte objasniti jednostavnim jezikom. + submit: Napravi blokadu + title: Blokiranje %{name} + tried_contacting: Kontaktirao sam korisnika i pitao ga da prestane. + tried_waiting: Dao sam dovoljno vremena korisniku da odgovori. + not_found: + back: Nazad na indeks + sorry: Korisnička blokada s IB %{id} nije pronađena. + partial: + confirm: Jeste li sigurni? + creator_name: Tvorac + display_name: Blokirani korisnik + edit: Uredi + not_revoked: (nije opozvano) + reason: Razlozi za blokiranje + revoke: Opozovi + revoker_name: Opozvao + show: Prikaži + status: Stanje + period: + one: 1 sat + other: "%{count} sata" + revoke: + confirm: Želite li da opozovete ovu blokadu? + flash: Ova blokada je opozvana. + heading: Opozivanje blokade na %{block_on} od %{block_by} + past: Ova blokada je zavrÅ¡ena pre %{time} i ne može se sada opozvati. + revoke: Opozovi + time_future: Ova blokada će se zavrÅ¡iti za %{time}. + title: Opozivanje blokade na %{block_on} + show: + back: Pogledaj sve blokade + confirm: Jeste li sigurni? + edit: Uredi + heading: "%{block_on} je blokiran/a od %{block_by}" + needs_view: Korisnik mora da se prijavi da bi blokada bila uklonjena. + reason: "Razlog za blokiranje:" + revoke: Opozovi + revoker: "Opozivalac:" + show: Prikaži + status: Stanje + time_future: ZavrÅ¡ava se u %{time} + time_past: ZavrÅ¡eno pre %{time} + title: "%{block_on} je blokiran/a od %{block_by}" + update: + only_creator_can_edit: Samo urednik koji je napravio ovu blokadu može da je uredi. + success: Blokada je ažurirana. + user_role: + filter: + already_has_role: Korisnik već ima ulogu %{role}. + doesnt_have_role: Korisnik nema ulogu %{role}. + not_a_role: „%{role}“ nije ispravna uloga. + not_an_administrator: Samo administratori mogu da upravljaju ulogama korisnika, a vi to niste. + grant: + are_you_sure: Želite li da dodelite ulogu „%{role}“ korisniku %{name}? + confirm: Potvrdi + fail: Ne mogu da dodelim ulogu „%{role}“ korisniku %{name}. Proverite da li su korisnik i uloga ispravni. + heading: Potvrda dodele uloge + title: Potvrda dodele uloge + revoke: + are_you_sure: Želite li da oduzmete ulogu „%{role}“ od korisnika %{name}? + confirm: Potvrdi + fail: Ne mogu da oduzmem ulogu „%{role}“ od korisnika %{name}. Proverite da li su korisnik i uloga ispravni. + heading: Potvrda oduzimanja uloge + title: Potvrda oduzimanja uloge diff --git a/config/locales/sv-SE.yml b/config/locales/sv-SE.yml new file mode 100644 index 000000000..3501afece --- /dev/null +++ b/config/locales/sv-SE.yml @@ -0,0 +1,2 @@ +sv-SE: + dummy: dummy diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 7e30c6fbc..2aa229f4f 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -17,6 +17,7 @@ # Author: Sertion # Author: The real emj # Author: WikiPhoenix +# Author: Zvenzzon sv: activerecord: attributes: @@ -54,6 +55,8 @@ sv: pass_crypt: Lösenord models: acl: TillgÃ¥ngskontrollista (ACL) + changeset: Ändringsset + changeset_tag: Etikett till ändringsset country: Land diary_comment: Dagbokskommentar diary_entry: Dagbokspost @@ -61,12 +64,18 @@ sv: language: SprÃ¥k message: Meddelande node: Nod + node_tag: Nodtagg old_node: Gammal nod + old_node_tag: Gammal nodtagg old_relation: Gammal relation + old_relation_member: Gammal relationsmedlem + old_relation_tag: Gammal relationstagg old_way: Gammal sträcka old_way_node: Gammal sträcknod + old_way_tag: Gammal vägtagg relation: Relation relation_member: Medlem i relation + relation_tag: Relationstagg session: Session trace: SpÃ¥r tracepoint: SpÃ¥rpunkt @@ -74,9 +83,13 @@ sv: user_preference: Användarinställningar way: Sträcka way_node: Sträcknod + way_tag: Vägtagg application: + require_cookies: + cookies_needed: Du verkar ha inaktiverat cookies - aktivera cookies i din webbläsare innan du fortsätter. setup_user_auth: blocked: Du har blivit blockerad frÃ¥n API:et. Var god logga in via webinterfacet för att fÃ¥ reda pÃ¥ mer. + need_to_see_terms: Din tillgÃ¥ng till API:t är tillfälligt avstängd. Logga in pÃ¥ webbgränssnittet för att se bidragsvillkor. Du behöver inte godkänna dem, men du mÃ¥ste se dem. browse: changeset: changeset: "Ändringsset: %{id}" @@ -117,6 +130,11 @@ sv: entry_role: Relation %{relation_name} (som %{relation_role}) map: deleted: Borttaget + edit: + area: Redigera omrÃ¥de + node: Redigera nod + relation: Redigera relation + way: Redigera väg larger: area: Se omrÃ¥det pÃ¥ en större karta node: Se noden pÃ¥ en större karta @@ -225,9 +243,12 @@ sv: tags: "Taggar:" wiki_link: key: Wiki-beskrivningssidan för %{key} taggen + tag: Wiki-beskrivningssidan för %{key}=%{value}-taggen wikipedia_link: Artikeln om %{page} pÃ¥ Wikipedia timeout: + sorry: Tyvärr tog data för %{type} med id %{id} för lÃ¥ng tid att hämta. type: + changeset: ändringsset node: nod relation: relation way: väg @@ -256,10 +277,12 @@ sv: big_area: (stor) no_comment: (ingen) no_edits: (inga ändringar) + show_area_box: visa omrÃ¥de still_editing: (redigerar fortfarande) + view_changeset_details: Visa detaljer om ändringsset changeset_paging_nav: - next: Nästa » - previous: "« FöregÃ¥ende" + next: Nästa » + previous: « FöregÃ¥ende showing_page: Visar sida %{page} changesets: area: Area @@ -280,6 +303,8 @@ sv: title_bbox: Changesets inom %{bbox} title_user: Ändringsset av %{user} title_user_bbox: Ändringsset av %{user} inom %{bbox} + timeout: + sorry: Kunde tyvärr inte lista begärda ändringsset. Begäran tog för lÃ¥ng tid att hämta. diary_entry: diary_comment: comment_from: Kommentar frÃ¥n %{link_user}, %{comment_created_at} @@ -296,17 +321,26 @@ sv: posted_by: Skrivet av %{link_user} den %{created} pÃ¥ %{language_link} reply_link: Svara pÃ¥ denna anteckning edit: + body: "Meddelandetext:" language: "SprÃ¥k:" latitude: "Latitud:" location: "Plats:" longitude: "Longitud:" + marker_text: Plats för inlägg save_button: Spara subject: "Ärende:" title: Redigera dagboksanteckning use_map_link: använd karta feed: + all: + description: Senaste dagboksinlägg frÃ¥n användare av OpenStreetMap + title: OpenStreetMap-dagboksinlägg language: + description: Senaste dagboksinlägg frÃ¥n användare av OpenStreetMap pÃ¥ %{language_name} title: Openstreetmap dagboksinlägg pÃ¥ %{language_name} + user: + description: Senaste dagboksinlägg pÃ¥ OpenStreetMap frÃ¥n %{user} + title: OpenStreetMap dagboksinlägg för användaren %{user} list: in_language_title: Dagböcker pÃ¥ %{language} new: Ny dagboksanteckning @@ -324,6 +358,7 @@ sv: new: title: Ny dagboksanteckning no_such_entry: + body: Tyvärr finns inget inlägg med id %{id}. Kontrollera stavning eller sÃ¥ är länken du klickade pÃ¥ felaktig. heading: "Ingen dagboksanteckning med id: %{id}" title: Ingen sÃ¥dan dagboksanteckning no_such_user: @@ -340,13 +375,19 @@ sv: editor: default: Standard (för närvarande %{name}) potlatch: + description: Potlatch 1 (redigera i webläsaren) name: Potlatch 1 potlatch2: + description: Potlatch 2 (redigera i webläsaren) name: Potlatch 2 + remote: + description: Fjärrstyrning (JOSM eller Merkaartor) + name: Fjärrstyrning export: start: add_marker: Lägg till markör pÃ¥ kartan area_to_export: Yta som ska exporteras + embeddable_html: Inbäddad HTML export_button: Exportera export_details: Data frÃ¥n OpenStreetMap är licenscerat som Creative Commons Attribution-ShareAlike 2.0. format: "Format:" @@ -362,6 +403,7 @@ sv: osm_xml_data: OpenStreetMap XML-data osmarender_image: Osmarender-bild output: Utdata + paste_html: Klistra in HTML för att bädda in pÃ¥ webbplats scale: Skala too_large: body: Detta omrÃ¥de är för stort för att exporteras som OpenStreetMap XML-data. Vänligen zooma in eller välja ett mindre omrÃ¥de. @@ -456,6 +498,7 @@ sv: fuel: Bränsle grave_yard: Begravningsplats gym: Fitnesscenter / Gym + hall: Samlingslokal health_centre: VÃ¥rdcentral hospital: Sjukhus hotel: Hotell @@ -481,6 +524,8 @@ sv: prison: Fängelse pub: Pub public_building: Offentlig byggnad + public_market: Marknadsplats + reception_area: Reception recycling: Återvinningsstation restaurant: Restaurang retirement_home: Äldreboende @@ -489,6 +534,7 @@ sv: shelter: Hydda shop: Affär shopping: Handel + social_club: Social klubb studio: Studio supermarket: Stormarknad taxi: Taxi @@ -499,6 +545,7 @@ sv: university: Universitet vending_machine: Varumaskin veterinary: Veterinär + village_hall: gemensamhetslokal waste_basket: Papperskorg wifi: WLAN-accesspunkt youth_centre: Ungdomscenter @@ -506,11 +553,14 @@ sv: administrative: Administrativ gräns building: apartments: Flerfamiljshus + block: Byggblock bunker: Bunker chapel: Kapell church: Kyrka city_hall: RÃ¥dhus + commercial: Kommersiell byggnad dormitory: Studenthem + entrance: entré faculty: Fakultetsbyggnad farm: Ekonomibyggnad flats: Lägenheter @@ -521,6 +571,8 @@ sv: industrial: Industribyggnad office: Kontorsbyggnad public: Offentlig byggnad + residential: Bostadsbyggnad + retail: Affärsbyggnad school: Skolbyggnad shop: Affär stadium: Stadium @@ -531,10 +583,12 @@ sv: university: Universitetsbyggnad highway: bridleway: Ridstig + bus_guideway: SpÃ¥rbussväg bus_stop: BusshÃ¥llplats byway: Omfartsväg construction: Väg under konstruktion cycleway: CykelspÃ¥r + emergency_access_point: Utryckningsplats footway: GÃ¥ngväg ford: Vadställe gate: Grind @@ -542,15 +596,25 @@ sv: minor: Mindre väg motorway: Motorväg motorway_junction: Motorvägskorsning + motorway_link: PÃ¥fart/avfart till motorväg path: Stig - pedestrian: GÃ¥ngväg + pedestrian: GÃ¥gata platform: Perrong + primary: Riksväg (primär väg) + primary_link: PÃ¥fart till riksväg raceway: Tävlingsbana residential: Bostäder road: Väg + secondary: Länsväg (sekundärväg) + secondary_link: PÃ¥fart till länsväg service: Serviceväg + services: Rastplats-väg steps: Trappa + track: Traktorväg trail: Vandringsled + trunk: Motortrafikled + trunk_link: PÃ¥fart till motortrafikled + unclassified: Oklassificerad väg unsurfaced: Oasfalterad väg historic: archaeological_site: Arkeologisk plats @@ -573,6 +637,7 @@ sv: allotments: Kolonilotter cemetery: Begravningsplats commercial: Kommersiellt omrÃ¥de + construction: Byggarbetsplats farm: BondgÃ¥rd farmland: Jordbruksmark farmyard: GÃ¥rdstun @@ -682,6 +747,7 @@ sv: disused: Nedlagd järnväg disused_station: Nedlagd järnvägsstation funicular: Bergbana + halt: TÃ¥gstopp historic_station: Historisk Järnvägsstation junction: Järnvägsknutpunkt light_rail: SpÃ¥rvagn @@ -729,31 +795,39 @@ sv: funeral_directors: BegravningsbyrÃ¥ furniture: Möbler gallery: Galleri + garden_centre: TrädgÃ¥rdshandel general: Landhandel gift: Presentaffär greengrocer: Grönsakshandlare grocery: Livsmedelsbutik hairdresser: Frisör hardware: Järnhandel + hifi: Hi-Fi insurance: Försäkring jewelry: Guldsmed kiosk: Kiosk laundry: Tvättservice mall: Köpcentrum market: Marknad + mobile_phone: Mobiltelefonbutik motorcycle: Motorcykelhandlare music: Musikaffär newsagent: Tidningskiosk optician: Optiker + organic: Ekologiska livsmedelsaffär + outdoor: Friluftsbutik pet: Djuraffär photo: Fotoaffär salon: Salong shoes: Skoaffär + shopping_centre: Köpcentrum sports: Sportaffär + stationery: Pappershandel supermarket: Snabbköp toys: Leksaksaffär travel_agency: ResebyrÃ¥ video: Videobutik + wine: Alkoholbutik tourism: alpine_hut: Fjällbod artwork: Konstverk @@ -778,7 +852,9 @@ sv: waterway: boatyard: BÃ¥tvarv canal: Kanal + connector: Förbindelsepunkt för farled dam: Damm + derelict_canal: Nerlagd kanal ditch: Dike dock: Docka drain: Avlopp @@ -786,16 +862,17 @@ sv: lock_gate: Slussport mineral_spring: Mineralvattenskälla mooring: Förtöjning + rapids: Fors river: Älv riverbank: Älvbank stream: Ström + wadi: Uttorkad flod waterfall: Vattenfall weir: Överfallsvärn javascripts: map: base: cycle_map: Cykelkarta - noname: NoName site: edit_disabled_tooltip: Zooma in för att redigera kartan edit_tooltip: Redigera kartan @@ -804,11 +881,13 @@ sv: history_tooltip: Visa ändringar för detta omrÃ¥de history_zoom_alert: Du mÃ¥ste zooma in för att kunna se karteringshistorik. layouts: - copyright: Upphovsrätt & licens + community_blogs: Communitybloggar + community_blogs_title: Bloggar frÃ¥n OpenStreetMap-medlemmar + copyright: Upphovsrätt & licens documentation: Dokumentation documentation_title: Projektdokumentation - donate: Donera till OpenStreetMap via %{link} till hÃ¥rdvaruuppgraderingsfonden. - donate_link_text: donera + donate: Donera till OpenStreetMap med en %{link} till hÃ¥rdvarufonden. + donate_link_text: donation edit: Redigera edit_with: Redigera med %{editor} export: Exportera @@ -847,6 +926,7 @@ sv: osm_read_only: Det gÃ¥r bara att läsa frÃ¥n OpenStreetMap-databasen just nu, dÃ¥ viktigt underhÃ¥ll utförs pÃ¥ databasen. sign_up: registrera sign_up_tooltip: Skapa ett konto för kartering + sotm2011: Kom till 2011 Ã¥rs OpenStreetMapkonferens, The State of the Map, 9:e -11:e september i Denver! tag_line: Den fria wiki-världskartan user_diaries: Användardagböcker user_diaries_tooltip: Visa användardagböcker @@ -861,6 +941,7 @@ sv: english_link: det engelska originalet text: I händelse av en konflikt mellan denna översatta sida och %{english_original_link} har den engelska texten företräde title: Om denna översättning + legal_babble: "

    Upphovsrätt och licens

    \n

    \n OpenStreetMap är Öppen data, licensierad under Creative\n Commons Attribution-ShareAlike 2.0 licence (CC-BY-SA).\n

    \n

    \n Du är fri att kopiera, distribuera, överföra och anpassa våra kartor\n och data, så länge du hänvisar till OpenStreetMap och dess\n bidragsgivare. Om du ändrar eller bygger på våra kartor eller data kan du\n distribuera resultatet endast under samma licens. Den\n fullständigjuridiska texten förklarar dina rättigheter och skyldigheter.\n

    \n\n

    Hur du hänvisar till OpenStreetMap

    \n

    \n Om du använder OpenStreetMaps kartbilder begär vi att\n din hänvisning inehÃ¥ller minst “© OpenStreetMap\n contributors, CC-BY-SA”. Om du enbart använder kartdata\n begär vi “Map data © OpenStreetMap contributors,\n CC-BY-SA”.\n

    \n

    \n Om möjligt bör OpenStreetMap bli länkat till http://www.openstreetmap.org/\n och CC-av-SA till http://creativecommons.org/licenses/by-sa/2.0/. Om\n du använder ett medium där länkar inte är möjligt (t.ex. ett\n tryckt arbete), föreslÃ¥r vi att du hänvisar läsarna till\n www.openstreetmap.org (kanske genom att expandera\n ‘OpenStreetMap’ till dess fullständiga adress) och till\n www.creativecommons.org.\n

    \n\n

    Hitta mer

    \n

    \n Läs mer om hur du använder vår data på vår juridiska\n FAQ.\n

    \n OSM bidragsgivare påminns att aldrig att lägga till data från några\n upphovsrättsskyddade källor (t.ex. Google Maps eller tryckta kartor) utan\n uttryckligt tillstånd från upphovsrättsinnehavarna.\n

    \n

    \n Även om OpenStreetMap är öppna data, vi kan inte tillhandahålla ett\n gratis kart-API för tredjepartsutvecklare.\n\n Se vår Policy för användning API,\n Policy för användning av Kartbilder (Tiles)\n och Policyn för Nominatim-användning.\n

    \n\n

    VÃ¥ra bidragsgivare

    \n

    \n VÃ¥r CC-av-SA-licens kräver att du “ge ursprunglig\n författaren kredit rimliga för det medium eller syfte du \n utnyttja\". Enskilda OSM-kartografer begär inte en kredit utöver “OpenStreetMap\n contributors”, men där data frÃ¥n en nationell kartläggningsbyrÃ¥n eller annan viktig källa har inkluderats i\n OpenStreetMap kan det vara rimligt att kreditera dem genom att direkt\n lägga till deras kredit eller genom att länkning till det pÃ¥ den här sidan.\n

    \n\n\n\n
      \n
    • Australien: innehÃ¥ller förortsdata baserade pÃ¥ australiska statistiska data.
    • \n
    • Österrike: innehÃ¥ller data frÃ¥n Stadt Wien under\n CC-BY.
    • \n
    • Kanada: innehÃ¥ller data frÃ¥n GeoBase®, GeoGratis (© Department of Natural\n Resources Canada), CanVec (© Department of Natural\n Resources Canada) och StatCan (Geography Division, Statistics Canada.
    • \n
    • Frankrike: innehÃ¥ller data frÃ¥n Direction Générale des Impôts.
    • \n
    • Nya Zeeland: innehÃ¥ller data frÃ¥n Land Information New Zealand. Crown Copyright reserved.
    • \n
    • Polen: innehÃ¥ller data frÃ¥n UMP-pcPL kartor. Copyright UMP-pcPL contributors.\n
    • Storbritanien: innehÃ¥ller Ordnance Survey data © Crown copyright and database right 2010.
    • \n
    \n\n

    \n Införandet av uppgifter i OpenStreetMap innebär inte att ursprungligt\n databidragare stöder OpenStreetMap, ger garanti eller\n accepterar något ansvar.\n

    " native: mapping_link: börja kartlägga native_link: Svensk version @@ -928,6 +1009,7 @@ sv: delete_button: Radera notifier: diary_comment_notification: + header: "%{from_user} har lämnat kommentar till ditt OpenStreetMap dagboksinlägg med rubriken %{subject}:" hi: Hej %{to_user}, subject: "[OpenStreetMap] %{user} kommenterade din dagboksanteckning" email_confirm: @@ -941,12 +1023,17 @@ sv: greeting: Hej, hopefully_you_2: "%{server_url} till %{new_address}." friend_notification: + befriend_them: Du kan ocksÃ¥ lägga till dem som en vän pÃ¥ %{befriendurl}. had_added_you: "%{user} har lagt till dig som vän pÃ¥ OpenStreetMap." see_their_profile: Du kan se deras profil pÃ¥ %{userurl}. + subject: "[OpenStreetMap] %{user} lade till dig som en vän" gpx_notification: and_no_tags: och inga taggar. and_the_tags: "och följande taggar:" failure: + failed_to_import: "misslyckats med att importera. Här är felet:" + more_info_1: Mer information om GPX importfel och hur man undviker dem + more_info_2: "de kan hittas pÃ¥:" subject: "[OpenStreetMap] Misslyckades importera GPX" greeting: Hej, success: @@ -965,16 +1052,19 @@ sv: message_notification: footer1: Du kan ocksÃ¥ läsa meddelandet pÃ¥ %{readurl} footer2: och du kan svara pÃ¥ %{replyurl} + header: "%{from_user} har skickat ett meddelande via OpenStreetMap med ämnet %{subject}:" hi: Hej %{to_user}, signup_confirm: subject: "[OpenStreetMap] Bekräfta din e-postadress" signup_confirm_html: - get_reading: Kom igÃ¥ng och läs lite om Openstreetmap pÃ¥ wikin eller opengeodata blogen som ocksÃ¥ har engelska podcasts! + ask_questions: Du kan ställa vilken frÃ¥ga du vill om OpenStreetMap pÃ¥ vÃ¥r frÃ¥gor- och svarsida. + get_reading: Kom igÃ¥ng med OpenStreetMap pÃ¥ wikin, blir uppdaterad om de senaste nyheterna via OpenStreetMaps blogg eller Twitter, eller skumma genom OpenStreetMaps grundare Steve Coasts OpenGeoData blog för en kortfattad historisk genomgÃ¥ng, som ocksÃ¥ har en poddradio att lyssna pÃ¥! greeting: Hej där! more_videos: Det finns %{more_videos_link}. more_videos_here: fler videor här video_to_openstreetmap: introduktionsvideo om OpenStreetMap signup_confirm_plain: + ask_questions: "Du kan ställa valfria frÃ¥gor om OpenStreetMap pÃ¥ vÃ¥r frÃ¥gesida:" click_the_link_1: Om detta är du, välkommen! Klicka pÃ¥ länken nedan för att bekräfta ditt click_the_link_2: konto och läs vidare för mer information om OpenStreetMap. greeting: Hej där! @@ -990,6 +1080,9 @@ sv: allow_write_diary: göra dagboksinlägg, kommentara och lägga till vänner. allow_write_gpx: ladda upp GPS-spÃ¥r allow_write_prefs: ändra pÃ¥ dina inställningar. + request_access: För att programmet %{app_name} ska fÃ¥ tillgÃ¥ng till ditt konto mÃ¥ste du godkänna att det fÃ¥r tillgÃ¥ng till att göra ändringar i ditt namn. Du kan välja eller ta bort hur mÃ¥nga val du vill. + revoke: + flash: Du tagit bort OAuth-nyckel för %{application} oauth_clients: edit: submit: Redigera @@ -1006,12 +1099,16 @@ sv: revoke: Återkalla! new: submit: Registrera + title: Registrera ett nytt program show: allow_write_api: ändra kartan. allow_write_gpx: ladda upp GPS-spÃ¥r. + authorize_url: "Godkänn URL:" edit: Redigera detaljer + support_notice: Vi stödjer HMAC-SHA1 (rekommenderas) sÃ¥väl som oformaterad text i SSL-läge. site: edit: + anon_edits_link_text: Ta reda pÃ¥ varför det är sÃ¥. flash_player_required: Du mÃ¥ste ha Flash för att kunna använda Potatch, OpenStreetMaps flasheditor. Du kan ladda hem Flash Player frÃ¥n Adobe.com. Det finns flera andra editorer tillgängliga för OpenStreetMap. user_page_link: användarsida index: @@ -1025,6 +1122,7 @@ sv: shortlink: Kortlänk key: map_key: Kartnyckel + map_key_tooltip: Symbolförklaring table: entry: admin: Administrativ gräns @@ -1033,15 +1131,21 @@ sv: - Flygplatsterminal - terminal bridge: Svarta kantar = bro + bridleway: Ridstig + brownfield: Förfallen industritomt + building: Viktig byggnad cable: - stollift - stollift cemetery: Begravningsplats + centre: Idrottsanläggning + commercial: Kommersiellt omrÃ¥de common: - Allmänning - äng construction: Vägar som byggs cycleway: Cykelväg + destination: Förbjuden genomfart farm: BondgÃ¥rd footway: GÃ¥ngväg forest: skog @@ -1054,10 +1158,14 @@ sv: military: MilitäromrÃ¥de motorway: Motorväg park: Park + permissive: Endast tillträde för behöriga + pitch: Bollplan primary: Riksväg + private: Privat tillgÃ¥ng rail: Järnväg reserve: Naturreservat resident: BostadsomrÃ¥de + retail: OmrÃ¥de för Detaljhandel runway: - Landningsbana - taxibana @@ -1071,11 +1179,13 @@ sv: - Topp - topp tourist: Turistattraktion + track: SpÃ¥r tram: - spÃ¥rvagn - spÃ¥rvagn trunk: Motortrafikled tunnel: Streckade kanter = tunnel + unclassified: Oklassificerad väg unsurfaced: Oasfalterad väg wood: VÃ¥rdad skog search: @@ -1086,6 +1196,9 @@ sv: sidebar: close: Stäng search_results: Sökresultat + time: + formats: + friendly: "%e %B %Y kl. %H:%M" trace: create: trace_uploaded: Din GPX-fil har laddats upp och väntar pÃ¥ att lagras i databasen. Detta sker vanligtvis inom en halvtimme. När den är klar skickas ett e-brev till dig. @@ -1121,6 +1234,7 @@ sv: heading: Användaren %{user} finns inte title: Ingen sÃ¥dan användare offline: + heading: GPX förvaring är offlien message: GPX-uppladdningssystemet är för närvarande inte tillgängligt. offline_warning: message: GPX-uppladdningssystemet är för tillfället otillgängligt. @@ -1141,13 +1255,13 @@ sv: trackable: SPÅRBAR view_map: Visa karta trace_form: - description: Beskrivning + description: "Beskrivning:" help: Hjälp - tags: Taggar + tags: "Taggar:" tags_help: kommaseparerad upload_button: Uppladdning - upload_gpx: Ladda upp GPX-fil - visibility: Synlighet + upload_gpx: "Ladda upp GPX-fil:" + visibility: "Synlighet:" visibility_help: vad betyder detta? trace_header: see_all_traces: Se alla GPS-spÃ¥r @@ -1157,8 +1271,8 @@ sv: trace_optionals: tags: Taggar trace_paging_nav: - next: Nästa » - previous: "« FöregÃ¥ende" + next: Nästa » + previous: « FöregÃ¥ende showing_page: Visar sida %{page} view: delete_track: Radera detta spÃ¥r @@ -1180,7 +1294,7 @@ sv: uploaded: "Uppladdad den:" visibility: "Synlighet:" visibility: - identifiable: Indentifierbar (visas i GPS-spÃ¥rlistan och som identifierbara, ordnade punkter med tidsstämpel) + identifiable: Identifierbar (visas i GPS-spÃ¥rlistan och som ordnade punkter med tidsstämpel) private: Privat (spÃ¥ret delas anonymt och utan ordning) public: Publik (visas i GPS-spÃ¥rlistan och som anonyma punkter utan ordning) trackable: SpÃ¥rbar (delas bara som anonyma ordnade punker med tidsstämpel) @@ -1188,6 +1302,7 @@ sv: account: contributor terms: agreed: Du har godkänt de nya bidragsgivarvillkoren. + heading: "Användarvillkor:" link text: vad är detta? not yet agreed: Du har ännu inte godkänt de nya bidragsgivarvillkoren. current email address: "Nuvarande E-postadress:" @@ -1209,6 +1324,7 @@ sv: openid: link text: vad är detta? openid: "OpenID:" + preferred editor: "Önskat redigeringsprogram:" preferred languages: "Föredraget sprÃ¥k:" profile description: "Profilbeskrivning:" public editing: @@ -1227,6 +1343,7 @@ sv: title: Redigera konto update home location on click: Uppdatera hemplatsen när jag klickar pÃ¥ kartan? confirm: + before you start: "Vi vet att du knappt kan bärga dig med att komma igÃ¥ng att börja mappa, men först fÃ¥r du gärna fylla i mer information om dig själv i nedanstÃ¥ende formulär:" button: Bekräfta heading: Bekräfta ett användarkonto. press confirm button: Klicka bekräftelseknappen nedan för att aktivera ditt konto. @@ -1256,6 +1373,7 @@ sv: title: Användare login: account not active: Ditt konto är inte aktivterat.
    Vänligen klicka på länken i e-brevet med kontobekräftelsen för att aktivera ditt konto, eller begär ett nytt bekräftelsebrev. + account suspended: Beklagar, ditt konto har stängts av på grund av misstänkt otillåten aktivitet.
    Kontakta %{webmaster} om du vill föra en diskussion kring detta. auth failure: Kunde inte logga in med de uppgifterna. create account minute: Skapa ett konto. Det tar bara en minut. email or username: "E-postadress eller användarnamn:" @@ -1264,6 +1382,8 @@ sv: lost password link: Glömt ditt lösenord? new to osm: Ny på OpenStreetMap? openid: "%{logo} OpenID:" + openid invalid: Tyvärr verkar din OpenID vara felaktigt formaterad. + openid missing provider: Kunde inte nå din OpenID leverantör openid_logo_alt: Logga in med ett OpenID openid_providers: aol: @@ -1290,6 +1410,8 @@ sv: title: Logga in to make changes: För att göra ändringar i OpenStreetMaps data måste du ha ett konto. webmaster: webmaster + with openid: "Du kan även använda ditt OpenID-konto för att logga in:" + with username: "Har du redan ett OpenStreetMap konto? Logga in med ditt användarnamn och lösenord:" logout: heading: Logga ut från OpenStreetMap logout_button: Logga ut @@ -1321,7 +1443,10 @@ sv: no_auto_account_create: Tyvärr kan vi för närvarande inte kan skapa ett konto åt dig automatiskt. not displayed publicly: Visas inte offentligt (se sekretesspolicyn) openid: "%{logo} OpenID:" + openid association: "

    Ditt OpenID är ännu inte associerad med ett OpenStreetMap konto

    \n
      \n
    • Om du är ny pÃ¥ OpenStreetMap, skapa ett nytt konto med hjälp av formuläret nedan.
    • \n
    • \n Om du redan har ett konto kan du logga in till ditt konto pÃ¥ vanligt sätt\n med hjälp av ditt användarnamn och lösenord, för att sedan associera kontot\n med ditt OpenID i användarinställningarna.\n
    • \n
    " password: "Lösenord:" + terms accepted: Tack för att du accepterar de nya vilkoren för bidrag till kartan + terms declined: Vi beklagar att du bestämt dig för att inte acceptera de nya användarvillkoren. För mer information, se denna wikisida. title: Skapa konto no_such_user: body: Det finns ingen användare med namnet %{user}. Kontrollera stavningen eller kanske länken är trasig. @@ -1352,10 +1477,12 @@ sv: agree: Jag godkänner consider_pd_why: vad är det här? decline: AvslÃ¥ + heading: Vilkor för bidrag till kartan legale_names: france: Frankrike italy: Italien rest_of_world: Resten av världen + legale_select: Välj din vistelseort title: Villkor för deltagare view: activate_user: aktivera denna användare @@ -1383,7 +1510,7 @@ sv: moderator_history: visa tilldelade blockeringar my diary: min dagbok my edits: mina redigeringar - my settings: Mina inställningar + my settings: mina inställningar my traces: mina GPS-spÃ¥r nearby users: Andra användare nära dig new diary entry: nytt dagboksinlägg @@ -1402,16 +1529,23 @@ sv: moderator: Återkalla moderatorrättigheter send message: Skicka meddelande settings_link_text: inställningar + spam score: "Spambeömmning:" status: "Status:" traces: spÃ¥r unhide_user: sluta dölja användaren user location: Användarposition your friends: Dina vänner user_block: + blocks_by: + title: Blockeringar av %{name} create: flash: Skapat en blockering av användare %{name}. try_contacting: Försök att kontakta användarenoch ge användaren tid att svara innan du blockerar . + helper: + time_future: Slutar om %{tid}. index: + empty: Inga blockeringar har gjorts ännu. + heading: Lista över blockerade användare title: Användarblockeringar not_found: back: Tillbaka till index @@ -1420,6 +1554,7 @@ sv: creator_name: Skapare display_name: Blockerad användare edit: Ändra + not_revoked: (Inte Ã¥terkallat) reason: Orsak till blockering revoke: Återkalla! revoker_name: Återkallad av @@ -1429,7 +1564,13 @@ sv: one: 1 timma other: "%{count} timmar" revoke: + confirm: Är du säker pÃ¥ att du vill Ã¥terkalla denna blockering + flash: Denna blockering har Ã¥terkallats. + heading: Återkalla blockering pÃ¥ %{block_on} av %{block_by} + past: Detta block avslutades %{time} sedan och kan inte Ã¥terkallas nu. revoke: Återkalla! + time_future: Denna blockering kommer att avslutas inom %{tid}. + title: Upphäv blockering av %{block_on} show: back: Se alla blockeringar confirm: Är du säker? @@ -1440,6 +1581,9 @@ sv: show: Visa status: Status time_future: Upphör om %{time} + time_past: Slutade %{time} sedan + update: + success: Blockering uppdaterad. user_role: filter: already_has_role: Användaren har rollen %{role}. diff --git a/config/locales/te.yml b/config/locales/te.yml index 1661c4c1c..5477dd125 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -111,6 +111,7 @@ te: one: 1 వ్యాఖ్య other: "%{count} వ్యాఖ్యలు" comment_link: ఈ పద్దుపై వ్యాఖ్యానించండి + confirm: నిర్ధారించు reply_link: ఈ పద్దుపై స్పందించండి edit: body: "వివరణ:" @@ -130,6 +131,7 @@ te: location: edit: మార్చు location: "ప్రాంతం:" + view: చూడండి no_such_user: heading: "%{user} అనే వాడుకరి లేనే లేరు" title: అటువంటి వాడుకరి లేరు @@ -229,7 +231,7 @@ te: base: noname: పేరులేదు layouts: - copyright: కాపీహక్కులు & లైసెన్సు + copyright: కాపీహక్కులు & లైసెన్సు edit: మార్చు export: ఎగుమతి foundation: ఫౌండేషన్ @@ -346,7 +348,7 @@ te: search_results: అన్వేషణ ఫలితాలు time: formats: - friendly: "%B %e, %Y నాడు %H:%M వద్ద" + friendly: "%B %e, %Y నాడు %H:%M కి" trace: edit: description: "వివరణ:" @@ -368,14 +370,14 @@ te: edit: మార్చు more: మరిన్ని trace_form: - description: వివరణ + description: "వివరణ:" help: సహాయం tags_help: కామాలతో వేరుపరచినవి upload_button: ఎక్కించు visibility_help: దీని అర్థమేమిటి? trace_paging_nav: - next: తదుపరి » - previous: "« గత" + next: తదుపరి » + previous: "« గత" view: description: "వివరణ:" download: దింపుకోలు @@ -386,11 +388,15 @@ te: account: contributor terms: link text: ఇది ఏమిటి? + current email address: "ప్రస్తుత ఈ-మెయిలు చిరునామా:" email never displayed publicly: (బహిరంగంగా ఎన్నటికీ చూపించబడదు) latitude: "అక్షాంశం:" longitude: "రేఖాంశం:" my settings: నా అమరికలు new email address: "కొత్త ఈమెయిల్ చిరునామా:" + openid: + link text: ఇది ఏమిటి? + openid: "ఓపెన్ఐడీ:" preferred languages: "ప్రాధాన్యతా భాషలు:" profile description: "ప్రొఫైలు వివరణ:" public editing: @@ -432,6 +438,7 @@ te: email address: "ఈమెయిలు చిరునామా:" heading: వాడుకరి ఖాతాని సృష్టించుకోండి not displayed publicly: బహిరంగంగా చూపించబడదు (గోప్యతా విధానాన్ని చూడండి) + openid: "%{logo} ఓపెన్ఐడీ:" password: "సంకేతపదం:" title: ఖాతా సృష్టింపు no_such_user: diff --git a/config/locales/tl.yml b/config/locales/tl.yml index 891aa6c64..cb9279f44 100644 --- a/config/locales/tl.yml +++ b/config/locales/tl.yml @@ -259,8 +259,8 @@ tl: still_editing: (namamatnugot pa rin) view_changeset_details: Tingnan ang mga detalye ng pangkat ng pagbabago changeset_paging_nav: - next: Kasunod » - previous: "« Nakaraan" + next: Kasunod » + previous: « Nakaraan showing_page: Ipinapakita ang pahinang %{page} changesets: area: Pook @@ -872,7 +872,6 @@ tl: map: base: cycle_map: Mapa ng Ikot - noname: Walang Pangalan site: edit_disabled_tooltip: Lumapit upang baguhin ang mapa edit_tooltip: Baguhin ang mapa @@ -1336,8 +1335,8 @@ tl: trace_optionals: tags: Mga tatak trace_paging_nav: - next: Susunod » - previous: "« Nakaraan" + next: Susunod » + previous: « Nakaraan showing_page: Ipinapakita ang pahinang %{page} view: delete_track: Burahin ang bakas na ito diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 17acdb814..96f8c1907 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -87,6 +87,11 @@ tr: entry_role: Ä°lişki %{relation_name} (%{relation_role} olarak) map: deleted: Silindi + edit: + area: Alanı düzenle + node: Noktayı düzenle + relation: Ä°lişki düzenle + way: Yolu düzenle larger: area: Alanı büyük haritada görüntüle node: Noktayı büyük haritada görüntüle @@ -228,8 +233,8 @@ tr: still_editing: (Hala düzenlemekte) view_changeset_details: Değişiklik setleri ayrıntılı görüntüle changeset_paging_nav: - next: Sonraki » - previous: "« Önceki" + next: Sonraki » + previous: « Önceki showing_page: "Gösterilen sayfa: %{page}" changesets: area: Alan @@ -795,7 +800,6 @@ tr: map: base: cycle_map: Topoğrafik Haritası - noname: Arkaplan Boş site: edit_disabled_tooltip: Harita düzenlemek için yakınlaştırmak gerek edit_tooltip: Haritayı düzenle @@ -809,7 +813,7 @@ tr: copyright: Telif hakkı & Lisans documentation: Viki Belgelenmesi documentation_title: Harita Projesinin Belgeleme Sistemi - donate: OpenStreetMap %{link} ile Donanım Yükseltme Fonu'na destek veriniz. + donate: Donanım Yükseltme Fonu'na %{link} yaparak OpenStreetMap'e destek veriniz. donate_link_text: Bağış edit: Düzenle edit_with: "%{editor} kullanarak düzenle" @@ -961,7 +965,9 @@ tr: lost_password_plain: greeting: Merhaba, message_notification: + footer1: Ayrıca mesajı %{readurl} tıklayarak okuyabilirsin footer2: ve %{replyurl} üzerinden cevap verebilirsiniz + header: "OpenStreetMap kullanıcı %{from_user} sana %{subject} konulu bir mesaj gönderdi:" hi: Merhaba %{to_user}, signup_confirm: subject: "[OpenStreetMap] e-posta adresi onaylama mesajı" @@ -1139,8 +1145,8 @@ tr: trace_optionals: tags: Etiketler trace_paging_nav: - next: Sonraki » - previous: "« Önceki" + next: Sonraki » + previous: « Önceki showing_page: Sayfa %{page} görüntüleniyor view: delete_track: Bu izi sil diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 943803a9c..c93d5b2a8 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -255,7 +255,7 @@ uk: edit: редагувати view_history: переглянути історію way: Лінія - way_title: "Ліня: %{way_name}" + way_title: "Лінія: %{way_name}" way_details: also_part_of: one: також є частиною лінії %{related_ways} @@ -894,7 +894,6 @@ uk: map: base: cycle_map: Мапа для велосипедистів - noname: БезНазви site: edit_disabled_tooltip: Збільшить масштаб для редагування мапи edit_tooltip: Редагування мапи @@ -905,7 +904,7 @@ uk: layouts: community_blogs: Блоги спільноти community_blogs_title: Блоги членів спільноти OpenStreetMap - copyright: Авторські права & Ліцензія + copyright: Авторські права & Ліцензія documentation: Документація documentation_title: Документація проекту donate: Підтримайте OpenStreetMap %{link} у фонді оновлення обладнання. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 1b77c48fe..9ecd1c28a 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -83,7 +83,7 @@ vi: changeset: changeset: "Bộ thay đổi: %{id}" changesetxml: Bộ thay đổi XML - download: Tải xuống %{changeset_xml_link} hoặc %{osmchange_xml_link} + download: Tải về %{changeset_xml_link} hoặc %{osmchange_xml_link} feed: title: Bộ thay đổi %{id} title_comment: Bộ thay đổi %{id} – %{comment} @@ -146,7 +146,7 @@ vi: prev_changeset_tooltip: Đóng góp trước của %{user} node: download: "%{download_xml_link}, %{view_history_link}, hoặc %{edit_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML edit: sá»­a đổi node: Nốt node_title: "Nốt: %{node_name}" @@ -156,7 +156,7 @@ vi: part_of: "Trá»±c thuộc:" node_history: download: "%{download_xml_link} hoặc %{view_details_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML node_history: Lịch sá»­ Nốt node_history_title: "Lịch sá»­ Nốt: %{node_name}" view_details: xem chi tiết @@ -172,7 +172,7 @@ vi: showing_page: Đang hiện trang relation: download: "%{download_xml_link} hoặc %{view_history_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML relation: Quan hệ relation_title: "Quan hệ: %{relation_name}" view_history: xem lịch sá»­ @@ -181,7 +181,7 @@ vi: part_of: "Trá»±c thuộc:" relation_history: download: "%{download_xml_link} hoặc %{view_details_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML relation_history: Lịch sá»­ Quan hệ relation_history_title: "Lịch sá»­ Quan hệ: %{relation_name}" view_details: xem chi tiết @@ -243,7 +243,7 @@ vi: way: lối way: download: "%{download_xml_link}, %{view_history_link}, hoặc %{edit_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML edit: sá»­a đổi view_history: xem lịch sá»­ way: Lối @@ -256,7 +256,7 @@ vi: part_of: "Thuộc về:" way_history: download: "%{download_xml_link} hoặc %{view_details_link}" - download_xml: Tải xuống XML + download_xml: Tải về XML view_details: xem chi tiết way_history: Lịch sá»­ Lối way_history_title: "Lịch sá»­ Lối: %{way_name}" @@ -492,6 +492,7 @@ vi: health_centre: Trung tâm Y tế hospital: Bệnh viện hotel: Khách sạn + hunting_stand: Ghế Dá»±ng để Săn bắn ice_cream: Tiệm Kem kindergarten: Tiểu học library: ThÆ° viện @@ -515,6 +516,7 @@ vi: public_building: Tòa nhà Công cộng public_market: Chợ phiên reception_area: Phòng Tiếp khách + recycling: Trung tâm hoặc Thùng Tái sinh restaurant: Nhà hàng retirement_home: Nhà về hÆ°u sauna: Nhà Tắm hÆ¡i @@ -522,6 +524,7 @@ vi: shelter: NÆ¡i Trú ẩn shop: Tiệm shopping: Tiệm + social_club: Câu lạc bộ Xã hội studio: Studio supermarket: Siêu thị taxi: Taxi @@ -531,6 +534,7 @@ vi: townhall: Thị sảnh university: Trường Đại học vending_machine: Máy Bán hàng + veterinary: Phẫu thuật Thú y village_hall: Trụ sở Làng waste_basket: Thùng rác wifi: Điểm Truy cập Không dây @@ -549,6 +553,7 @@ vi: entrance: Cá»­a vào faculty: Tòa nhà Trường học farm: Công trình Nông trại + flats: Khu chung cÆ° garage: Ga ra hall: Hội trường hospital: Tòa nhà Bệnh viện @@ -617,7 +622,7 @@ vi: manor: Trang viên memorial: Đài Tưởng niệm mine: Mỏ - monument: Đài Ká»· niệm + monument: Đài Tưởng niệm museum: Bảo tàng ruins: Tàn tích tower: Tháp @@ -871,8 +876,9 @@ vi: base: cycle_map: Bản đồ Xe đạp mapnik: Mapnik - noname: Không tên + mapquest: MapQuest Mở osmarender: Osmarender + transport_map: Bản đồ Giao thông overlays: maplint: Maplint site: @@ -885,7 +891,7 @@ vi: layouts: community_blogs: Blog của Cộng đồng community_blogs_title: Các blog của thành viên cộng đồng OpenStreetMap - copyright: Bản quyền & Giấy phép + copyright: Bản quyền & Giấy phép documentation: Tài liệu documentation_title: Tài liệu về dá»± án donate: Hỗ trợ OpenStreetMap bằng cách %{link} cho Quỹ Nâng cấp Phần cứng. @@ -1175,7 +1181,7 @@ vi: site: edit: anon_edits_link_text: Tại sao vậy? - flash_player_required: Bạn cần có Flash Player để sá»­ dụng Potlatch, trình vẽ OpenStreetMap bằng Flash. Bạn có thể tải xuống Flash Player từ Adobe.com. CÅ©ng có sẵn vài cách khác để sá»­a đổi OpenStreetMap. + flash_player_required: Bạn cần có Flash Player để sá»­ dụng Potlatch, trình vẽ OpenStreetMap bằng Flash. Bạn có thể tải về Flash Player từ Adobe.com. CÅ©ng có sẵn vài cách khác để sá»­a đổi OpenStreetMap. no_iframe_support: Tính năng này cần trình duyệt hỗ trợ khung nội bộ (iframe) trong HTML. not_public: Bạn chÆ°a đưa ra công khai các sá»­a đổi của bạn. not_public_description: Nếu không đưa ra công khai, bạn không còn được phép sá»­a đổi bản đồ. Bạn có thể đưa ra công khai tại %{user_page}. @@ -1383,7 +1389,7 @@ vi: agreed: Bạn đã đồng ý với các Điều khoản Đóng góp mới. agreed_with_pd: Bạn cÅ©ng đã tuyên bố coi rằng các đóng góp của bạn thuộc về phạm vi công cộng. heading: "Các Điều khoản Đóng góp:" - link text: có nghÄ©a là gì? + link text: đây là gì? not yet agreed: Bạn chÆ°a đồng ý với các Điều khoản Đóng góp mới. review link text: Xin vui lòng theo liên kết này khi nào có thì giờ để đọc lại và chấp nhận các Điều khoản Đóng góp mới. current email address: "Địa chỉ ThÆ° điện tá»­ Hiện tại:" @@ -1404,7 +1410,7 @@ vi: no home location: Bạn chÆ°a định vị trí nhà. openid: link: http://wiki.openstreetmap.org/wiki/OpenID - link text: này là gì? + link text: đây là gì? openid: "OpenID:" preferred editor: "Trình vẽ Ưa thích:" preferred languages: "Ngôn ngữ Ưu tiên:" @@ -1414,7 +1420,7 @@ vi: disabled link text: tại sao không thể sá»­a đổi? enabled: Kích hoạt. Không vô danh và có thể sá»­a đổi dữ liệu. enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits?uselang=vi - enabled link text: có nghÄ©a là gì? + enabled link text: đây là gì? heading: "Sá»­a đổi công khai:" public editing note: heading: Sá»­a đổi công khai @@ -1566,7 +1572,7 @@ vi: terms: agree: Chấp nhận consider_pd: Ngoài các thỏa thuận ở trên, tôi coi rằng các đóng góp của tôi thuộc về phạm vi công cộng - consider_pd_why: có nghÄ©a là gì? + consider_pd_why: đây là gì? decline: Từ chối guidance: "Thông tin để tìm hiểu về các điều khoản này: bản tóm tắt dễ đọc và một số bản dịch không chính thức" heading: Điều kiện đóng góp diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 304108279..d82ce5365 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1,6 +1,7 @@ # Messages for Simplified Chinese (‪中文(简体)‬) # Exported from translatewiki.net # Export driver: syck-pecl +# Author: Anakmalaysia # Author: Hydra # Author: Liangent # Author: Mmyangfl @@ -139,11 +140,11 @@ zh-CN: prev_way_tooltip: 上个路径 paging: all: - next: "%{id} »" - prev: "« %{id}" + next: "%{id} »" + prev: « %{id} user: - next: "%{id} »" - prev: "« %{id}" + next: "%{id} »" + prev: « %{id} user: name_changeset_tooltip: 查看 %{user} 的编辑 next_changeset_tooltip: 下一个 %{user} 的编辑 @@ -274,8 +275,8 @@ zh-CN: still_editing: (仍在编辑中) view_changeset_details: 查看详细变更 changeset_paging_nav: - next: 下一页 » - previous: "« 上一页" + next: 下一页 » + previous: « 上一页 showing_page: 显示第 %{page} 页 changesets: area: 区域 @@ -648,7 +649,7 @@ zh-CN: farmyard: 农家庭院 forest: 森林 grass: 草地 - greenfield: 棕色地带 + greenfield: 绿色地带 industrial: 工业区 landfill: 垃圾填埋场 meadow: 草甸 @@ -895,8 +896,9 @@ zh-CN: base: cycle_map: Cycle Map mapnik: Mapnik - noname: NoName + mapquest: MapQuest Open osmarender: Osmarender + transport_map: Transport Map overlays: maplint: Maplint site: @@ -912,7 +914,7 @@ zh-CN: copyright: 版权及许可 documentation: 文档 documentation_title: 该项目的文档 - donate: 通过下面的%{link}到硬件升级基金来支持 OpenStreetMap。 + donate: 给硬件升级基金%{link}以支持 OpenStreetMap。 donate_link_text: 捐款 edit: 编辑 edit_with: 使用 %{editor} 编辑 @@ -1112,7 +1114,7 @@ zh-CN: greeting: 您好! hopefully_you: 某人(希望是您)想要建立一个账户 introductory_video: 您可以观看一部%{introductory_video_link}。 - more_videos: 这里%{more_videos_link}。 + more_videos: 这里有更多%{more_videos_link}。 more_videos_here: 有更多的影片 user_wiki_page: 推荐您创立一个用户维基页面,它包括分类标签,用来提醒您所在位置,例如 [[Category:Users_in_London]]。 video_to_openstreetmap: 关于 OpenStreetMap 的介绍影片 @@ -1254,7 +1256,7 @@ zh-CN: centre: 体育馆 commercial: 商业区 common: - - 常见 + - 公地 - 草地 construction: 在建道路 cycleway: 自行车道 @@ -1311,7 +1313,7 @@ zh-CN: search_results: 搜索结果 time: formats: - friendly: "%Yå¹´%B%e日 %H:%M" + friendly: "%Y å¹´%B %e 日 %H:%M" trace: create: trace_uploaded: 您的 GPX 文件已经被上传,正等待被输入数据库。这通常在半小时之内,当上传结束后会发邮件通知您。 @@ -1387,8 +1389,8 @@ zh-CN: trace_optionals: tags: 标签 trace_paging_nav: - next: 下一页 » - previous: "« 上一页" + next: 下一页 » + previous: « 上一页 showing_page: 显示第 %{page} 页 view: delete_track: 删除这条轨迹 @@ -1505,7 +1507,7 @@ zh-CN: login_button: 登录 lost password link: 找回密码? new to osm: 第一次来到 OpenStreetMap? - notice: 了解更多有关 OpenStreetMap 即将更换协议 (翻译) (讨论) + notice: 了解有关 OpenStreetMap 即将更换许可协议的信息 (翻译) (讨论) openid: "%{logo} OpenID:" openid invalid: 对不起,您的 OpenID 格式似乎不正确 openid missing provider: 对不起,无法联系您的 OpenID 提供者 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index b6dc1bacf..7fe535669 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1,6 +1,7 @@ # Messages for Traditional Chinese (‪中文(繁體)‬) # Exported from translatewiki.net # Export driver: syck-pecl +# Author: Anakmalaysia # Author: Mmyangfl # Author: Pesder # Author: Wrightbus @@ -263,8 +264,8 @@ zh-TW: still_editing: (尚在編輯) view_changeset_details: 檢視變更組合詳細資訊 changeset_paging_nav: - next: 下一頁 » - previous: "« 上一頁" + next: 下一頁 » + previous: « 上一頁 showing_page: 正在顯示第 %{page} 頁 changesets: area: 區域 @@ -298,7 +299,7 @@ zh-TW: other: "%{count} 個評論" comment_link: 對這個項目的評論 confirm: 確認 - edit_link: 編輯這個項目 + edit_link: 編輯此項目 hide_link: 隱藏此項目 posted_by: 由 %{link_user} 於 %{created} 以 %{language_link} 張貼 reply_link: 回覆這個項目 @@ -546,7 +547,7 @@ zh-TW: layouts: community_blogs: 社群部落格 community_blogs_title: OpenStreetMap 社群成員的部落格 - copyright: 版權 & 授權條款 + copyright: 版權 & 授權條款 documentation: 文件 documentation_title: 該專案的文件 donate: 以 %{link} 給硬體升級基金來支援 OpenStreetMap。 @@ -845,7 +846,7 @@ zh-TW: shortlink: 簡短連結 key: map_key: 圖例 - map_key_tooltip: 在這個縮放等級會顯示的圖例 + map_key_tooltip: 地圖的圖例 table: entry: admin: 行政區邊界 @@ -862,8 +863,8 @@ zh-TW: centre: 運動中心 commercial: 商業區 common: - - Common - - meadow + - 公地 + - 草地 construction: 建築中路段 cycleway: 自行車道 farm: 農田 @@ -903,7 +904,7 @@ zh-TW: wood: 樹木 search: search: 搜尋 - search_help: 範例: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', 或 'post offices near Lç¾¹nen' 更多範例... + search_help: 範例: 'Alkmaar', 'Regent Street, Cambridge', 'CB2 5AQ', 或 'post offices near Lünen' 更多範例... submit_text: 出發 where_am_i: 我在哪裡? where_am_i_title: 使用搜索引擎描述目前的位置 @@ -985,8 +986,8 @@ zh-TW: trace_optionals: tags: 標籤 trace_paging_nav: - next: 下一頁 » - previous: "« 上一頁" + next: 下一頁 » + previous: « 上一頁 showing_page: 顯示頁面 %{page} view: delete_track: 刪除這個軌跡 diff --git a/config/openlayers.cfg b/config/openlayers.cfg index 9a5e8870d..eb3be435f 100644 --- a/config/openlayers.cfg +++ b/config/openlayers.cfg @@ -19,6 +19,7 @@ OpenLayers/Control/PanZoomBar.js OpenLayers/Control/PinchZoom.js OpenLayers/Control/ScaleLine.js OpenLayers/Control/SelectFeature.js +OpenLayers/Control/TransformFeature.js OpenLayers/Layer.js OpenLayers/Layer/GML.js OpenLayers/Layer/Markers.js @@ -57,6 +58,7 @@ OpenLayers/Lang/cs-CZ.js OpenLayers/Lang/da-DK.js OpenLayers/Lang/de.js OpenLayers/Lang/el.js +OpenLayers/Lang/en-CA.js OpenLayers/Lang/en.js OpenLayers/Lang/es.js OpenLayers/Lang/fi.js @@ -68,17 +70,21 @@ OpenLayers/Lang/hr.js OpenLayers/Lang/hsb.js OpenLayers/Lang/hu.js OpenLayers/Lang/ia.js +OpenLayers/Lang/id.js +OpenLayers/Lang/io.js OpenLayers/Lang/is.js OpenLayers/Lang/it.js OpenLayers/Lang/ja.js OpenLayers/Lang/km.js OpenLayers/Lang/ksh.js +OpenLayers/Lang/lt.js OpenLayers/Lang/nb.js OpenLayers/Lang/nds.js OpenLayers/Lang/nl.js OpenLayers/Lang/nn.js -OpenLayers/Lang/pt.js +OpenLayers/Lang/oc.js OpenLayers/Lang/pt-BR.js +OpenLayers/Lang/pt.js OpenLayers/Lang/ru.js OpenLayers/Lang/sk.js OpenLayers/Lang/sv-SE.js diff --git a/config/preinitializer.rb b/config/preinitializer.rb index 357e30218..1cc3f62c7 100644 --- a/config/preinitializer.rb +++ b/config/preinitializer.rb @@ -1,6 +1,6 @@ require 'yaml' -config = YAML.load_file("#{RAILS_ROOT}/config/application.yml") +config = YAML.load_file(File.expand_path("../application.yml", __FILE__)) env = ENV['RAILS_ENV'] || 'development' ENV.each do |key,value| diff --git a/config/routes.rb b/config/routes.rb index 6c30f1170..62c263f0d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,252 +1,254 @@ -ActionController::Routing::Routes.draw do |map| +OpenStreetMap::Application.routes.draw do # API - map.connect "api/capabilities", :controller => 'api', :action => 'capabilities' - map.connect "api/#{API_VERSION}/capabilities", :controller => 'api', :action => 'capabilities' - - map.connect "api/#{API_VERSION}/changeset/create", :controller => 'changeset', :action => 'create' - map.connect "api/#{API_VERSION}/changeset/:id/upload", :controller => 'changeset', :action => 'upload', :id => /\d+/ - map.changeset_download "api/#{API_VERSION}/changeset/:id/download", :controller => 'changeset', :action => 'download', :id => /\d+/ - map.connect "api/#{API_VERSION}/changeset/:id/expand_bbox", :controller => 'changeset', :action => 'expand_bbox', :id => /\d+/ - map.changeset_read "api/#{API_VERSION}/changeset/:id", :controller => 'changeset', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/changeset/:id", :controller => 'changeset', :action => 'update', :id => /\d+/, :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/changeset/:id/close", :controller => 'changeset', :action => 'close', :id =>/\d+/ - map.connect "api/#{API_VERSION}/changesets", :controller => 'changeset', :action => 'query' - - map.connect "api/#{API_VERSION}/node/create", :controller => 'node', :action => 'create' - map.connect "api/#{API_VERSION}/node/:id/ways", :controller => 'way', :action => 'ways_for_node', :id => /\d+/ - map.connect "api/#{API_VERSION}/node/:id/relations", :controller => 'relation', :action => 'relations_for_node', :id => /\d+/ - map.connect "api/#{API_VERSION}/node/:id/history", :controller => 'old_node', :action => 'history', :id => /\d+/ - map.connect "api/#{API_VERSION}/node/:id/:version", :controller => 'old_node', :action => 'version', :id => /\d+/, :version => /\d+/ - map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'update', :id => /\d+/, :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/node/:id", :controller => 'node', :action => 'delete', :id => /\d+/, :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/nodes", :controller => 'node', :action => 'nodes', :id => nil - - map.connect "api/#{API_VERSION}/way/create", :controller => 'way', :action => 'create' - map.connect "api/#{API_VERSION}/way/:id/history", :controller => 'old_way', :action => 'history', :id => /\d+/ - map.connect "api/#{API_VERSION}/way/:id/full", :controller => 'way', :action => 'full', :id => /\d+/ - map.connect "api/#{API_VERSION}/way/:id/relations", :controller => 'relation', :action => 'relations_for_way', :id => /\d+/ - map.connect "api/#{API_VERSION}/way/:id/:version", :controller => 'old_way', :action => 'version', :id => /\d+/, :version => /\d+/ - map.connect "api/#{API_VERSION}/way/:id", :controller => 'way', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/way/:id", :controller => 'way', :action => 'update', :id => /\d+/, :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/way/:id", :controller => 'way', :action => 'delete', :id => /\d+/, :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/ways", :controller => 'way', :action => 'ways', :id => nil - - map.connect "api/#{API_VERSION}/relation/create", :controller => 'relation', :action => 'create' - map.connect "api/#{API_VERSION}/relation/:id/relations", :controller => 'relation', :action => 'relations_for_relation', :id => /\d+/ - map.connect "api/#{API_VERSION}/relation/:id/history", :controller => 'old_relation', :action => 'history', :id => /\d+/ - map.connect "api/#{API_VERSION}/relation/:id/full", :controller => 'relation', :action => 'full', :id => /\d+/ - map.connect "api/#{API_VERSION}/relation/:id/:version", :controller => 'old_relation', :action => 'version', :id => /\d+/, :version => /\d+/ - map.connect "api/#{API_VERSION}/relation/:id", :controller => 'relation', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/relation/:id", :controller => 'relation', :action => 'update', :id => /\d+/, :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/relation/:id", :controller => 'relation', :action => 'delete', :id => /\d+/, :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/relations", :controller => 'relation', :action => 'relations', :id => nil - - map.connect "api/#{API_VERSION}/map", :controller => 'api', :action => 'map' - - map.connect "api/#{API_VERSION}/trackpoints", :controller => 'api', :action => 'trackpoints' - - map.connect "api/#{API_VERSION}/changes", :controller => 'api', :action => 'changes' - - map.connect "api/#{API_VERSION}/search", :controller => 'search', :action => 'search_all' - map.connect "api/#{API_VERSION}/ways/search", :controller => 'search', :action => 'search_ways' - map.connect "api/#{API_VERSION}/relations/search", :controller => 'search', :action => 'search_relations' - map.connect "api/#{API_VERSION}/nodes/search", :controller => 'search', :action => 'search_nodes' - - map.connect "api/#{API_VERSION}/user/details", :controller => 'user', :action => 'api_details' - map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'read', :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'read_one', :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'update', :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'update_one', :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'delete_one', :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/user/gpx_files", :controller => 'user', :action => 'api_gpx_files' - - map.connect "api/#{API_VERSION}/gpx/create", :controller => 'trace', :action => 'api_create' - map.connect "api/#{API_VERSION}/gpx/:id", :controller => 'trace', :action => 'api_read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/gpx/:id", :controller => 'trace', :action => 'api_update', :id => /\d+/, :conditions => { :method => :put } - map.connect "api/#{API_VERSION}/gpx/:id", :controller => 'trace', :action => 'api_delete', :id => /\d+/, :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/gpx/:id/details", :controller => 'trace', :action => 'api_read', :id => /\d+/ - map.connect "api/#{API_VERSION}/gpx/:id/data", :controller => 'trace', :action => 'api_data', :id => /\d+/ - map.connect "api/#{API_VERSION}/gpx/:id/data.:format", :controller => 'trace', :action => 'api_data', :id => /\d+/ + match 'api/capabilities' => 'api#capabilities' + match 'api/0.6/capabilities' => 'api#capabilities' + + match 'api/0.6/changeset/create' => 'changeset#create' + match 'api/0.6/changeset/:id/upload' => 'changeset#upload', :id => /\d+/ + match 'api/0.6/changeset/:id/download' => 'changeset#download', :as => :changeset_download, :id => /\d+/ + match 'api/0.6/changeset/:id/expand_bbox' => 'changeset#expand_bbox', :id => /\d+/ + match 'api/0.6/changeset/:id' => 'changeset#read', :as => :changeset_read, :via => :get, :id => /\d+/ + match 'api/0.6/changeset/:id' => 'changeset#update', :via => :put, :id => /\d+/ + match 'api/0.6/changeset/:id/close' => 'changeset#close', :id => /\d+/ + match 'api/0.6/changesets' => 'changeset#query', :id => nil + + match 'api/0.6/node/create' => 'node#create' + match 'api/0.6/node/:id/ways' => 'way#ways_for_node', :id => /\d+/ + match 'api/0.6/node/:id/relations' => 'relation#relations_for_node', :id => /\d+/ + match 'api/0.6/node/:id/history' => 'old_node#history', :id => /\d+/ + match 'api/0.6/node/:id/:version' => 'old_node#version', :version => /\d+/, :id => /\d+/ + match 'api/0.6/node/:id' => 'node#read', :via => :get, :id => /\d+/ + match 'api/0.6/node/:id' => 'node#update', :via => :put, :id => /\d+/ + match 'api/0.6/node/:id' => 'node#delete', :via => :delete, :id => /\d+/ + match 'api/0.6/nodes' => 'node#nodes', :id => nil + + match 'api/0.6/way/create' => 'way#create' + match 'api/0.6/way/:id/history' => 'old_way#history', :id => /\d+/ + match 'api/0.6/way/:id/full' => 'way#full', :id => /\d+/ + match 'api/0.6/way/:id/relations' => 'relation#relations_for_way', :id => /\d+/ + match 'api/0.6/way/:id/:version' => 'old_way#version', :version => /\d+/, :id => /\d+/ + match 'api/0.6/way/:id' => 'way#read', :via => :get, :id => /\d+/ + match 'api/0.6/way/:id' => 'way#update', :via => :put, :id => /\d+/ + match 'api/0.6/way/:id' => 'way#delete', :via => :delete, :id => /\d+/ + match 'api/0.6/ways' => 'way#ways', :id => nil + + match 'api/0.6/relation/create' => 'relation#create' + match 'api/0.6/relation/:id/relations' => 'relation#relations_for_relation', :id => /\d+/ + match 'api/0.6/relation/:id/history' => 'old_relation#history', :id => /\d+/ + match 'api/0.6/relation/:id/full' => 'relation#full', :id => /\d+/ + match 'api/0.6/relation/:id/:version' => 'old_relation#version', :version => /\d+/, :id => /\d+/ + match 'api/0.6/relation/:id' => 'relation#read', :via => :get, :id => /\d+/ + match 'api/0.6/relation/:id' => 'relation#update', :via => :put, :id => /\d+/ + match 'api/0.6/relation/:id' => 'relation#delete', :via => :delete, :id => /\d+/ + match 'api/0.6/relations' => 'relation#relations' + + match 'api/0.6/map' => 'api#map' + + match 'api/0.6/trackpoints' => 'api#trackpoints' + + match 'api/0.6/changes' => 'api#changes' + + match 'api/0.6/search' => 'search#search_all' + match 'api/0.6/ways/search' => 'search#search_ways' + match 'api/0.6/relations/search' => 'search#search_relations' + match 'api/0.6/nodes/search' => 'search#search_nodes' + + match 'api/0.6/user/details' => 'user#api_details' + match 'api/0.6/user/preferences' => 'user_preference#read', :via => :get + match 'api/0.6/user/preferences/:preference_key' => 'user_preference#read_one', :via => :get + match 'api/0.6/user/preferences' => 'user_preference#update', :via => :put + match 'api/0.6/user/preferences/:preference_key' => 'user_preference#update_one', :via => :put + match 'api/0.6/user/preferences/:preference_key' => 'user_preference#delete_one', :via => :delete + match 'api/0.6/user/gpx_files' => 'user#api_gpx_files' + + match 'api/0.6/gpx/create' => 'trace#api_create' + match 'api/0.6/gpx/:id' => 'trace#api_read', :via => :get, :id => /\d+/ + match 'api/0.6/gpx/:id' => 'trace#api_update', :via => :put, :id => /\d+/ + match 'api/0.6/gpx/:id' => 'trace#api_delete', :via => :delete, :id => /\d+/ + match 'api/0.6/gpx/:id/details' => 'trace#api_read', :id => /\d+/ + match 'api/0.6/gpx/:id/data' => 'trace#api_data' + match 'api/0.6/gpx/:id/data.:format' => 'trace#api_data' # AMF (ActionScript) API - - map.connect "api/#{API_VERSION}/amf/read", :controller =>'amf', :action =>'amf_read' - map.connect "api/#{API_VERSION}/amf/write", :controller =>'amf', :action =>'amf_write' - map.connect "api/#{API_VERSION}/swf/trackpoints", :controller =>'swf', :action =>'trackpoints' + match 'api/0.6/amf/read' => 'amf#amf_read' + match 'api/0.6/amf/write' => 'amf#amf_write' + match 'api/0.6/swf/trackpoints' => 'swf#trackpoints' # Map notes API - map.connect "api/#{API_VERSION}/notes", :controller => 'note', :action => 'list' - map.connect "api/#{API_VERSION}/notes.:format", :controller => 'note', :action => 'list' - map.connect "api/#{API_VERSION}/notes/search", :controller => 'note', :action => 'search' - map.connect "api/#{API_VERSION}/notes/rss", :controller =>'notes', :action => 'rss' - map.connect "api/#{API_VERSION}/note/create", :controller => 'note', :action => 'create' - map.connect "api/#{API_VERSION}/note/:id/comment", :controller => 'note', :action => 'update', :id => /\d+/ - map.connect "api/#{API_VERSION}/note/:id/close", :controller => 'note', :action => 'close', :id => /\d+/ - map.connect "api/#{API_VERSION}/note/:id", :controller => 'note', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/note/:id.:format", :controller => 'note', :action => 'read', :id => /\d+/, :conditions => { :method => :get } - map.connect "api/#{API_VERSION}/note/:id", :controller => 'note', :action => 'delete', :id => /\d+/, :conditions => { :method => :delete } - map.connect "api/#{API_VERSION}/notes/getBugs", :controller => 'note', :action => 'list' - map.connect "api/#{API_VERSION}/notes/addPOIexec", :controller => 'note', :action => 'create' - map.connect "api/#{API_VERSION}/notes/closePOIexec", :controller => 'note', :action => 'close' - map.connect "api/#{API_VERSION}/notes/editPOIexec", :controller => 'note', :action => 'update' - map.connect "api/#{API_VERSION}/notes/getGPX", :controller => 'note', :action => 'list', :format => :gpx - map.connect "api/#{API_VERSION}/notes/getRSSfeed", :controller => 'note', :action => 'rss' + match 'api/0.6/notes' => 'note#list' + match 'api/0.6/notes.:format' => 'note#list' + match 'api/0.6/notes/search' => 'note#search' + match 'api/0.6/notes/rss' => 'notes#rss' + match 'api/0.6/note/create' => 'note#create' + match 'api/0.6/note/:id/comment' => 'note#update', :id => /\d+/ + match 'api/0.6/note/:id/close' => 'note#close', :id => /\d+/ + match 'api/0.6/note/:id' => 'note#read', :via => :get, :id => /\d+/ + match 'api/0.6/note/:id.:format' => 'note#read', :via => :get, :id => /\d+/ + match 'api/0.6/note/:id' => 'note#delete', :via => :delete, :id => /\d+/ + match 'api/0.6/notes/getBugs' => 'note#list' + match 'api/0.6/notes/addPOIexec' => 'note#create' + match 'api/0.6/notes/closePOIexec' => 'note#close' + match 'api/0.6/notes/editPOIexec' => 'note#update' + match 'api/0.6/notes/getGPX' => 'note#list', :format => :gpx + match 'api/0.6/notes/getRSSfeed' => 'note#rss' # Data browsing - map.connect '/browse/start', :controller => 'browse', :action => 'start' - map.connect '/browse/way/:id', :controller => 'browse', :action => 'way', :id => /\d+/ - map.connect '/browse/way/:id/history', :controller => 'browse', :action => 'way_history', :id => /\d+/ - map.connect '/browse/node/:id', :controller => 'browse', :action => 'node', :id => /\d+/ - map.connect '/browse/node/:id/history', :controller => 'browse', :action => 'node_history', :id => /\d+/ - map.connect '/browse/relation/:id', :controller => 'browse', :action => 'relation', :id => /\d+/ - map.connect '/browse/relation/:id/history', :controller => 'browse', :action => 'relation_history', :id => /\d+/ - map.changeset '/browse/changeset/:id', :controller => 'browse', :action => 'changeset', :id => /\d+/ - map.connect '/user/:display_name/edits/feed', :controller => 'changeset', :action => 'list', :format =>:atom - map.connect '/user/:display_name/edits', :controller => 'changeset', :action => 'list' - map.connect '/browse/changesets/feed', :controller => 'changeset', :action => 'list', :format => :atom - map.connect '/browse/changesets', :controller => 'changeset', :action => 'list' - map.connect '/browse/note/:id', :controller => 'browse', :action => 'note', :id => /\d+/ - map.connect '/user/:display_name/notes', :controller => 'note', :action => 'mine' - map.connect '/browse', :controller => 'changeset', :action => 'list' + match '/browse/start' => 'browse#start' + match '/browse/way/:id' => 'browse#way', :id => /\d+/ + match '/browse/way/:id/history' => 'browse#way_history', :id => /\d+/ + match '/browse/node/:id' => 'browse#node', :id => /\d+/ + match '/browse/node/:id/history' => 'browse#node_history', :id => /\d+/ + match '/browse/relation/:id' => 'browse#relation', :id => /\d+/ + match '/browse/relation/:id/history' => 'browse#relation_history', :id => /\d+/ + match '/browse/changeset/:id' => 'browse#changeset', :as => :changeset, :id => /\d+/ + match '/user/:display_name/edits' => 'changeset#list' + match '/user/:display_name/edits/feed' => 'changeset#feed', :format => :atom + match '/browse/friends' => 'changeset#list', :friends => true + match '/browse/changesets' => 'changeset#list' + match '/browse/changesets/feed' => 'changeset#feed', :format => :atom + match '/browse/note/:id' => 'browse#note', :id => /\d+/ + match '/user/:display_name/notes' => 'note#mine' + match '/browse' => 'changeset#list' # web site - map.root :controller => 'site', :action => 'index' - map.connect '/', :controller => 'site', :action => 'index' - map.connect '/edit', :controller => 'site', :action => 'edit' - map.connect '/copyright', :controller => 'site', :action => 'copyright' - map.connect '/copyright/:copyright_locale', :controller => 'site', :action => 'copyright' - map.connect '/history', :controller => 'changeset', :action => 'list' - map.connect '/history/feed', :controller => 'changeset', :action => 'list', :format => :atom - map.connect '/export', :controller => 'site', :action => 'export' - map.connect '/login', :controller => 'user', :action => 'login' - map.connect '/logout', :controller => 'user', :action => 'logout' - map.connect '/offline', :controller => 'site', :action => 'offline' - map.connect '/key', :controller => 'site', :action => 'key' - map.connect '/user/new', :controller => 'user', :action => 'new' - map.connect '/user/terms', :controller => 'user', :action => 'terms' - map.connect '/user/save', :controller => 'user', :action => 'save' - map.connect '/user/:display_name/confirm/resend', :controller => 'user', :action => 'confirm_resend' - map.connect '/user/:display_name/confirm', :controller => 'user', :action => 'confirm' - map.connect '/user/confirm', :controller => 'user', :action => 'confirm' - map.connect '/user/confirm-email', :controller => 'user', :action => 'confirm_email' - map.connect '/user/go_public', :controller => 'user', :action => 'go_public' - map.connect '/user/reset-password', :controller => 'user', :action => 'reset_password' - map.connect '/user/forgot-password', :controller => 'user', :action => 'lost_password' - map.connect '/user/suspended', :controller => 'user', :action => 'suspended' - - map.connect '/index.html', :controller => 'site', :action => 'index' - map.connect '/edit.html', :controller => 'site', :action => 'edit' - map.connect '/export.html', :controller => 'site', :action => 'export' - map.connect '/login.html', :controller => 'user', :action => 'login' - map.connect '/logout.html', :controller => 'user', :action => 'logout' - map.connect '/create-account.html', :controller => 'user', :action => 'new' - map.connect '/forgot-password.html', :controller => 'user', :action => 'lost_password' + match '/' => 'site#index' + match '/edit' => 'site#edit' + match '/copyright' => 'site#copyright' + match '/copyright/:copyright_locale' => 'site#copyright' + match '/history' => 'changeset#list' + match '/history/feed' => 'changeset#feed', :format => :atom + match '/export' => 'site#export' + match '/login' => 'user#login' + match '/logout' => 'user#logout' + match '/offline' => 'site#offline' + match '/key' => 'site#key' + match '/user/new' => 'user#new' + match '/user/terms' => 'user#terms' + match '/user/save' => 'user#save' + match '/user/:display_name/confirm/resend' => 'user#confirm_resend' + match '/user/:display_name/confirm' => 'user#confirm' + match '/user/confirm' => 'user#confirm' + match '/user/confirm-email' => 'user#confirm_email' + match '/user/go_public' => 'user#go_public' + match '/user/reset-password' => 'user#reset_password' + match '/user/forgot-password' => 'user#lost_password' + match '/user/suspended' => 'user#suspended' + + match '/index.html' => 'site#index' + match '/edit.html' => 'site#edit' + match '/export.html' => 'site#export' + match '/login.html' => 'user#login' + match '/logout.html' => 'user#logout' + match '/create-account.html' => 'user#new' + match '/forgot-password.html' => 'user#lost_password' # permalink - map.connect '/go/:code', :controller => 'site', :action => 'permalink', :code => /[a-zA-Z0-9_@]+[=-]*/ - - # traces - map.connect '/user/:display_name/traces/tag/:tag/page/:page', :controller => 'trace', :action => 'list' - map.connect '/user/:display_name/traces/tag/:tag', :controller => 'trace', :action => 'list' - map.connect '/user/:display_name/traces/page/:page', :controller => 'trace', :action => 'list' - map.connect '/user/:display_name/traces', :controller => 'trace', :action => 'list' - map.connect '/user/:display_name/traces/tag/:tag/rss', :controller => 'trace', :action => 'georss' - map.connect '/user/:display_name/traces/rss', :controller => 'trace', :action => 'georss' - map.connect '/user/:display_name/traces/:id', :controller => 'trace', :action => 'view' - map.connect '/user/:display_name/traces/:id/picture', :controller => 'trace', :action => 'picture' - map.connect '/user/:display_name/traces/:id/icon', :controller => 'trace', :action => 'icon' - map.connect '/traces/tag/:tag/page/:page', :controller => 'trace', :action => 'list' - map.connect '/traces/tag/:tag', :controller => 'trace', :action => 'list' - map.connect '/traces/page/:page', :controller => 'trace', :action => 'list' - map.connect '/traces', :controller => 'trace', :action => 'list' - map.connect '/traces/tag/:tag/rss', :controller => 'trace', :action => 'georss' - map.connect '/traces/rss', :controller => 'trace', :action => 'georss' - map.connect '/traces/mine/tag/:tag/page/:page', :controller => 'trace', :action => 'mine' - map.connect '/traces/mine/tag/:tag', :controller => 'trace', :action => 'mine' - map.connect '/traces/mine/page/:page', :controller => 'trace', :action => 'mine' - map.connect '/traces/mine', :controller => 'trace', :action => 'mine' - map.connect '/trace/create', :controller => 'trace', :action => 'create' - map.connect '/trace/:id/data', :controller => 'trace', :action => 'data' - map.connect '/trace/:id/data.:format', :controller => 'trace', :action => 'data' - map.connect '/trace/:id/edit', :controller => 'trace', :action => 'edit' - map.connect '/trace/:id/delete', :controller => 'trace', :action => 'delete' + match '/go/:code' => 'site#permalink', :code => /[a-zA-Z0-9_@~]+[=-]*/ + + # traces + match '/user/:display_name/traces/tag/:tag/page/:page' => 'trace#list' + match '/user/:display_name/traces/tag/:tag' => 'trace#list' + match '/user/:display_name/traces/page/:page' => 'trace#list' + match '/user/:display_name/traces' => 'trace#list' + match '/user/:display_name/traces/tag/:tag/rss' => 'trace#georss' + match '/user/:display_name/traces/rss' => 'trace#georss' + match '/user/:display_name/traces/:id' => 'trace#view' + match '/user/:display_name/traces/:id/picture' => 'trace#picture' + match '/user/:display_name/traces/:id/icon' => 'trace#icon' + match '/traces/tag/:tag/page/:page' => 'trace#list' + match '/traces/tag/:tag' => 'trace#list' + match '/traces/page/:page' => 'trace#list' + match '/traces' => 'trace#list' + match '/traces/tag/:tag/rss' => 'trace#georss' + match '/traces/rss' => 'trace#georss' + match '/traces/mine/tag/:tag/page/:page' => 'trace#mine' + match '/traces/mine/tag/:tag' => 'trace#mine' + match '/traces/mine/page/:page' => 'trace#mine' + match '/traces/mine' => 'trace#mine' + match '/trace/create' => 'trace#create' + match '/trace/:id/data' => 'trace#data' + match '/trace/:id/data.:format' => 'trace#data' + match '/trace/:id/edit' => 'trace#edit' + match '/trace/:id/delete' => 'trace#delete' # diary pages - map.connect '/diary/new', :controller => 'diary_entry', :action => 'new' - map.connect '/user/:display_name/diary/rss', :controller => 'diary_entry', :action => 'rss' - map.connect '/diary/:language/rss', :controller => 'diary_entry', :action => 'rss' - map.connect '/diary/rss', :controller => 'diary_entry', :action => 'rss' - map.connect '/user/:display_name/diary', :controller => 'diary_entry', :action => 'list' - map.connect '/diary/:language', :controller => 'diary_entry', :action => 'list' - map.connect '/diary', :controller => 'diary_entry', :action => 'list' - map.connect '/user/:display_name/diary/:id', :controller => 'diary_entry', :action => 'view', :id => /\d+/ - map.connect '/user/:display_name/diary/:id/newcomment', :controller => 'diary_entry', :action => 'comment', :id => /\d+/ - map.connect '/user/:display_name/diary/:id/edit', :controller => 'diary_entry', :action => 'edit', :id => /\d+/ - map.connect '/user/:display_name/diary/:id/hide', :controller => 'diary_entry', :action => 'hide', :id => /\d+/ - map.connect '/user/:display_name/diary/:id/hidecomment/:comment', :controller => 'diary_entry', :action => 'hidecomment', :id => /\d+/, :comment => /\d+/ + match '/diary/new' => 'diary_entry#new' + match '/user/:display_name/diary/rss' => 'diary_entry#rss', :format => :rss + match '/diary/:language/rss' => 'diary_entry#rss', :format => :rss + match '/diary/rss' => 'diary_entry#rss', :format => :rss + match '/user/:display_name/diary' => 'diary_entry#list' + match '/diary/:language' => 'diary_entry#list' + match '/diary' => 'diary_entry#list' + match '/user/:display_name/diary/:id' => 'diary_entry#view', :id => /\d+/ + match '/user/:display_name/diary/:id/newcomment' => 'diary_entry#comment', :id => /\d+/ + match '/user/:display_name/diary/:id/edit' => 'diary_entry#edit', :id => /\d+/ + match '/user/:display_name/diary/:id/hide' => 'diary_entry#hide', :id => /\d+/ + match '/user/:display_name/diary/:id/hidecomment/:comment' => 'diary_entry#hidecomment', :id => /\d+/, :comment => /\d+/ # user pages - map.connect '/user/:display_name', :controller => 'user', :action => 'view' - map.connect '/user/:display_name/make_friend', :controller => 'user', :action => 'make_friend' - map.connect '/user/:display_name/remove_friend', :controller => 'user', :action => 'remove_friend' - map.connect '/user/:display_name/account', :controller => 'user', :action => 'account' - map.connect '/user/:display_name/set_status', :controller => 'user', :action => 'set_status' - map.connect '/user/:display_name/delete', :controller => 'user', :action => 'delete' + match '/user/:display_name' => 'user#view' + match '/user/:display_name/make_friend' => 'user#make_friend' + match '/user/:display_name/remove_friend' => 'user#remove_friend' + match '/user/:display_name/account' => 'user#account' + match '/user/:display_name/set_status' => 'user#set_status' + match '/user/:display_name/delete' => 'user#delete' # user lists - map.connect '/users', :controller => 'user', :action => 'list' - map.connect '/users/:status', :controller => 'user', :action => 'list' + match '/users' => 'user#list' + match '/users/:status' => 'user#list' # test pages - map.connect '/test/populate/:table/:from/:count', :controller => 'test', :action => 'populate' - map.connect '/test/populate/:table/:count', :controller => 'test', :action => 'populate', :from => 1 + match '/test/populate/:table/:from/:count' => 'test#populate' + match '/test/populate/:table/:count' => 'test#populate', :from => 1 # geocoder - map.connect '/geocoder/search', :controller => 'geocoder', :action => 'search' - map.connect '/geocoder/search_latlon', :controller => 'geocoder', :action => 'search_latlon' - map.connect '/geocoder/search_us_postcode', :controller => 'geocoder', :action => 'search_us_postcode' - map.connect '/geocoder/search_uk_postcode', :controller => 'geocoder', :action => 'search_uk_postcode' - map.connect '/geocoder/search_ca_postcode', :controller => 'geocoder', :action => 'search_ca_postcode' - map.connect '/geocoder/search_osm_namefinder', :controller => 'geocoder', :action => 'search_osm_namefinder' - map.connect '/geocoder/search_osm_nominatim', :controller => 'geocoder', :action => 'search_osm_nominatim' - map.connect '/geocoder/search_geonames', :controller => 'geocoder', :action => 'search_geonames' - map.connect '/geocoder/description', :controller => 'geocoder', :action => 'description' - map.connect '/geocoder/description_osm_namefinder', :controller => 'geocoder', :action => 'description_osm_namefinder' - map.connect '/geocoder/description_osm_nominatim', :controller => 'geocoder', :action => 'description_osm_nominatim' - map.connect '/geocoder/description_geonames', :controller => 'geocoder', :action => 'description_geonames' + match '/geocoder/search' => 'geocoder#search' + match '/geocoder/search_latlon' => 'geocoder#search_latlon' + match '/geocoder/search_us_postcode' => 'geocoder#search_us_postcode' + match '/geocoder/search_uk_postcode' => 'geocoder#search_uk_postcode' + match '/geocoder/search_ca_postcode' => 'geocoder#search_ca_postcode' + match '/geocoder/search_osm_namefinder' => 'geocoder#search_osm_namefinder' + match '/geocoder/search_osm_nominatim' => 'geocoder#search_osm_nominatim' + match '/geocoder/search_geonames' => 'geocoder#search_geonames' + match '/geocoder/description' => 'geocoder#description' + match '/geocoder/description_osm_namefinder' => 'geocoder#description_osm_namefinder' + match '/geocoder/description_osm_nominatim' => 'geocoder#description_osm_nominatim' + match '/geocoder/description_geonames' => 'geocoder#description_geonames' # export - map.connect '/export/start', :controller => 'export', :action => 'start' - map.connect '/export/finish', :controller => 'export', :action => 'finish' + match '/export/start' => 'export#start' + match '/export/finish' => 'export#finish' # messages - map.connect '/user/:display_name/inbox', :controller => 'message', :action => 'inbox' - map.connect '/user/:display_name/outbox', :controller => 'message', :action => 'outbox' - map.connect '/message/new/:display_name', :controller => 'message', :action => 'new' - map.connect '/message/read/:message_id', :controller => 'message', :action => 'read' - map.connect '/message/mark/:message_id', :controller => 'message', :action => 'mark' - map.connect '/message/reply/:message_id', :controller => 'message', :action => 'reply' - map.connect '/message/delete/:message_id', :controller => 'message', :action => 'delete' + match '/user/:display_name/inbox' => 'message#inbox' + match '/user/:display_name/outbox' => 'message#outbox' + match '/message/new/:display_name' => 'message#new' + match '/message/read/:message_id' => 'message#read' + match '/message/mark/:message_id' => 'message#mark' + match '/message/reply/:message_id' => 'message#reply' + match '/message/delete/:message_id' => 'message#delete' # oauth admin pages (i.e: for setting up new clients, etc...) - map.resources :oauth_clients, :path_prefix => '/user/:display_name' - map.connect '/oauth/revoke', :controller => 'oauth', :action => 'revoke' - map.authorize '/oauth/authorize', :controller => 'oauth', :action => 'oauthorize' - map.request_token '/oauth/request_token', :controller => 'oauth', :action => 'request_token' - map.access_token '/oauth/access_token', :controller => 'oauth', :action => 'access_token' - map.test_request '/oauth/test_request', :controller => 'oauth', :action => 'test_request' + scope "/user/:display_name" do + resources :oauth_clients + end + match '/oauth/revoke' => 'oauth#revoke' + match '/oauth/authorize' => 'oauth#authorize', :as => :authorize + match '/oauth/token' => 'oauth#token', :as => :token + match '/oauth/request_token' => 'oauth#request_token', :as => :request_token + match '/oauth/access_token' => 'oauth#access_token', :as => :access_token + match '/oauth/test_request' => 'oauth#test_request', :as => :test_request # roles and banning pages - map.connect '/user/:display_name/role/:role/grant', :controller => 'user_roles', :action => 'grant' - map.connect '/user/:display_name/role/:role/revoke', :controller => 'user_roles', :action => 'revoke' - map.connect '/user/:display_name/blocks', :controller => 'user_blocks', :action => 'blocks_on' - map.connect '/user/:display_name/blocks_by', :controller => 'user_blocks', :action => 'blocks_by' - map.connect '/blocks/new/:display_name', :controller => 'user_blocks', :action => 'new' - map.resources :user_blocks, :as => 'blocks' - map.connect '/blocks/:id/revoke', :controller => 'user_blocks', :action => 'revoke' + match '/user/:display_name/role/:role/grant' => 'user_roles#grant' + match '/user/:display_name/role/:role/revoke' => 'user_roles#revoke' + match '/user/:display_name/blocks' => 'user_blocks#blocks_on' + match '/user/:display_name/blocks_by' => 'user_blocks#blocks_by' + match '/blocks/new/:display_name' => 'user_blocks#new' + resources :user_blocks + match '/blocks/:id/revoke' => 'user_blocks#revoke' # fall through - map.connect ':controller/:id/:action' - map.connect ':controller/:action' + match ':controller/:id/:action' => '#index' + match ':controller/:action' => '#index' end diff --git a/db/migrate/008_remove_segments.rb b/db/migrate/008_remove_segments.rb index 16968edad..a7d185e4c 100644 --- a/db/migrate/008_remove_segments.rb +++ b/db/migrate/008_remove_segments.rb @@ -82,6 +82,6 @@ class RemoveSegments < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/020_populate_node_tags_and_remove.rb b/db/migrate/020_populate_node_tags_and_remove.rb index 7d0791189..0e2fae063 100644 --- a/db/migrate/020_populate_node_tags_and_remove.rb +++ b/db/migrate/020_populate_node_tags_and_remove.rb @@ -55,7 +55,7 @@ class PopulateNodeTagsAndRemove < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration # add_column :nodes, "tags", :text, :default => "", :null => false # add_column :current_nodes, "tags", :text, :default => "", :null => false end diff --git a/db/migrate/021_move_to_innodb.rb b/db/migrate/021_move_to_innodb.rb index 8312dec2c..50e7ec8be 100644 --- a/db/migrate/021_move_to_innodb.rb +++ b/db/migrate/021_move_to_innodb.rb @@ -16,7 +16,7 @@ class MoveToInnodb < ActiveRecord::Migration } @@conv_tables.each { |tbl| - change_engine (tbl, "InnoDB") + change_engine tbl, "InnoDB" } @@ver_tbl.each { |tbl| @@ -42,6 +42,6 @@ class MoveToInnodb < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/022_key_constraints.rb b/db/migrate/022_key_constraints.rb index 46e7ae662..a9d6fb102 100644 --- a/db/migrate/022_key_constraints.rb +++ b/db/migrate/022_key_constraints.rb @@ -47,6 +47,6 @@ class KeyConstraints < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/023_add_changesets.rb b/db/migrate/023_add_changesets.rb index 94cf853c8..de3e3bc48 100644 --- a/db/migrate/023_add_changesets.rb +++ b/db/migrate/023_add_changesets.rb @@ -41,7 +41,7 @@ class AddChangesets < ActiveRecord::Migration def self.down # It's not easy to generate the user ids from the changesets - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration #drop_table "changesets" #drop_table "changeset_tags" end diff --git a/db/migrate/029_add_user_foreign_keys.rb b/db/migrate/029_add_user_foreign_keys.rb index f965be77e..759359258 100644 --- a/db/migrate/029_add_user_foreign_keys.rb +++ b/db/migrate/029_add_user_foreign_keys.rb @@ -15,6 +15,6 @@ class AddUserForeignKeys < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/030_add_foreign_keys.rb b/db/migrate/030_add_foreign_keys.rb index eba44cfad..5adc20559 100644 --- a/db/migrate/030_add_foreign_keys.rb +++ b/db/migrate/030_add_foreign_keys.rb @@ -9,6 +9,6 @@ class AddForeignKeys < ActiveRecord::Migration end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/034_create_languages.rb b/db/migrate/034_create_languages.rb index ab5a7eee6..95ed7d9ce 100644 --- a/db/migrate/034_create_languages.rb +++ b/db/migrate/034_create_languages.rb @@ -10,13 +10,13 @@ class CreateLanguages < ActiveRecord::Migration add_primary_key :languages, [:code] - Language.load(RAILS_ROOT + "/config/languages.yml") + Language.load("#{Rails.root}/config/languages.yml") add_foreign_key :users, [:locale], :languages, [:code] add_foreign_key :diary_entries, [:language_code], :languages, [:code] end def self.down - raise IrreversibleMigration.new + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/20110925112722_rename_ids.rb b/db/migrate/20110925112722_rename_ids.rb new file mode 100644 index 000000000..9cdbaaa36 --- /dev/null +++ b/db/migrate/20110925112722_rename_ids.rb @@ -0,0 +1,18 @@ +class RenameIds < ActiveRecord::Migration + def change + rename_column :changeset_tags, :id, :changeset_id + rename_column :current_node_tags, :id, :node_id + rename_column :nodes, :id, :node_id + rename_column :node_tags, :id, :node_id + rename_column :current_way_tags, :id, :way_id + rename_column :current_way_nodes, :id, :way_id + rename_column :ways, :id, :way_id + rename_column :way_tags, :id, :way_id + rename_column :way_nodes, :id, :way_id + rename_column :current_relation_tags, :id, :relation_id + rename_column :current_relation_members, :id, :relation_id + rename_column :relations, :id, :relation_id + rename_column :relation_tags, :id, :relation_id + rename_column :relation_members, :id, :relation_id + end +end diff --git a/db/migrate/20111116184519_update_oauth.rb b/db/migrate/20111116184519_update_oauth.rb new file mode 100644 index 000000000..59ab9c39b --- /dev/null +++ b/db/migrate/20111116184519_update_oauth.rb @@ -0,0 +1,11 @@ +class UpdateOauth < ActiveRecord::Migration + def up + add_column :oauth_tokens, :scope, :string + add_column :oauth_tokens, :valid_to, :timestamp + end + + def down + remove_column :oauth_tokens, :valid_to + remove_column :oauth_tokens, :scope + end +end diff --git a/db/migrate/20111212183945_add_lowercase_user_indexes.rb b/db/migrate/20111212183945_add_lowercase_user_indexes.rb new file mode 100644 index 000000000..27355b1d1 --- /dev/null +++ b/db/migrate/20111212183945_add_lowercase_user_indexes.rb @@ -0,0 +1,13 @@ +require 'lib/migrate' + +class AddLowercaseUserIndexes < ActiveRecord::Migration + def up + add_index :users, :display_name, :lowercase => true, :name => "users_display_name_lower_idx" + add_index :users, :email, :lowercase => true, :name => "users_email_lower_idx" + end + + def down + remove_index :users, :name => "users_email_lower_idx" + remove_index :users, :name => "users_display_name_lower_idx" + end +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 000000000..664d8c74c --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) +# Mayor.create(:name => 'Daley', :city => cities.first) diff --git a/lib/bounding_box.rb b/lib/bounding_box.rb index 30bbebb8d..38b994d26 100644 --- a/lib/bounding_box.rb +++ b/lib/bounding_box.rb @@ -1,58 +1,120 @@ class BoundingBox - def initialize(min_lon, min_lat, max_lon, max_lat) - @bbox = [min_lon.to_f, min_lat.to_f, max_lon.to_f, max_lat.to_f] - end - - def self.from_s(s) - BoundingBox.new(*s.split(/,/)) - end - - def min_lon - @bbox[0] - end - - def min_lon=(min_lon) - @bbox[0] = min_lon - end - - def min_lat - @bbox[1] - end - - def min_lat=(min_lat) - @bbox[1] = min_lat - end + attr_reader :min_lon, :min_lat, :max_lon, :max_lat - def max_lon - @bbox[2] - end - - def max_lon=(max_lon) - @bbox[2] = max_lon - end +private + LON_LIMIT = 180.0 + LAT_LIMIT = 90.0 + SCALED_LON_LIMIT = LON_LIMIT * GeoRecord::SCALE + SCALED_LAT_LIMIT = LAT_LIMIT * GeoRecord::SCALE - def max_lat - @bbox[3] +public + def initialize(min_lon, min_lat, max_lon, max_lat) + @min_lon = min_lon.to_f unless min_lon.nil? + @min_lat = min_lat.to_f unless min_lat.nil? + @max_lon = max_lon.to_f unless max_lon.nil? + @max_lat = max_lat.to_f unless max_lat.nil? end - def max_lat=(max_lat) - @bbox[3] = max_lat + def self.from_s(s) + if s.count(',') == 3 + BoundingBox.new(*s.split(/,/)) + else + nil + end + end + + def self.from_bbox_params(params) + if params[:bbox] and params[:bbox].count(',') == 3 + bbox_array = params[:bbox].split(',') + end + from_bbox_array(bbox_array) + end + + def self.from_lon_lat_params(params) + if params[:minlon] and params[:minlat] and params[:maxlon] and params[:maxlat] + bbox_array = [params[:minlon], params[:minlat], params[:maxlon], params[:maxlat]] + end + from_bbox_array(bbox_array) + end + + def self.from_lrbt_params(params) + if params[:l] and params[:b] and params[:t] and params[:t] + bbox_array = [params[:l], params[:b], params[:r], params[:t]] + end + from_bbox_array(bbox_array) + end + + def expand!(bbox, margin = 0) + update!(bbox) unless complete? + # only try to expand the bbox if there is a value for every coordinate + # which there will be from the previous line as long as array does not contain a nil + if bbox.complete? + @min_lon = [-SCALED_LON_LIMIT, + bbox.min_lon + margin * (min_lon - max_lon)].max if bbox.min_lon < min_lon + @min_lat = [-SCALED_LAT_LIMIT, + bbox.min_lat + margin * (min_lat - max_lat)].max if bbox.min_lat < min_lat + @max_lon = [+SCALED_LON_LIMIT, + bbox.max_lon + margin * (max_lon - min_lon)].min if bbox.max_lon > max_lon + @max_lat = [+SCALED_LAT_LIMIT, + bbox.max_lat + margin * (max_lat - min_lat)].min if bbox.max_lat > max_lat + end + self + end + + def check_boundaries + # check the bbox is sane + if min_lon > max_lon + raise OSM::APIBadBoundingBox.new( + "The minimum longitude must be less than the maximum longitude, but it wasn't") + end + if min_lat > max_lat + raise OSM::APIBadBoundingBox.new( + "The minimum latitude must be less than the maximum latitude, but it wasn't") + end + if min_lon < -LON_LIMIT || min_lat < -LAT_LIMIT || max_lon > +LON_LIMIT || max_lat > +LAT_LIMIT + raise OSM::APIBadBoundingBox.new("The latitudes must be between #{-LAT_LIMIT} and #{LAT_LIMIT}," + + " and longitudes between #{-LON_LIMIT} and #{LON_LIMIT}") + end + self + end + + def check_size(max_area = MAX_REQUEST_AREA) + # check the bbox isn't too large + if area > max_area + raise OSM::APIBadBoundingBox.new("The maximum bbox size is " + max_area.to_s + + ", and your request was too large. Either request a smaller area, or use planet.osm") + end + self + end + + ## + # returns area of the bbox as a rough comparative quantity + def area + if complete? + (max_lon - min_lon) * (max_lat - min_lat) + else + 0 + end + end + + def complete? + not to_a.include?(nil) end def centre_lon - (@bbox[0] + @bbox[2]) / 2.0 + (min_lon + max_lon) / 2.0 end def centre_lat - (@bbox[1] + @bbox[3]) / 2.0 + (min_lat + max_lat) / 2.0 end def width - @bbox[2] - @bbox[0] + max_lon - min_lon end def height - @bbox[3] - @bbox[1] + max_lat - min_lat end def slippy_width(zoom) @@ -63,10 +125,64 @@ class BoundingBox min = min_lat * Math::PI / 180.0 max = max_lat * Math::PI / 180.0 - Math.log((Math.tan(max) + 1.0 / Math.cos(max)) / (Math.tan(min) + 1.0 / Math.cos(min))) * 128.0 * 2.0 ** zoom / Math::PI + Math.log((Math.tan(max) + 1.0 / Math.cos(max)) / + (Math.tan(min) + 1.0 / Math.cos(min))) * + (128.0 * 2.0 ** zoom / Math::PI) + end + + # there are two forms used for bounds with and without an underscore, + # cater for both forms eg minlon and min_lon + def add_bounds_to(hash, underscore = "") + hash["min#{underscore}lat"] = min_lat.to_s + hash["min#{underscore}lon"] = min_lon.to_s + hash["max#{underscore}lat"] = max_lat.to_s + hash["max#{underscore}lon"] = max_lon.to_s + hash + end + + def to_scaled + BoundingBox.new((min_lon * GeoRecord::SCALE), + (min_lat * GeoRecord::SCALE), + (max_lon * GeoRecord::SCALE), + (max_lat * GeoRecord::SCALE)) + end + + def to_unscaled + BoundingBox.new((min_lon / GeoRecord::SCALE), + (min_lat / GeoRecord::SCALE), + (max_lon / GeoRecord::SCALE), + (max_lat / GeoRecord::SCALE)) + end + + def to_a + [min_lon, min_lat, max_lon, max_lat] end def to_s - return @bbox.join(",") + "#{min_lon},#{min_lat},#{max_lon},#{max_lat}" + end + + private + def self.from_bbox_array(bbox_array) + unless bbox_array + raise OSM::APIBadUserInput.new( + "The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat") + end + # Take an array of length 4, create a bounding box with min_lon, min_lat, max_lon and + # max_lat within their respective boundaries. + min_lon = [[bbox_array[0].to_f, -LON_LIMIT].max, +LON_LIMIT].min + min_lat = [[bbox_array[1].to_f, -LAT_LIMIT].max, +LAT_LIMIT].min + max_lon = [[bbox_array[2].to_f, +LON_LIMIT].min, -LON_LIMIT].max + max_lat = [[bbox_array[3].to_f, +LAT_LIMIT].min, -LAT_LIMIT].max + BoundingBox.new(min_lon, min_lat, max_lon, max_lat) + end + + def update!(bbox) + # ensure that bbox has no nils in it. if there are any + # nils, just use the bounding box update to write over them. + @min_lon = bbox.min_lon if min_lon.nil? + @min_lat = bbox.min_lat if min_lat.nil? + @max_lon = bbox.max_lon if max_lon.nil? + @max_lat = bbox.max_lat if max_lat.nil? end end diff --git a/lib/daemons/gpx_import.rb b/lib/daemons/gpx_import.rb index 8250a67f5..698e858ba 100755 --- a/lib/daemons/gpx_import.rb +++ b/lib/daemons/gpx_import.rb @@ -21,15 +21,15 @@ while(true) do gpx = trace.import if gpx.actual_points > 0 - Notifier::deliver_gpx_success(trace, gpx.actual_points) + Notifier.gpx_success(trace, gpx.actual_points).deliver else - Notifier::deliver_gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?') + Notifier.gpx_failure(trace, '0 points parsed ok. Do they all have lat,lng,alt,timestamp?').deliver trace.destroy end rescue Exception => ex logger.info ex.to_s ex.backtrace.each {|l| logger.info l } - Notifier::deliver_gpx_failure(trace, ex.to_s + "\n" + ex.backtrace.join("\n")) + Notifier.gpx_failure(trace, ex.to_s + "\n" + ex.backtrace.join("\n")).deliver trace.destroy end diff --git a/lib/geo_record.rb b/lib/geo_record.rb index 90dee5f1d..0c261dc69 100644 --- a/lib/geo_record.rb +++ b/lib/geo_record.rb @@ -5,11 +5,8 @@ module GeoRecord SCALE = 10000000 def self.included(base) - base.extend(ClassMethods) - end - - def before_save - self.update_tile + base.scope :bbox, lambda { |bbox| base.where(OSM.sql_for_area(bbox)) } + base.before_save :update_tile end # Is this node within -90 >= latitude >= 90 and -180 >= longitude >= 180 @@ -47,12 +44,4 @@ private def lat2y(a) 180/Math::PI * Math.log(Math.tan(Math::PI/4+a*(Math::PI/180)/2)) end - - module ClassMethods - def find_by_area(minlat, minlon, maxlat, maxlon, options) - self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do - return self.find(:all, options) - end - end - end end diff --git a/lib/map_boundary.rb b/lib/map_boundary.rb deleted file mode 100644 index b3085d0ec..000000000 --- a/lib/map_boundary.rb +++ /dev/null @@ -1,32 +0,0 @@ -module MapBoundary - # Take an array of length 4, and return the min_lon, min_lat, max_lon and - # max_lat within their respective boundaries. - def sanitise_boundaries(bbox) - min_lon = [[bbox[0].to_f,-180].max,180].min - min_lat = [[bbox[1].to_f,-90].max,90].min - max_lon = [[bbox[2].to_f,+180].min,-180].max - max_lat = [[bbox[3].to_f,+90].min,-90].max - return min_lon, min_lat, max_lon, max_lat - end - - def check_boundaries(min_lon, min_lat, max_lon, max_lat, max_area = MAX_REQUEST_AREA) - # check the bbox is sane - unless min_lon <= max_lon - raise OSM::APIBadBoundingBox.new("The minimum longitude must be less than the maximum longitude, but it wasn't") - end - unless min_lat <= max_lat - raise OSM::APIBadBoundingBox.new("The minimum latitude must be less than the maximum latitude, but it wasn't") - end - unless min_lon >= -180 && min_lat >= -90 && max_lon <= 180 && max_lat <= 90 - # Due to sanitize_boundaries, it is highly unlikely we'll actually get here - raise OSM::APIBadBoundingBox.new("The latitudes must be between -90 and 90, and longitudes between -180 and 180") - end - - # check the bbox isn't too large - requested_area = (max_lat-min_lat)*(max_lon-min_lon) - if requested_area > max_area - raise OSM::APIBadBoundingBox.new("The maximum bbox size is " + max_area.to_s + - ", and your request was too large. Either request a smaller area, or use planet.osm") - end - end -end diff --git a/lib/migrate.rb b/lib/migrate.rb index 8e6629f0d..8f7e635f1 100644 --- a/lib/migrate.rb +++ b/lib/migrate.rb @@ -17,8 +17,8 @@ module ActiveRecord def add_foreign_key(table_name, column_name, reftbl, refcol = nil) execute "ALTER TABLE #{table_name} ADD " + - "FOREIGN KEY (#{quote_column_names(column_name)}) " + - "REFERENCES #{reftbl} (#{quote_column_names(refcol || column_name)})" + "FOREIGN KEY (#{quote_column_names(column_name)}) " + + "REFERENCES #{reftbl} (#{quote_column_names(refcol || column_name)})" end def remove_foreign_key(table_name, column_name, reftbl, refcol = nil) @@ -42,169 +42,175 @@ module ActiveRecord end end - class MysqlAdapter - if MysqlAdapter.public_instance_methods(false).include?('native_database_types') + if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter) + class MysqlAdapter alias_method :old_native_database_types, :native_database_types - end - def native_database_types - types = old_native_database_types - types[:bigint] = { :name => "bigint", :limit => 20 } - types[:double] = { :name => "double" } - types[:integer_pk] = { :name => "integer DEFAULT NULL auto_increment PRIMARY KEY" } - types[:bigint_pk] = { :name => "bigint(20) DEFAULT NULL auto_increment PRIMARY KEY" } - types[:bigint_pk_64] = { :name => "bigint(64) DEFAULT NULL auto_increment PRIMARY KEY" } - types[:bigint_auto_64] = { :name => "bigint(64) DEFAULT NULL auto_increment" } - types[:bigint_auto_11] = { :name => "bigint(11) DEFAULT NULL auto_increment" } - types[:bigint_auto_20] = { :name => "bigint(20) DEFAULT NULL auto_increment" } - types[:four_byte_unsigned] = { :name=> "integer unsigned" } - types[:inet] = { :name=> "integer unsigned" } + def native_database_types + types = old_native_database_types + types[:bigint] = { :name => "bigint", :limit => 20 } + types[:double] = { :name => "double" } + types[:integer_pk] = { :name => "integer DEFAULT NULL auto_increment PRIMARY KEY" } + types[:bigint_pk] = { :name => "bigint(20) DEFAULT NULL auto_increment PRIMARY KEY" } + types[:bigint_pk_64] = { :name => "bigint(64) DEFAULT NULL auto_increment PRIMARY KEY" } + types[:bigint_auto_64] = { :name => "bigint(64) DEFAULT NULL auto_increment" } + types[:bigint_auto_11] = { :name => "bigint(11) DEFAULT NULL auto_increment" } + types[:bigint_auto_20] = { :name => "bigint(20) DEFAULT NULL auto_increment" } + types[:four_byte_unsigned] = { :name=> "integer unsigned" } + types[:inet] = { :name=> "integer unsigned" } + + enumerations.each do |e,v| + types[e.to_sym]= { :name => "enum('#{v.join '\',\''}')" } + end - enumerations.each do |e,v| - types[e.to_sym]= { :name => "enum('#{v.join '\',\''}')" } + types end - types - end - - def change_column(table_name, column_name, type, options = {}) - unless options_include_default?(options) - options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"] + def change_column(table_name, column_name, type, options = {}) + unless options_include_default?(options) + options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"] - unless type == :string or type == :text - options.delete(:default) if options[:default] = ""; + unless type == :string or type == :text + options.delete(:default) if options[:default] = ""; + end end - end - change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}" - add_column_options!(change_column_sql, options) - execute(change_column_sql) - end + change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}" + add_column_options!(change_column_sql, options) + execute(change_column_sql) + end - def myisam_table - return { :id => false, :force => true, :options => "ENGINE=MyIsam" } - end + def myisam_table + return { :id => false, :force => true, :options => "ENGINE=MyIsam" } + end - def innodb_table - return { :id => false, :force => true, :options => "ENGINE=InnoDB" } - end + def innodb_table + return { :id => false, :force => true, :options => "ENGINE=InnoDB" } + end - def innodb_option - return "ENGINE=InnoDB" - end + def innodb_option + return "ENGINE=InnoDB" + end - def change_engine (table_name, engine) - execute "ALTER TABLE #{table_name} ENGINE = #{engine}" - end + def change_engine (table_name, engine) + execute "ALTER TABLE #{table_name} ENGINE = #{engine}" + end - def add_fulltext_index (table_name, column) - execute "CREATE FULLTEXT INDEX `#{table_name}_#{column}_idx` ON `#{table_name}` (`#{column}`)" - end + def add_fulltext_index (table_name, column) + execute "CREATE FULLTEXT INDEX `#{table_name}_#{column}_idx` ON `#{table_name}` (`#{column}`)" + end - def enumerations - @enumerations ||= Hash.new - end + def enumerations + @enumerations ||= Hash.new + end - def create_enumeration(enumeration_name, values) - enumerations[enumeration_name] = values - end + def create_enumeration (enumeration_name, values) + enumerations[enumeration_name] = values + end - def drop_enumeration(enumeration_name) - enumerations.delete(enumeration_name) - end + def drop_enumeration (enumeration_name) + enumerations.delete(enumeration_name) + end - def alter_primary_key(table_name, new_columns) - execute("alter table #{table_name} drop primary key, add primary key (#{new_columns.join(',')})") - end + def alter_primary_key(table_name, new_columns) + execute("alter table #{table_name} drop primary key, add primary key (#{new_columns.join(',')})") + end - def interval_constant(interval) - "'#{interval}'" + def interval_constant(interval) + "'#{interval}'" + end end end - class PostgreSQLAdapter - if PostgreSQLAdapter.public_instance_methods(false).include?('native_database_types') + if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) + class PostgreSQLAdapter alias_method :old_native_database_types, :native_database_types - end - def native_database_types - types = old_native_database_types - types[:double] = { :name => "double precision" } - types[:integer_pk] = { :name => "serial PRIMARY KEY" } - types[:bigint_pk] = { :name => "bigserial PRIMARY KEY" } - types[:bigint_pk_64] = { :name => "bigserial PRIMARY KEY" } - types[:bigint_auto_64] = { :name => "bigint" } #fixme: need autoincrement? - types[:bigint_auto_11] = { :name => "bigint" } #fixme: need autoincrement? - types[:bigint_auto_20] = { :name => "bigint" } #fixme: need autoincrement? - types[:four_byte_unsigned] = { :name => "bigint" } # meh - types[:inet] = { :name=> "inet" } + def native_database_types + types = old_native_database_types + types[:double] = { :name => "double precision" } + types[:integer_pk] = { :name => "serial PRIMARY KEY" } + types[:bigint_pk] = { :name => "bigserial PRIMARY KEY" } + types[:bigint_pk_64] = { :name => "bigserial PRIMARY KEY" } + types[:bigint_auto_64] = { :name => "bigint" } #fixme: need autoincrement? + types[:bigint_auto_11] = { :name => "bigint" } #fixme: need autoincrement? + types[:bigint_auto_20] = { :name => "bigint" } #fixme: need autoincrement? + types[:four_byte_unsigned] = { :name => "bigint" } # meh + types[:inet] = { :name=> "inet" } + + enumerations.each_key do |e| + types[e.to_sym]= { :name => e } + end - enumerations.each_key do |e| - types[e.to_sym]= { :name => e } + types end - types - end + def myisam_table + return { :id => false, :force => true, :options => ""} + end - def myisam_table - return { :id => false, :force => true, :options => ""} - end + def innodb_table + return { :id => false, :force => true, :options => ""} + end - def innodb_table - return { :id => false, :force => true, :options => ""} - end + def innodb_option + return "" + end - def innodb_option - return "" - end - - def change_engine(table_name, engine) - end + def change_engine (table_name, engine) + end - def add_fulltext_index(table_name, column) - execute "CREATE INDEX #{table_name}_#{column}_idx ON #{table_name} (#{column})" - end + def add_fulltext_index (table_name, column) + execute "CREATE INDEX #{table_name}_#{column}_idx on #{table_name} (#{column})" + end - def enumerations - @enumerations ||= Hash.new - end + def enumerations + @enumerations ||= Hash.new + end - def create_enumeration(enumeration_name, values) - enumerations[enumeration_name] = values - execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')" - end + def create_enumeration(enumeration_name, values) + enumerations[enumeration_name] = values + execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')" + end - def drop_enumeration(enumeration_name) - execute "DROP TYPE #{enumeration_name}" - enumerations.delete(enumeration_name) - end + def drop_enumeration(enumeration_name) + execute "DROP TYPE #{enumeration_name}" + enumerations.delete(enumeration_name) + end - def rename_enumeration(old_name, new_name) - execute "ALTER TYPE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}" - end + def rename_enumeration(old_name, new_name) + execute "ALTER TYPE #{quote_table_name(old_name)} RENAME TO #{quote_table_name(new_name)}" + end - def alter_primary_key(table_name, new_columns) - execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{table_name}_pkey" - execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns.join(',')})" - end + def alter_primary_key(table_name, new_columns) + execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{table_name}_pkey" + execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns.join(',')})" + end - def interval_constant(interval) - "'#{interval}'::interval" - end + def interval_constant(interval) + "'#{interval}'::interval" + end - def add_index(table_name, column_name, options = {}) - column_names = Array(column_name) - index_name = index_name(table_name, :column => column_names) + def add_index(table_name, column_name, options = {}) + column_names = Array(column_name) + index_name = index_name(table_name, :column => column_names) + + if Hash === options # legacy support, since this param was a string + index_type = options[:unique] ? "UNIQUE" : "" + index_name = options[:name] || index_name + index_method = options[:method] || "BTREE" + else + index_type = options + end - if Hash === options # legacy support, since this param was a string - index_type = options[:unique] ? "UNIQUE" : "" - index_name = options[:name] || index_name - index_method = options[:method] || "BTREE" - else - index_type = options + quoted_column_names = column_names.map { |e| quote_column_name(e) } + if Hash === options and options[:lowercase] + quoted_column_names = quoted_column_names.map { |e| "LOWER(#{e})" } + end + quoted_column_names = quoted_column_names.join(", ") + + execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} USING #{index_method} (#{quoted_column_names})" end - quoted_column_names = column_names.map { |e| quote_column_name(e) }.join(", ") - execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} USING #{index_method} (#{quoted_column_names})" end def rename_index(table_name, old_name, new_name) diff --git a/lib/osm.rb b/lib/osm.rb index 9ee36e0c7..02c51df78 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -440,7 +440,7 @@ module OSM doc = XML::Document.new doc.encoding = XML::Encoding::UTF_8 root = XML::Node.new 'osm' - root['version'] = API_VERSION + root['version'] = API_VERSION.to_s root['generator'] = GENERATOR doc.root = root return doc @@ -497,15 +497,12 @@ module OSM end # Return an SQL fragment to select a given area of the globe - def self.sql_for_area(minlat, minlon, maxlat, maxlon, prefix = nil) - tilesql = QuadTile.sql_for_area(minlat, minlon, maxlat, maxlon, prefix) + def self.sql_for_area(bbox, prefix = nil) + tilesql = QuadTile.sql_for_area(bbox, prefix) + bbox = bbox.to_scaled - minlat = (minlat * 10000000).round - minlon = (minlon * 10000000).round - maxlat = (maxlat * 10000000).round - maxlon = (maxlon * 10000000).round - - return "#{tilesql} AND #{prefix}latitude BETWEEN #{minlat} AND #{maxlat} AND #{prefix}longitude BETWEEN #{minlon} AND #{maxlon}" + return "#{tilesql} AND #{prefix}latitude BETWEEN #{bbox.min_lat} AND #{bbox.max_lat} " + + "AND #{prefix}longitude BETWEEN #{bbox.min_lon} AND #{bbox.max_lon}" end # Return a spam score for a chunk of text @@ -530,8 +527,8 @@ module OSM end def self.legal_text_for_country(country_code) - file_name = File.join(RAILS_ROOT, "config", "legales", country_code.to_s + ".yml") - file_name = File.join(RAILS_ROOT, "config", "legales", DEFAULT_LEGALE + ".yml") unless File.exist? file_name + file_name = File.join(Rails.root, "config", "legales", country_code.to_s + ".yml") + file_name = File.join(Rails.root, "config", "legales", DEFAULT_LEGALE + ".yml") unless File.exist? file_name YAML::load_file(file_name) end end diff --git a/lib/potlatch.rb b/lib/potlatch.rb index 29ab4535a..43be2f8b4 100644 --- a/lib/potlatch.rb +++ b/lib/potlatch.rb @@ -1,3 +1,5 @@ +require 'stringio' + # The Potlatch module provides helper functions for potlatch and its communication with the server module Potlatch @@ -97,7 +99,7 @@ module Potlatch when 'FalseClass' 0.chr+encodedouble(0) else - RAILS_DEFAULT_LOGGER.error("Unexpected Ruby type for AMF conversion: "+n.class.to_s) + Rails.logger.error("Unexpected Ruby type for AMF conversion: "+n.class.to_s) end end @@ -119,6 +121,48 @@ module Potlatch end + # The Dispatcher class handles decoding a series of RPC calls + # from the request, dispatching them, and encoding the response + class Dispatcher + def initialize(request, &block) + # Get stream for request data + @request = StringIO.new(request + 0.chr) + + # Skip version indicator and client ID + @request.read(2) + + # Skip headers + AMF.getint(@request).times do # Read number of headers and loop + AMF.getstring(@request) # | skip name + req.getc # | skip boolean + AMF.getvalue(@request) # | skip value + end + + # Capture the dispatch routine + @dispatch = Proc.new + end + + def each(&block) + # Read number of message bodies + bodies = AMF.getint(@request) + + # Output response header + a,b = bodies.divmod(256) + yield 0.chr + 0.chr + 0.chr + 0.chr + a.chr + b.chr + + # Process the bodies + bodies.times do # Read each body + name = AMF.getstring(@request) # | get message name + index = AMF.getstring(@request) # | get index in response sequence + bytes = AMF.getlong(@request) # | get total size in bytes + args = AMF.getvalue(@request) # | get response (probably an array) + + result = @dispatch.call(name, *args) + + yield AMF.putdata(index, result) + end + end + end # The Potlatch class is a helper for Potlatch class Potlatch @@ -130,7 +174,7 @@ module Potlatch # [3] colours, [4] casing, [5] areas, [6] autotags # (all hashes) def self.get_presets - RAILS_DEFAULT_LOGGER.info(" Message: getpresets") + Rails.logger.info(" Message: getpresets") # Read preset menus presets={} @@ -139,7 +183,7 @@ module Potlatch presettype='' presetcategory='' # StringIO.open(txt) do |file| - File.open("#{RAILS_ROOT}/config/potlatch/presets.txt") do |file| + File.open("#{Rails.root}/config/potlatch/presets.txt") do |file| file.each_line {|line| t=line.chomp if (t=~/(\w+)\/(\w+)/) then @@ -160,7 +204,7 @@ module Potlatch # Read colours/styling colours={}; casing={}; areas={} - File.open("#{RAILS_ROOT}/config/potlatch/colours.txt") do |file| + File.open("#{Rails.root}/config/potlatch/colours.txt") do |file| file.each_line {|line| t=line.chomp if (t=~/(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/) then @@ -174,7 +218,7 @@ module Potlatch # Read relations colours/styling relcolours={}; relalphas={}; relwidths={} - File.open("#{RAILS_ROOT}/config/potlatch/relation_colours.txt") do |file| + File.open("#{Rails.root}/config/potlatch/relation_colours.txt") do |file| file.each_line {|line| t=line.chomp if (t=~/(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/) then @@ -188,7 +232,7 @@ module Potlatch # Read POI presets icon_list=[]; icon_tags={}; - File.open("#{RAILS_ROOT}/config/potlatch/icon_presets.txt") do |file| + File.open("#{Rails.root}/config/potlatch/icon_presets.txt") do |file| file.each_line {|line| (icon,tags)=line.chomp.split("\t") icon_list.push(icon) @@ -199,7 +243,7 @@ module Potlatch # Read auto-complete autotags={}; autotags['point']={}; autotags['way']={}; autotags['POI']={}; - File.open("#{RAILS_ROOT}/config/potlatch/autocomplete.txt") do |file| + File.open("#{Rails.root}/config/potlatch/autocomplete.txt") do |file| file.each_line {|line| t=line.chomp if (t=~/^([\w:]+)\/(\w+)\s+(.+)$/) then diff --git a/lib/potlatch2.rb b/lib/potlatch2.rb index 5f21b5b9c..f967c032c 100644 --- a/lib/potlatch2.rb +++ b/lib/potlatch2.rb @@ -2,11 +2,16 @@ module Potlatch2 LOCALES = { "de" => "de_DE", "de-DE" => "de_DE", - "en" => "en_GB", + "en" => "en_US", "en-GB" => "en_GB", + "en-US" => "en_US", "fr" => "fr_FR", "fr-FR" => "fr_FR", + "ja" => "ja_JP", + "ja-JP" => "ja_JP", "pl" => "pl_PL", - "pl-PL" => "pl_PL" + "pl-PL" => "pl_PL", + "vi" => "vi_VN", + "vi-VN" => "vi_VN" } end diff --git a/lib/quad_tile.rb b/lib/quad_tile.rb index 70012597b..258fb9fd5 100644 --- a/lib/quad_tile.rb +++ b/lib/quad_tile.rb @@ -9,11 +9,11 @@ module QuadTile return tile_for_xy(x, y) end - def self.tiles_for_area(minlat, minlon, maxlat, maxlon) - minx = ((minlon + 180) * 65535 / 360).round - maxx = ((maxlon + 180) * 65535 / 360).round - miny = ((minlat + 90) * 65535 / 180).round - maxy = ((maxlat + 90) * 65535 / 180).round + def self.tiles_for_area(bbox) + minx = ((bbox.min_lon + 180) * 65535 / 360).round + maxx = ((bbox.max_lon + 180) * 65535 / 360).round + miny = ((bbox.min_lat + 90) * 65535 / 180).round + maxy = ((bbox.max_lat + 90) * 65535 / 180).round tiles = [] minx.upto(maxx) do |x| @@ -40,8 +40,8 @@ module QuadTile return t end - def self.iterate_tiles_for_area(minlat, minlon, maxlat, maxlon) - tiles = tiles_for_area(minlat, minlon, maxlat, maxlon) + def self.iterate_tiles_for_area(bbox) + tiles = tiles_for_area(bbox) first = last = nil tiles.sort.each do |tile| @@ -60,11 +60,11 @@ module QuadTile end end - def self.sql_for_area(minlat, minlon, maxlat, maxlon, prefix) + def self.sql_for_area(bbox, prefix) sql = Array.new single = Array.new - iterate_tiles_for_area(minlat, minlon, maxlat, maxlon) do |first,last| + iterate_tiles_for_area(bbox) do |first,last| if first == last single.push(first) else diff --git a/lib/quad_tile/quad_tile.c b/lib/quad_tile/quad_tile.c index 089154597..cd45e6e76 100644 --- a/lib/quad_tile/quad_tile.c +++ b/lib/quad_tile/quad_tile.c @@ -63,12 +63,12 @@ static VALUE tile_for_point(VALUE self, VALUE lat, VALUE lon) return UINT2NUM(xy2tile(x, y)); } -static VALUE tiles_for_area(VALUE self, VALUE minlat, VALUE minlon, VALUE maxlat, VALUE maxlon) +static VALUE tiles_for_area(VALUE self, VALUE bbox) { - unsigned int minx = lon2x(NUM2DBL(minlon)); - unsigned int maxx = lon2x(NUM2DBL(maxlon)); - unsigned int miny = lat2y(NUM2DBL(minlat)); - unsigned int maxy = lat2y(NUM2DBL(maxlat)); + unsigned int minx = lon2x(NUM2DBL(rb_iv_get(bbox, "@min_lon"))); + unsigned int maxx = lon2x(NUM2DBL(rb_iv_get(bbox, "@max_lon"))); + unsigned int miny = lat2y(NUM2DBL(rb_iv_get(bbox, "@min_lat"))); + unsigned int maxy = lat2y(NUM2DBL(rb_iv_get(bbox, "@max_lat"))); tilelist_t tl = tilelist_for_area(minx, miny, maxx, maxy); VALUE tiles = rb_ary_new(); unsigned int t; @@ -88,12 +88,12 @@ static VALUE tile_for_xy(VALUE self, VALUE x, VALUE y) return UINT2NUM(xy2tile(NUM2UINT(x), NUM2UINT(y))); } -static VALUE iterate_tiles_for_area(VALUE self, VALUE minlat, VALUE minlon, VALUE maxlat, VALUE maxlon) +static VALUE iterate_tiles_for_area(VALUE self, VALUE bbox) { - unsigned int minx = lon2x(NUM2DBL(minlon)); - unsigned int maxx = lon2x(NUM2DBL(maxlon)); - unsigned int miny = lat2y(NUM2DBL(minlat)); - unsigned int maxy = lat2y(NUM2DBL(maxlat)); + unsigned int minx = lon2x(NUM2DBL(rb_iv_get(bbox, "@min_lon"))); + unsigned int maxx = lon2x(NUM2DBL(rb_iv_get(bbox, "@max_lon"))); + unsigned int miny = lat2y(NUM2DBL(rb_iv_get(bbox, "@min_lat"))); + unsigned int maxy = lat2y(NUM2DBL(rb_iv_get(bbox, "@max_lat"))); tilelist_t tl = tilelist_for_area(minx, miny, maxx, maxy); if (tl.tilec > 0) @@ -140,9 +140,9 @@ void Init_quad_tile_so(void) VALUE m = rb_define_module("QuadTile"); rb_define_module_function(m, "tile_for_point", tile_for_point, 2); - rb_define_module_function(m, "tiles_for_area", tiles_for_area, 4); + rb_define_module_function(m, "tiles_for_area", tiles_for_area, 1); rb_define_module_function(m, "tile_for_xy", tile_for_xy, 2); - rb_define_module_function(m, "iterate_tiles_for_area", iterate_tiles_for_area, 4); + rb_define_module_function(m, "iterate_tiles_for_area", iterate_tiles_for_area, 1); return; } diff --git a/lib/short_link.rb b/lib/short_link.rb index b91d7e569..045883d57 100644 --- a/lib/short_link.rb +++ b/lib/short_link.rb @@ -9,7 +9,7 @@ module ShortLink # array of 64 chars to encode 6 bits. this is almost like base64 encoding, but # the symbolic chars are different, as base64's + and / aren't very # URL-friendly. - ARRAY = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a + ['_','@'] + ARRAY = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a + ['_','~'] ## # Given a string encoding a location, returns the [lon, lat, z] tuple of that @@ -20,6 +20,11 @@ module ShortLink z = 0 z_offset = 0 + # keep support for old shortlinks which use the @ character, now + # replaced by the ~ character because twitter is horribly broken + # and we can't have that. + str.gsub!("@","~") + str.each_char do |c| t = ARRAY.index c if t.nil? diff --git a/lib/utf8.rb b/lib/utf8.rb index 5f0d219ba..90b8f0413 100644 --- a/lib/utf8.rb +++ b/lib/utf8.rb @@ -1,3 +1,5 @@ +require 'iconv' + module UTF8 ## # Checks that a string is valid UTF-8 by trying to convert it to UTF-8 diff --git a/public/dispatch.cgi b/public/dispatch.cgi deleted file mode 100755 index 3848806db..000000000 --- a/public/dispatch.cgi +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/ruby1.8 - -require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT) - -# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like: -# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired -require "dispatcher" - -ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun) -Dispatcher.dispatch \ No newline at end of file diff --git a/public/dispatch.fcgi b/public/dispatch.fcgi deleted file mode 100755 index 3a13f230c..000000000 --- a/public/dispatch.fcgi +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/ruby1.8 -# -# You may specify the path to the FastCGI crash log (a log of unhandled -# exceptions which forced the FastCGI instance to exit, great for debugging) -# and the number of requests to process before running garbage collection. -# -# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log -# and the GC period is nil (turned off). A reasonable number of requests -# could range from 10-100 depending on the memory footprint of your app. -# -# Example: -# # Default log path, normal GC behavior. -# RailsFCGIHandler.process! -# -# # Default log path, 50 requests between GC. -# RailsFCGIHandler.process! nil, 50 -# -# # Custom log path, normal GC behavior. -# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log' -# -require File.dirname(__FILE__) + "/../config/environment" -require 'fcgi_handler' - -class OpenStreetMapFCGIHandler < RailsFCGIHandler -protected - def process_request(cgi) - # Call superclass to process the request - super - - # Restart if we've hit our memory limit - if resident_size > 512 - dispatcher_log :info, "restarting due to memory limit" - restart! - end - end - - def resident_size - # Read statm to get process sizes. Format is - # Size RSS Shared Text Lib Data - fields = File.open("/proc/self/statm") do |file| - fields = file.gets.split(" ") - end - - # Return resident size in megabytes - return fields[1].to_i / 256 - end -end - -OpenStreetMapFCGIHandler.process! diff --git a/public/dispatch.rb b/public/dispatch.rb deleted file mode 100755 index 3848806db..000000000 --- a/public/dispatch.rb +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/ruby1.8 - -require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT) - -# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like: -# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired -require "dispatcher" - -ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun) -Dispatcher.dispatch \ No newline at end of file diff --git a/public/export/embed.html b/public/export/embed.html index bba670255..43678db03 100644 --- a/public/export/embed.html +++ b/public/export/embed.html @@ -20,8 +20,8 @@ bottom: 3px!important; } - - + +