Merge branch 'master' into overpass
authorTom Hughes <tom@compton.nu>
Sat, 1 Nov 2014 12:46:42 +0000 (12:46 +0000)
committerTom Hughes <tom@compton.nu>
Sat, 1 Nov 2014 12:50:23 +0000 (12:50 +0000)
307 files changed:
.gitignore
CONFIGURE.md
Gemfile
Gemfile.lock
INSTALL.md
app/assets/images/browse/parking.p.16.png
app/assets/images/sotm.png [new file with mode: 0644]
app/assets/javascripts/index.js
app/assets/javascripts/index/changeset.js [new file with mode: 0644]
app/assets/javascripts/index/search.js
app/assets/javascripts/leaflet.map.js.erb
app/assets/stylesheets/common.css.scss
app/controllers/amf_controller.rb
app/controllers/api_controller.rb
app/controllers/application_controller.rb
app/controllers/browse_controller.rb
app/controllers/changeset_controller.rb
app/controllers/geocoder_controller.rb
app/controllers/site_controller.rb
app/controllers/trace_controller.rb
app/controllers/user_preference_controller.rb
app/helpers/browse_helper.rb
app/helpers/title_helper.rb
app/models/changeset.rb
app/models/changeset_comment.rb [new file with mode: 0644]
app/models/note_comment.rb
app/models/notifier.rb
app/models/relation_member.rb
app/models/trace.rb
app/models/user.rb
app/views/browse/changeset.html.erb
app/views/changeset/_comment.html.erb [new file with mode: 0644]
app/views/changeset/_comments.rss.builder [new file with mode: 0644]
app/views/changeset/comments_feed.rss.builder [new file with mode: 0644]
app/views/layouts/_head.html.erb
app/views/layouts/map.html.erb
app/views/message/new.html.erb
app/views/notifier/changeset_comment_notification.html.erb [new file with mode: 0644]
app/views/notifier/changeset_comment_notification.text.erb [new file with mode: 0644]
app/views/site/_id.html.erb
app/views/site/export.html.erb
app/views/trace/edit.html.erb
app/views/user/login.html.erb
config.ru
config/application.rb
config/boot.rb
config/environment.rb
config/environments/development.rb
config/environments/production.rb
config/environments/test.rb
config/example.application.yml
config/initializers/assets.rb [new file with mode: 0644]
config/initializers/cookies_serializer.rb [new file with mode: 0644]
config/initializers/postgresql_adapter.rb
config/initializers/router.rb [new file with mode: 0644]
config/initializers/secret_token.rb [deleted file]
config/initializers/session_store.rb
config/locales/af.yml
config/locales/aln.yml
config/locales/ar.yml
config/locales/arz.yml
config/locales/ast.yml
config/locales/az.yml
config/locales/be-Tarask.yml
config/locales/be.yml
config/locales/bg.yml
config/locales/br.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/diq.yml
config/locales/dsb.yml
config/locales/el.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/et.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/fur.yml
config/locales/gcf.yml
config/locales/gl.yml
config/locales/gsw.yml
config/locales/he.yml
config/locales/hi.yml
config/locales/hr.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/id.yml
config/locales/is.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ka.yml
config/locales/km.yml
config/locales/ko.yml
config/locales/ksh.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mr.yml
config/locales/ms.yml
config/locales/nb.yml
config/locales/nds.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/nn.yml
config/locales/oc.yml
config/locales/pa.yml
config/locales/pl.yml
config/locales/ps.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sco.yml [new file with mode: 0644]
config/locales/sk.yml
config/locales/sl.yml
config/locales/sq.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/ta.yml
config/locales/te.yml
config/locales/tl.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/yi.yml
config/locales/yo.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/routes.rb
config/secrets.yml [new file with mode: 0644]
config/wiki_pages.yml
db/migrate/20140507110937_create_changeset_comments.rb [new file with mode: 0644]
db/migrate/20140519141742_add_join_table_between_users_and_changesets.rb [new file with mode: 0644]
db/structure.sql
doc/README_FOR_APP [deleted file]
lib/migrate.rb
lib/osm.rb
lib/potlatch2.rb
public/robots.txt
script/misc/update-wiki-pages
script/statistics
test/controllers/amf_controller_test.rb
test/controllers/changeset_controller_test.rb
test/controllers/site_controller_test.rb
test/controllers/trace_controller_test.rb
test/controllers/user_blocks_controller_test.rb
test/controllers/user_controller_test.rb
test/controllers/user_preference_controller_test.rb
test/fixtures/changeset_comments.yml [new file with mode: 0644]
test/fixtures/changesets.yml
test/fixtures/changesets_subscribers.yml [new file with mode: 0644]
test/fixtures/note_comments.yml
test/helpers/application_helper_test.rb
test/helpers/browse_helper_test.rb
test/helpers/note_helper_test.rb
test/helpers/title_helper_test.rb
test/integration/short_links_test.rb
test/integration/user_changeset_comments_test.rb [new file with mode: 0644]
test/models/changeset_comment_test.rb [new file with mode: 0644]
test/models/changeset_test.rb
test/models/node_test.rb
test/models/note_comment_test.rb [new file with mode: 0644]
test/models/note_test.rb [new file with mode: 0644]
test/models/relation_test.rb
test/models/trace_test.rb
test/models/user_test.rb
test/models/way_test.rb
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/arrow-icon.png [new file with mode: 0644]
vendor/assets/iD/iD/img/cursor-select-mapillary.png [new file with mode: 0644]
vendor/assets/iD/iD/img/cursor-select-mapillary2x.png [new file with mode: 0644]
vendor/assets/iD/iD/img/maki-sprite.png
vendor/assets/iD/iD/locales/af.json
vendor/assets/iD/iD/locales/ar-AA.json
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/bg-BG.json
vendor/assets/iD/iD/locales/bn.json
vendor/assets/iD/iD/locales/bs.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/el.json
vendor/assets/iD/iD/locales/en-GB.json
vendor/assets/iD/iD/locales/en.json
vendor/assets/iD/iD/locales/eo.json [new file with mode: 0644]
vendor/assets/iD/iD/locales/es.json
vendor/assets/iD/iD/locales/et.json
vendor/assets/iD/iD/locales/fa.json
vendor/assets/iD/iD/locales/fi.json
vendor/assets/iD/iD/locales/fr.json
vendor/assets/iD/iD/locales/gl.json
vendor/assets/iD/iD/locales/hr.json
vendor/assets/iD/iD/locales/hu.json
vendor/assets/iD/iD/locales/hy.json
vendor/assets/iD/iD/locales/id.json
vendor/assets/iD/iD/locales/is.json
vendor/assets/iD/iD/locales/it.json
vendor/assets/iD/iD/locales/ja.json
vendor/assets/iD/iD/locales/km-KH.json [new file with mode: 0644]
vendor/assets/iD/iD/locales/km.json [new file with mode: 0644]
vendor/assets/iD/iD/locales/kn.json
vendor/assets/iD/iD/locales/ko-KR.json
vendor/assets/iD/iD/locales/ko.json
vendor/assets/iD/iD/locales/lt.json
vendor/assets/iD/iD/locales/lv.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/no.json
vendor/assets/iD/iD/locales/pl.json
vendor/assets/iD/iD/locales/pt-BR.json
vendor/assets/iD/iD/locales/pt.json
vendor/assets/iD/iD/locales/ro-RO.json
vendor/assets/iD/iD/locales/ru.json
vendor/assets/iD/iD/locales/si.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/sq-AL.json [new file with mode: 0644]
vendor/assets/iD/iD/locales/sr.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/ta.json
vendor/assets/iD/iD/locales/te.json
vendor/assets/iD/iD/locales/tl.json
vendor/assets/iD/iD/locales/tr.json
vendor/assets/iD/iD/locales/uk.json
vendor/assets/iD/iD/locales/vi.json
vendor/assets/iD/iD/locales/yue.json
vendor/assets/iD/iD/locales/zh-CN.json
vendor/assets/iD/iD/locales/zh-HK.json
vendor/assets/iD/iD/locales/zh-TW.json
vendor/assets/iD/iD/locales/zh.json
vendor/assets/leaflet/leaflet.osm.js
vendor/assets/potlatch2/potlatch2.swf
vendor/assets/potlatch2/potlatch2/assets.zip
vendor/assets/potlatch2/potlatch2/locales/af.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ar.swf
vendor/assets/potlatch2/potlatch2/locales/arc.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ba.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/be.swf
vendor/assets/potlatch2/potlatch2/locales/bn.swf
vendor/assets/potlatch2/potlatch2/locales/ce.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/cs_CZ.swf
vendor/assets/potlatch2/potlatch2/locales/de-formal.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/diq.swf
vendor/assets/potlatch2/potlatch2/locales/dsb.swf
vendor/assets/potlatch2/potlatch2/locales/el.swf
vendor/assets/potlatch2/potlatch2/locales/en_GB.swf
vendor/assets/potlatch2/potlatch2/locales/eo.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/es_ES.swf
vendor/assets/potlatch2/potlatch2/locales/et.swf
vendor/assets/potlatch2/potlatch2/locales/eu.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/fa.swf
vendor/assets/potlatch2/potlatch2/locales/fr_FR.swf
vendor/assets/potlatch2/potlatch2/locales/fur.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ga.swf
vendor/assets/potlatch2/potlatch2/locales/grc.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/hr.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/hsb.swf
vendor/assets/potlatch2/potlatch2/locales/ia.swf
vendor/assets/potlatch2/potlatch2/locales/id.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/it_IT.swf
vendor/assets/potlatch2/potlatch2/locales/ja_JP.swf
vendor/assets/potlatch2/potlatch2/locales/km.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/kn.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ko.swf
vendor/assets/potlatch2/potlatch2/locales/krc.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ku-latn.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ky.swf
vendor/assets/potlatch2/potlatch2/locales/lb.swf
vendor/assets/potlatch2/potlatch2/locales/lez.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/lzz.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/mk.swf
vendor/assets/potlatch2/potlatch2/locales/mr.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ms.swf
vendor/assets/potlatch2/potlatch2/locales/nn_NO.swf
vendor/assets/potlatch2/potlatch2/locales/oc.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/pa.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/ps.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/pt_BR.swf
vendor/assets/potlatch2/potlatch2/locales/pt_PT.swf
vendor/assets/potlatch2/potlatch2/locales/ru.swf
vendor/assets/potlatch2/potlatch2/locales/sah.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/sk.swf
vendor/assets/potlatch2/potlatch2/locales/sl.swf
vendor/assets/potlatch2/potlatch2/locales/sq.swf
vendor/assets/potlatch2/potlatch2/locales/sr-ec.swf
vendor/assets/potlatch2/potlatch2/locales/sv_SE.swf
vendor/assets/potlatch2/potlatch2/locales/ta.swf
vendor/assets/potlatch2/potlatch2/locales/te.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/tly.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/tr.swf
vendor/assets/potlatch2/potlatch2/locales/tyv.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/tzm.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/vo.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/yi.swf [new file with mode: 0644]
vendor/assets/potlatch2/potlatch2/locales/zh_CN.swf
vendor/assets/potlatch2/potlatch2/locales/zh_TW.swf [new file with mode: 0644]

index e507f9430496225b457220ff16ca916d1ac319bf..edfd387abad0782b71b6af3401935aad2df2ef37 100644 (file)
@@ -8,3 +8,6 @@ tmp
 *~
 doc
 .vagrant
+.ruby-gemset
+.ruby-version
+.idea
\ No newline at end of file
index 8cae440bdd481c29563ca0974f44d2878064cb14..36c5586d852216ae5058a6cf5204c0958f25f431 100644 (file)
@@ -6,7 +6,17 @@ After [installing](INSTALL.md) this software, you may need to carry out some of
 
 Your installation comes with no geographic data loaded. You can either create new data using one of the editors (Potlatch 2, iD, JOSM etc) or by loading an OSM extract.
 
-* Use this [yet-to-be-written script](https://github.com/openstreetmap/openstreetmap-website/issues/282)
+After installing but before creating any users or data, import an extract with [Osmosis](http://wiki.openstreetmap.org/wiki/Osmosis) and the [``--write-apidb``](http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage#--write-apidb_.28--wd.29) task.
+
+```
+osmosis --read-pbf greater-london-latest.osm.pbf \
+  --write-apidb host="localhost" database="openstreetmap" \
+  user="openstreetmap" password="" validateSchemaVersion="no"
+```
+
+Loading an apidb database with Osmosis is about **twenty** times slower than loading the equivalent data with osm2pgsql into a rendering database. [``--log-progress``](http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage#--log-progress_.28--lp.29) may be desirable for status updates.
+
+To be able to edit the data you have loaded, you will need to use this [yet-to-be-written script](https://github.com/openstreetmap/openstreetmap-website/issues/282).
 
 ## Managing Users
 
@@ -115,3 +125,5 @@ If you want to deploy The Rails Port for production use, you'll need to make a f
 * Your production database will also need the extensions and functions installed - see [INSTALL.md](INSTALL.md)
 * The included version of the map call is quite slow and eats a lot of memory. You should consider using [CGIMap](https://github.com/zerebubuth/openstreetmap-cgimap) instead.
 * The included version of the GPX importer is slow and/or completely inoperable. You should consider using [the high-speed GPX importer](http://git.openstreetmap.org/gpx-import.git/).
+* Make sure you precompile the production assets: `RAILS_ENV=production rake assets:precompile`
+* Make sure the web server user as well as the rails user can read, write and create directories in `tmp/`.
diff --git a/Gemfile b/Gemfile
index 0cdf8ce7fd3d6907edc66ca5c44468228845e4fb..fd8e46b9facaac318003176b766082ba5d739bd8 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -1,7 +1,7 @@
-source 'http://rubygems.org'
+source 'https://rubygems.org'
 
 # Require rails
-gem 'rails', '4.0.5'
+gem 'rails', '4.1.6'
 
 # Require things which have moved to gems in ruby 1.9
 gem 'bigdecimal', "~> 1.1.0", :platforms => :ruby_19
@@ -16,7 +16,7 @@ gem 'json'
 gem 'pg'
 
 # Use SCSS for stylesheets
-gem 'sass-rails', '~> 4.0.0'
+gem 'sass-rails', '~> 4.0.3'
 
 # Use Uglifier as compressor for JavaScript assets
 gem 'uglifier', '>= 1.3.0'
@@ -34,6 +34,9 @@ gem 'jsonify-rails'
 # Use R2 for RTL conversion
 gem 'r2'
 
+# Use autoprefixer to generate CSS prefixes
+gem 'autoprefixer-rails'
+
 # Load rails plugins
 gem 'rails-i18n', "~> 4.0.0"
 gem 'dynamic_form'
@@ -41,7 +44,7 @@ gem 'rinku', '>= 1.2.2', :require => 'rails_rinku'
 gem 'oauth-plugin', '>= 0.5.1'
 gem 'open_id_authentication', '>= 1.1.0'
 gem 'validates_email_format_of', '>= 1.5.1'
-gem 'composite_primary_keys', '>= 6.0.1'
+gem 'composite_primary_keys', '~> 7.0.11'
 gem 'http_accept_language', '~> 2.0.0'
 gem 'paperclip', '~> 4.0'
 gem 'deadlock_retry', '>= 1.2.0'
@@ -84,7 +87,7 @@ end
 # Gems needed for running tests
 group :test do
   gem 'timecop'
-  gem 'minitest', '~> 4.7.0', :platforms => [:ruby_19, :ruby_20]
+  gem 'minitest', '~> 5.1', :platforms => [:ruby_19, :ruby_20]
 end
 
 # Needed in development as well so rake can see konacha tasks
index fc2d4f54be3bd967bd64696e16f5c7850fe9ef6b..48d6013bf938ca071a3f96c3bd8adf7c20b3b8b6 100644 (file)
@@ -1,37 +1,41 @@
 GEM
-  remote: http://rubygems.org/
+  remote: https://rubygems.org/
   specs:
     SystemTimer (1.2.3)
-    actionmailer (4.0.5)
-      actionpack (= 4.0.5)
-      mail (~> 2.5.4)
-    actionpack (4.0.5)
-      activesupport (= 4.0.5)
-      builder (~> 3.1.0)
-      erubis (~> 2.7.0)
+    actionmailer (4.1.6)
+      actionpack (= 4.1.6)
+      actionview (= 4.1.6)
+      mail (~> 2.5, >= 2.5.4)
+    actionpack (4.1.6)
+      actionview (= 4.1.6)
+      activesupport (= 4.1.6)
       rack (~> 1.5.2)
       rack-test (~> 0.6.2)
     actionpack-page_caching (1.0.2)
       actionpack (>= 4.0.0, < 5)
-    activemodel (4.0.5)
-      activesupport (= 4.0.5)
-      builder (~> 3.1.0)
-    activerecord (4.0.5)
-      activemodel (= 4.0.5)
-      activerecord-deprecated_finders (~> 1.0.2)
-      activesupport (= 4.0.5)
-      arel (~> 4.0.0)
-    activerecord-deprecated_finders (1.0.3)
-    activesupport (4.0.5)
+    actionview (4.1.6)
+      activesupport (= 4.1.6)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+    activemodel (4.1.6)
+      activesupport (= 4.1.6)
+      builder (~> 3.1)
+    activerecord (4.1.6)
+      activemodel (= 4.1.6)
+      activesupport (= 4.1.6)
+      arel (~> 5.0.0)
+    activesupport (4.1.6)
       i18n (~> 0.6, >= 0.6.9)
-      minitest (~> 4.2)
-      multi_json (~> 1.3)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
       thread_safe (~> 0.1)
-      tzinfo (~> 0.3.37)
-    arel (4.0.2)
+      tzinfo (~> 1.1)
+    arel (5.0.1.20140414130214)
+    autoprefixer-rails (3.1.1.20141001)
+      execjs
     bigdecimal (1.1.0)
-    builder (3.1.4)
-    capybara (2.2.1)
+    builder (3.2.2)
+    capybara (2.4.3)
       mime-types (>= 1.16)
       nokogiri (>= 1.3.3)
       rack (>= 1.0.0)
@@ -45,27 +49,28 @@ GEM
     coffee-rails (4.0.1)
       coffee-script (>= 2.2.0)
       railties (>= 4.0.0, < 5.0)
-    coffee-script (2.2.0)
+    coffee-script (2.3.0)
       coffee-script-source
       execjs
-    coffee-script-source (1.7.0)
-    colorize (0.7.2)
-    composite_primary_keys (6.0.3)
-      activerecord (>= 4.0.0)
-    dalli (2.7.1)
+    coffee-script-source (1.8.0)
+    colorize (0.7.3)
+    composite_primary_keys (7.0.11)
+      activerecord (= 4.1.6)
+    crass (0.2.1)
+    dalli (2.7.2)
     deadlock_retry (1.2.0)
     dynamic_form (1.1.4)
     erubis (2.7.0)
-    execjs (2.0.2)
+    execjs (2.2.1)
     faraday (0.9.0)
       multipart-post (>= 1.2, < 3)
     hike (1.2.3)
-    htmlentities (4.3.1)
-    http_accept_language (2.0.1)
-    httpclient (2.3.4.1)
-    i18n (0.6.9)
+    htmlentities (4.3.2)
+    http_accept_language (2.0.2)
+    httpclient (2.4.0)
+    i18n (0.6.11)
     iconv (0.1)
-    jquery-rails (3.1.0)
+    jquery-rails (3.1.2)
       railties (>= 3.0, < 5.0)
       thor (>= 0.14, < 2.0)
     json (1.8.1)
@@ -74,36 +79,36 @@ GEM
     jsonify-rails (0.3.2)
       actionpack
       jsonify (< 0.4.0)
-    jwt (0.1.13)
-      multi_json (>= 1.5)
+    jwt (1.0.0)
     kgio (2.9.2)
-    konacha (3.2.2)
+    konacha (3.2.4)
       actionpack (>= 3.1, < 5)
       capybara
       colorize
       railties (>= 3.1, < 5)
       sprockets
     libxml-ruby (2.7.0)
-    mail (2.5.4)
-      mime-types (~> 1.16)
-      treetop (~> 1.4.8)
-    mime-types (1.25.1)
-    mini_portile (0.5.3)
-    minitest (4.7.5)
-    multi_json (1.10.0)
+    mail (2.6.1)
+      mime-types (>= 1.16, < 3)
+    mime-types (2.4.1)
+    mini_portile (0.6.0)
+    minitest (5.4.2)
+    multi_json (1.10.1)
     multi_xml (0.5.5)
     multipart-post (2.0.0)
-    nokogiri (1.6.1)
-      mini_portile (~> 0.5.0)
+    nokogiri (1.6.3.1)
+      mini_portile (= 0.6.0)
+    nokogumbo (1.1.12)
+      nokogiri
     oauth (0.4.7)
     oauth-plugin (0.5.1)
       multi_json
       oauth (~> 0.4.4)
       oauth2 (>= 0.5.0)
       rack
-    oauth2 (0.9.3)
+    oauth2 (1.0.0)
       faraday (>= 0.8, < 0.10)
-      jwt (~> 0.1.8)
+      jwt (~> 1.0)
       multi_json (~> 1.3)
       multi_xml (~> 0.5)
       rack (~> 1.2)
@@ -111,20 +116,19 @@ GEM
       rack-openid (~> 1.3)
     openstreetmap-i18n-js (3.0.0.rc5.3)
       i18n
-    paperclip (4.1.1)
+    paperclip (4.2.0)
       activemodel (>= 3.0.0)
       activesupport (>= 3.0.0)
       cocaine (~> 0.5.3)
       mime-types
     pg (0.17.1)
-    poltergeist (1.5.0)
+    poltergeist (1.5.1)
       capybara (~> 2.1)
       cliver (~> 0.3.1)
       multi_json (~> 1.0)
       websocket-driver (>= 0.2.0)
-    polyglot (0.3.4)
-    psych (2.0.5)
-    r2 (0.2.3)
+    psych (2.0.6)
+    r2 (0.2.5)
     rack (1.5.2)
     rack-cors (0.2.9)
     rack-openid (1.4.2)
@@ -132,28 +136,32 @@ GEM
       ruby-openid (>= 2.1.8)
     rack-test (0.6.2)
       rack (>= 1.0)
-    rails (4.0.5)
-      actionmailer (= 4.0.5)
-      actionpack (= 4.0.5)
-      activerecord (= 4.0.5)
-      activesupport (= 4.0.5)
+    rails (4.1.6)
+      actionmailer (= 4.1.6)
+      actionpack (= 4.1.6)
+      actionview (= 4.1.6)
+      activemodel (= 4.1.6)
+      activerecord (= 4.1.6)
+      activesupport (= 4.1.6)
       bundler (>= 1.3.0, < 2.0)
-      railties (= 4.0.5)
-      sprockets-rails (~> 2.0.0)
-    rails-i18n (4.0.2)
+      railties (= 4.1.6)
+      sprockets-rails (~> 2.0)
+    rails-i18n (4.0.3)
       i18n (~> 0.6)
-      rails (>= 4.0)
-    railties (4.0.5)
-      actionpack (= 4.0.5)
-      activesupport (= 4.0.5)
+      railties (~> 4.0)
+    railties (4.1.6)
+      actionpack (= 4.1.6)
+      activesupport (= 4.1.6)
       rake (>= 0.8.7)
       thor (>= 0.18.1, < 2.0)
-    rake (10.3.1)
-    redcarpet (3.1.1)
+    rake (10.3.2)
+    redcarpet (3.1.2)
     rinku (1.7.3)
     ruby-openid (2.5.0)
-    sanitize (2.1.0)
+    sanitize (3.0.2)
+      crass (~> 0.2.0)
       nokogiri (>= 1.4.4)
+      nokogumbo (= 1.1.12)
     sass (3.2.19)
     sass-rails (4.0.3)
       railties (>= 4.0.0, < 5.0)
@@ -166,24 +174,23 @@ GEM
       multi_json (~> 1.0)
       rack (~> 1.0)
       tilt (~> 1.1, != 1.3.0)
-    sprockets-rails (2.0.1)
+    sprockets-rails (2.1.4)
       actionpack (>= 3.0)
       activesupport (>= 3.0)
       sprockets (~> 2.8)
     thor (0.19.1)
-    thread_safe (0.3.3)
+    thread_safe (0.3.4)
     tilt (1.4.1)
     timecop (0.7.1)
-    treetop (1.4.15)
-      polyglot
-      polyglot (>= 0.3.1)
-    tzinfo (0.3.39)
-    uglifier (2.5.0)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    uglifier (2.5.3)
       execjs (>= 0.3.0)
       json (>= 1.8.0)
-    validates_email_format_of (1.5.3)
-    vendorer (0.1.15)
-    websocket-driver (0.3.3)
+    validates_email_format_of (1.6.1)
+      i18n
+    vendorer (0.1.16)
+    websocket-driver (0.3.5)
     xpath (2.0.0)
       nokogiri (~> 1.3)
 
@@ -193,9 +200,10 @@ PLATFORMS
 DEPENDENCIES
   SystemTimer (>= 1.1.3)
   actionpack-page_caching
+  autoprefixer-rails
   bigdecimal (~> 1.1.0)
   coffee-rails (~> 4.0.0)
-  composite_primary_keys (>= 6.0.1)
+  composite_primary_keys (~> 7.0.11)
   dalli
   deadlock_retry (>= 1.2.0)
   dynamic_form
@@ -209,7 +217,7 @@ DEPENDENCIES
   kgio
   konacha
   libxml-ruby (>= 2.0.5)
-  minitest (~> 4.7.0)
+  minitest (~> 5.1)
   oauth-plugin (>= 0.5.1)
   open_id_authentication (>= 1.1.0)
   openstreetmap-i18n-js (>= 3.0.0.rc5.3)
@@ -219,13 +227,13 @@ DEPENDENCIES
   psych
   r2
   rack-cors
-  rails (= 4.0.5)
+  rails (= 4.1.6)
   rails-i18n (~> 4.0.0)
   redcarpet
   rinku (>= 1.2.2)
   ruby-openid (>= 2.2.0)
   sanitize
-  sass-rails (~> 4.0.0)
+  sass-rails (~> 4.0.3)
   soap4r-ruby1.9
   timecop
   uglifier (>= 1.3.0)
index 41c6a1d9b17fa0e8c1988d9247a476529becd6dc..780ffdf07057d4b644f4e216cd4028dc66b418b9 100644 (file)
@@ -33,7 +33,7 @@ sudo apt-get install ruby1.9.1 libruby1.9.1 ruby1.9.1-dev ri1.9.1 \
                      apache2 apache2-threaded-dev build-essential git-core \
                      postgresql postgresql-contrib libpq-dev postgresql-server-dev-all \
                      libsasl2-dev
-gem1.9.1 install bundle
+sudo gem1.9.1 install bundler
 ```
 
 Note that the "1.9.1" Ubuntu packages do in fact contain ruby 1.9.3.
index 5860900cf5877b98ec27ab119ba7fa626464f076..51660458a6dff36ccfaa68ff126ca7d4b923b92b 100644 (file)
Binary files a/app/assets/images/browse/parking.p.16.png and b/app/assets/images/browse/parking.p.16.png differ
diff --git a/app/assets/images/sotm.png b/app/assets/images/sotm.png
new file mode 100644 (file)
index 0000000..3df0287
Binary files /dev/null and b/app/assets/images/sotm.png differ
index 236ed44fc190de0410a0145fb0cfddd6d1b6ad13..191f390bf4941363049d61981db189ea0f17313b 100644 (file)
@@ -13,6 +13,7 @@
 //= require index/history
 //= require index/note
 //= require index/new_note
+//= require index/changeset
 //= require index/query
 //= require router
 
@@ -161,6 +162,15 @@ $(document).ready(function () {
     $.cookie("_osm_location", OSM.locationCookie(map), { expires: expiry, path: "/" });
   });
 
+  if ($.cookie('_osm_sotm') == 'hide') {
+    $('#sotm').hide();
+  }
+
+  $('#sotm .close').on('click', function() {
+    $('#sotm').hide();
+    $.cookie("_osm_sotm", 'hide', { expires: expiry });
+  });
+
   if ($.cookie('_osm_welcome') == 'hide') {
     $('.welcome').hide();
   }
@@ -302,7 +312,7 @@ $(document).ready(function () {
     "/node/:id(/history)":         OSM.Browse(map, 'node'),
     "/way/:id(/history)":          OSM.Browse(map, 'way'),
     "/relation/:id(/history)":     OSM.Browse(map, 'relation'),
-    "/changeset/:id":              OSM.Browse(map, 'changeset'),
+    "/changeset/:id":              OSM.Changeset(map),
     "/query":                      OSM.Query(map)
   });
 
@@ -336,7 +346,7 @@ $(document).ready(function () {
     if (query) {
       OSM.router.route("/search?query=" + encodeURIComponent(query) + OSM.formatHash(map));
     } else {
-      OSM.router.route("/" + OSM.formatHash(map));
+      OSM.router.route("/");
     }
   });
 
diff --git a/app/assets/javascripts/index/changeset.js b/app/assets/javascripts/index/changeset.js
new file mode 100644 (file)
index 0000000..57d98dc
--- /dev/null
@@ -0,0 +1,80 @@
+OSM.Changeset = function (map) {
+  var page = {},
+    content = $('#sidebar_content'),
+    currentChangesetId;
+
+  page.pushstate = page.popstate = function(path, id) {
+    OSM.loadSidebarContent(path, function() {
+      page.load(path, id);
+    });
+  };
+
+  page.load = function(path, id) {
+    if(id)
+      currentChangesetId = id;
+    initialize();
+    addChangeset(currentChangesetId, true);
+  };
+
+  function addChangeset(id, center) {
+    var bounds = map.addObject({type: 'changeset', id: parseInt(id)}, function(bounds) {
+      if (!window.location.hash && bounds.isValid() &&
+          (center || !map.getBounds().contains(bounds))) {
+        OSM.router.withoutMoveListener(function () {
+          map.fitBounds(bounds);
+        });
+      }
+    });
+  }
+
+  function updateChangeset(form, method, url, include_data) {
+    $(form).find("input[type=submit]").prop("disabled", true);
+    if(include_data) {
+      data = {text: $(form.text).val()};
+    } else {
+      data = {};
+    }
+
+    $.ajax({
+      url: url,
+      type: method,
+      oauth: true,
+      data: data,
+      success: function () {
+        OSM.loadSidebarContent(window.location.pathname, page.load);
+      }
+    });
+  }
+
+  function initialize() {
+    content.find("input[name=comment]").on("click", function (e) {
+      e.preventDefault();
+      var data = $(e.target).data();
+      updateChangeset(e.target.form, data.method, data.url, true);
+    });
+
+    content.find(".action-button").on("click", function (e) {
+      e.preventDefault();
+      var data = $(e.target).data();
+      updateChangeset(e.target.form, data.method, data.url);
+    });
+
+    content.find("textarea").on("input", function (e) {
+      var form = e.target.form;
+
+      if ($(e.target).val() == "") {
+        $(form.comment).prop("disabled", true);
+      } else {
+        $(form.comment).prop("disabled", false);
+      }
+    });
+
+    content.find("textarea").val('').trigger("input");
+  };
+
+  page.unload = function() {
+    map.removeObject();
+  };
+
+  return page;
+};
\ No newline at end of file
index 61f4a3558673071f913bb11ca2519ebc797c6b36..e9f06ddf071ab109462b7163c2aec7e51cb1c9e8 100644 (file)
@@ -12,13 +12,14 @@ OSM.Search = function(map) {
 
   $("#sidebar_content")
     .on("click", ".search_more a", clickSearchMore)
+    .on("click", ".search_results_entry a.set_position", clickSearchResult)
     .on("mouseover", "p.search_results_entry:has(a.set_position)", showSearchResult)
     .on("mouseout", "p.search_results_entry:has(a.set_position)", hideSearchResult)
     .on("mousedown", "p.search_results_entry:has(a.set_position)", function () {
       var moved = false;
       $(this).one("click", function (e) {
         if (!moved && !$(e.target).is('a')) {
-          clickSearchResult(this, e);
+          $(this).find("a.set_position").simulate("click", e);
         }
       }).one("mousemove", function () {
         moved = true;
@@ -45,12 +46,12 @@ OSM.Search = function(map) {
     if (!marker) {
       var data = $(this).find("a.set_position").data();
 
-      marker = L.marker([data.lat, data.lon]);
+      marker = L.marker([data.lat, data.lon], {icon: getUserIcon()});
 
       $(this).data("marker", marker);
     }
 
-    map.addLayer(marker);
+    markers.addLayer(marker);
 
     $(this).closest("li").addClass("selected");
   }
@@ -59,15 +60,14 @@ OSM.Search = function(map) {
     var marker = $(this).data("marker");
 
     if (marker) {
-      map.removeLayer(marker);
+      markers.removeLayer(marker);
     }
 
     $(this).closest("li").removeClass("selected");
   }
 
-  function clickSearchResult(result, e) {
-    var link = $(result).find("a.set_position"),
-      data = link.data(),
+  function clickSearchResult(e) {
+    var data = $(this).data(),
       center = L.latLng(data.lat, data.lon);
 
     if (data.minLon && data.minLat && data.maxLon && data.maxLat) {
@@ -76,18 +76,14 @@ OSM.Search = function(map) {
       map.setView(center, data.zoom);
     }
 
+    // Let clicks to object browser links propagate.
+    if (data.type && data.id) return;
+
     e.preventDefault();
     e.stopPropagation();
-
-    // Let clicks to object browser links propagate.
-    if (data.type && data.id) {
-      link.simulate("click", e);
-    } else {
-      marker.setLatLng(center).addTo(map);
-    }
   }
 
-  var marker = L.marker([0, 0], {icon: getUserIcon()});
+  var markers = L.layerGroup().addTo(map);
 
   var page = {};
 
@@ -120,8 +116,7 @@ OSM.Search = function(map) {
   };
 
   page.unload = function() {
-    map.removeLayer(marker);
-    map.removeObject();
+    markers.clearLayers();
     $(".search_form input[name=query]").val("");
     $(".describe_location").fadeIn(100);
   };
index f02f9beda87a3dcfa84a6b3b63944c56813465ae..b4767f96be506062172ae763d00a45e3eabd8075 100644 (file)
@@ -24,13 +24,13 @@ L.OSM.Map = L.Map.extend({
         name: I18n.t("javascripts.map.base.standard")
       }),
       new L.OSM.CycleMap({
-        attribution: copyright + ". Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
+        attribution: copyright + ". Tiles courtesy of <a href='http://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
         code: "C",
         keyid: "cyclemap",
         name: I18n.t("javascripts.map.base.cycle_map")
       }),
       new L.OSM.TransportMap({
-        attribution: copyright + ". Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>",
+        attribution: copyright + ". Tiles courtesy of <a href='http://www.thunderforest.com/' target='_blank'>Andy Allan</a>",
         code: "T",
         keyid: "transportmap",
         name: I18n.t("javascripts.map.base.transport_map")
index d3268f43b511ffad0c35706971fce2d8ea2cdc0a..ef2d9c00dd239e999a6a5f2bbc245ce991b5c148 100644 (file)
@@ -87,9 +87,7 @@ strong {
 /* Default rules for the body of every page */
 
 * {
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  box-sizing: border-box;
 }
 
 body {
@@ -464,9 +462,8 @@ nav.secondary {
 
 #noscript {
   z-index: 20000000;
-  position: absolute;
-  top: 15px;
-  left: 15px;
+  margin-left: 400px;
+  margin-top: 50px;
 }
 
 /* Rules for bootstrap tooltips */
@@ -854,7 +851,6 @@ nav.secondary {
 
 .leaflet-popup-content-wrapper {
   border-radius: 4px !important;
-  -webkit-border-radius: 4px !important;
 }
 
 /* Rules for attribution text under the main map shown on printouts */
@@ -934,8 +930,6 @@ header .search_form {
     border-right: none;
 
     transition: 300ms linear;
-    -webkit-transition: 300ms linear;
-    -moz-transition: 300ms linear;
   }
 
   input:focus {
@@ -1117,7 +1111,7 @@ header .search_form {
     font-size: 90%;
   }
 
-  .note-comments li {
+  .note-comments li, .changeset-comments li {
     margin: $lineheight/2 0;
 
     p {
@@ -1125,6 +1119,27 @@ header .search_form {
     }
   }
 
+  .comments-header {
+    float: left;
+  }
+
+  .subscribe-buttons {
+    float: left;
+    margin: 18px 10px 10px;
+    min-width: 80px;
+  }
+
+  .subscribe-buttons input {
+    font-size: 90%;
+    line-height: 15px;
+    min-height: 20px;
+  }
+
+  span.action-button:hover {
+    cursor: pointer;
+    text-decoration: underline;
+  }
+
   .note-description {
     overflow: hidden;
     margin: 0 0 10px 10px;
@@ -1361,6 +1376,30 @@ header .search_form {
   }
 }
 
+/* Rules for the new trace form */
+
+#new_trace {
+  input[type=text] {
+    width: 50%;
+    width: calc(100% - 150px);
+    max-width: 500px;
+  }
+}
+
+/* Rules for the edit trace form */
+
+.edit_trace {
+  .form-row p {
+    margin-bottom: 0px;
+  }
+
+  input[type=text] {
+    width: 50%;
+    width: calc(100% - 150px);
+    max-width: 500px;
+  }
+}
+
 /* Rules for the user profile page */
 
 #userinformation {
@@ -1943,7 +1982,6 @@ a.button {
   cursor: pointer;
   border: 0;
   display: inline-block;
-  line-height: 20px;
   padding: $lineheight/4 $lineheight/2;
   min-height: 20px + $lineheight/2;
   min-width: 120px;
@@ -1952,7 +1990,6 @@ a.button {
   background: $blue;
   text-align: center;
   border-radius: 2px;
-  -moz-border-radius: 2px;
   &:hover {
     background: darken($blue, $hovercolor);
     text-decoration: none;
@@ -1974,6 +2011,16 @@ a.button {
   }
 }
 
+input[type="button"],
+input[type="submit"],
+input[type="reset"] {
+  line-height: normal;
+}
+
+a.button {
+  line-height: 20px;
+}
+
 .buttons {
   min-width: 200px;
   input[type="submit"],
@@ -2121,8 +2168,6 @@ a.button {
 
 input.richtext_title[type="text"] {
   width: 50%;
-  width: -moz-calc(100% - 235px);
-  width: -webkit-calc(100% - 235px);
   width: calc(100% - 235px);
 
   @media only screen and (max-width:768px) {
@@ -2135,8 +2180,6 @@ input.richtext_title[type="text"] {
 
   .richtext_content {
     width: 50%;
-    width: -moz-calc(100% - 235px);
-    width: -webkit-calc(100% - 235px);
     width: calc(100% - 235px);
     display: inline-block;
     vertical-align: top;
@@ -2271,12 +2314,8 @@ input.richtext_title[type="text"] {
   border-radius: 0 3px 3px;
   *border-right-width: 2px;
   *border-bottom-width: 2px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  background-clip: padding-box;
 }
 
 .dropdown-menu.pull-right {
@@ -2566,6 +2605,36 @@ input.richtext_title[type="text"] {
   }
 }
 
+#sidebar #sotm {
+  padding: 10px;
+  min-height: 120px;
+
+  img {
+    float: left;
+    width: 100px;
+    height: 100px;
+  }
+
+  h2 {
+    margin-left: 100px;
+    padding: 7px 10px 6px 15px;
+  }
+
+  p {
+    margin-left: 100px;
+    padding: 6px 10px 7px 15px;
+  }
+
+  a {
+    color: $darkgrey;
+  }
+
+  :hover {
+    text-decoration: none;
+    color: darken($darkgrey, 25%);
+  }
+}
+
 @import 'browse';
 
 @media only screen and (max-width:960px) {
index 13372273c2eba0f940203bee76ff8964e2f3d279..9dd0e909ec051c18e8c80988150c9b665962ef4f 100644 (file)
@@ -321,12 +321,12 @@ 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.where(:id => wayid).preload(:nodes => :node_tags).first
+        way = Way.where(:id => wayid).first
 
         # check case where way has been deleted or doesn't exist
         return [-4, 'way', wayid] if way.nil? or !way.visible
 
-        points = way.nodes.collect do |node|
+        points = way.nodes.preload(:node_tags).collect do |node|
           nodetags=node.tags
           nodetags.delete('created_by')
           [node.lon, node.lat, node.id, nodetags, node.version]
@@ -551,7 +551,7 @@ class AmfController < ApplicationController
             mid = renumberedways[mid] if m[0] == 'Way'
           end
           if mid
-            typedmembers << [m[0], mid, m[2]]
+            typedmembers << [m[0], mid, m[2].delete("\000-\037\ufffe\uffff", "^\011\012\015")]
           end
         end
 
@@ -886,8 +886,8 @@ class AmfController < ApplicationController
     new_tags = Hash.new
     unless tags.nil?
       tags.each do |k, v|
-        new_k = k.delete "\000-\037", "^\011\012\015"
-        new_v = v.delete "\000-\037", "^\011\012\015"
+        new_k = k.delete "\000-\037\ufffe\uffff", "^\011\012\015"
+        new_v = v.delete "\000-\037\ufffe\uffff", "^\011\012\015"
         new_tags[new_k] = new_v
       end
     end
index 2c442c190585d590647a7705aaff4a1319869278..2f630c6d62f7801c274ea7b23b94a9e1c06f05ef 100644 (file)
@@ -287,8 +287,16 @@ class ApiController < ApplicationController
     status['api'] = api_status.to_s
     status['gpx'] = gpx_status.to_s
     api << status
-
     doc.root << api
+    policy = XML::Node.new 'policy'
+    blacklist = XML::Node.new 'imagery'
+    IMAGERY_BLACKLIST.each do |url_regex| 
+      xnd = XML::Node.new 'blacklist'
+      xnd['regex'] = url_regex.to_s
+      blacklist << xnd
+    end
+    policy << blacklist
+    doc.root << policy
 
     render :text => doc.to_s, :content_type => "text/xml"
   end
index 3830df88bf40fb9b117af17b2d1d27804f821be8..90a9672760755a6ee060e8540cb6fc71ea041d5d 100644 (file)
@@ -73,7 +73,7 @@ class ApplicationController < ActionController::Base
     if request.cookies["_osm_session"].to_s == ""
       if params[:cookie_test].nil?
         session[:cookie_test] = true
-        redirect_to params.merge(:cookie_test => "true")
+        redirect_to Hash[params].merge(:cookie_test => "true")
         return false
       else
         flash.now[:warning] = t 'application.require_cookies.cookies_needed'
index e16ec29147bffe4a2c84b2cb8e407b150cf30603..f0b92f4b47a33e7f8fbe7208348598f7b5b61cca 100644 (file)
@@ -58,6 +58,11 @@ class BrowseController < ApplicationController
   def changeset
     @type = "changeset"
     @changeset = Changeset.find(params[:id])
+    if @user and @user.moderator?
+      @comments = @changeset.comments.unscope(:where => :visible).includes(:author)
+    else
+      @comments = @changeset.comments.includes(:author)
+    end
     @node_pages, @nodes = paginate(:old_nodes, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'node_page')
     @way_pages, @ways = paginate(:old_ways, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'way_page')
     @relation_pages, @relations = paginate(:old_relations, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'relation_page')
index 735fa73a88c31a1820515aa9e4677011946be8b3..646ba2fa35a0160522bcfa69bf4b946edaf6f066 100644 (file)
@@ -7,11 +7,12 @@ class ChangesetController < ApplicationController
   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, :feed]
+  before_filter :authorize, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment]
+  before_filter :require_moderator, :only => [:hide_comment, :unhide_comment]
+  before_filter :require_allow_write_api, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment]
+  before_filter :require_public_data, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe]
+  before_filter :check_api_writable, :only => [:create, :update, :delete, :upload, :include, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment]
+  before_filter :check_api_readable, :except => [:create, :update, :delete, :upload, :download, :query, :list, :feed, :comment, :subscribe, :unsubscribe, :comments_feed]
   before_filter(:only => [:list, :feed]) { |c| c.check_database_readable(true) }
   after_filter :compress_output
   around_filter :api_call_handle_error, :except => [:list, :feed]
@@ -29,6 +30,10 @@ class ChangesetController < ApplicationController
     # Assume that Changeset.from_xml has thrown an exception if there is an error parsing the xml
     cs.user_id = @user.id
     cs.save_with_tags!
+
+    # Subscribe user to changeset comments
+    cs.subscribers << @user
+
     render :text => cs.id.to_s, :content_type => "text/plain"
   end
 
@@ -37,7 +42,8 @@ class ChangesetController < ApplicationController
   # return anything about the nodes, ways and relations in the changeset.
   def read
     changeset = Changeset.find(params[:id])
-    render :text => changeset.to_xml.to_s, :content_type => "text/xml"
+
+    render :text => changeset.to_xml(params[:include_discussion].presence).to_s, :content_type => "text/xml"
   end
 
   ##
@@ -284,7 +290,7 @@ class ChangesetController < ApplicationController
       elsif params[:bbox]
         changesets = conditions_bbox(changesets, BoundingBox.from_bbox_params(params))
       elsif params[:friends] && @user
-        changesets = changesets.where(:user_id => @user.friend_users.public)
+        changesets = changesets.where(:user_id => @user.friend_users.identifiable)
       elsif params[:nearby] && @user
         changesets = changesets.where(:user_id => @user.nearby)
       end
@@ -305,6 +311,145 @@ class ChangesetController < ApplicationController
     list
   end
 
+  ##
+  # Add a comment to a changeset
+  def comment
+    # Check the arguments are sane
+    raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+    raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank?
+
+    # Extract the arguments
+    id = params[:id].to_i
+    body = params[:text]
+
+    # Find the changeset and check it is valid
+    changeset = Changeset.find(id)
+    raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open?
+
+    # Add a comment to the changeset
+    comment = changeset.comments.create({
+      :changeset => changeset,
+      :body => body,
+      :author => @user
+    })
+
+    # Notify current subscribers of the new comment
+    changeset.subscribers.each do |user|
+      if @user != user
+        Notifier.changeset_comment_notification(comment, user).deliver
+      end
+    end
+
+    # Add the commenter to the subscribers if necessary
+    changeset.subscribers << @user unless changeset.subscribers.exists?(@user)
+
+    # Return a copy of the updated changeset
+    render :text => changeset.to_xml.to_s, :content_type => "text/xml"
+  end
+
+  ##
+  # Adds a subscriber to the changeset
+  def subscribe
+    # Check the arguments are sane
+    raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+
+    # Extract the arguments
+    id = params[:id].to_i
+
+    # Find the changeset and check it is valid
+    changeset = Changeset.find(id)
+    raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open?
+    raise OSM::APIChangesetAlreadySubscribedError.new(changeset) if changeset.subscribers.exists?(@user)
+
+    # Add the subscriber
+    changeset.subscribers << @user
+
+    # Return a copy of the updated changeset
+    render :text => changeset.to_xml.to_s, :content_type => "text/xml"
+  end
+
+  ##
+  # Removes a subscriber from the changeset
+  def unsubscribe
+    # Check the arguments are sane
+    raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+
+    # Extract the arguments
+    id = params[:id].to_i
+
+    # Find the changeset and check it is valid
+    changeset = Changeset.find(id)
+    raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open?
+    raise OSM::APIChangesetNotSubscribedError.new(changeset) unless changeset.subscribers.exists?(@user)
+
+    # Remove the subscriber
+    changeset.subscribers.delete(@user)
+
+    # Return a copy of the updated changeset
+    render :text => changeset.to_xml.to_s, :content_type => "text/xml"
+  end
+
+  ##
+  # Sets visible flag on comment to false
+  def hide_comment
+    # Check the arguments are sane
+    raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+
+    # Extract the arguments
+    id = params[:id].to_i
+
+    # Find the changeset
+    comment = ChangesetComment.find(id)
+
+    # Hide the comment
+    comment.update(:visible => false)
+
+    # Return a copy of the updated changeset
+    render :text => comment.changeset.to_xml.to_s, :content_type => "text/xml"
+  end
+
+  ##
+  # Sets visible flag on comment to true
+  def unhide_comment
+    # Check the arguments are sane
+    raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
+
+    # Extract the arguments
+    id = params[:id].to_i
+
+    # Find the changeset
+    comment = ChangesetComment.find(id)
+
+    # Unhide the comment
+    comment.update(:visible => true)
+
+    # Return a copy of the updated changeset
+    render :text => comment.changeset.to_xml.to_s, :content_type => "text/xml"
+  end
+
+  ##
+  # Get a feed of recent changeset comments
+  def comments_feed
+    if params[:id]
+      # Extract the arguments
+      id = params[:id].to_i
+
+      # Find the changeset
+      changeset = Changeset.find(id)
+
+      # Return comments for this changeset only
+      @comments = changeset.comments.includes(:author, :changeset).limit(comments_limit)
+    else
+      # Return comments
+      @comments = ChangesetComment.includes(:author, :changeset).where(:visible => :true).order("created_at DESC").limit(comments_limit).preload(:changeset)
+    end
+
+    # Render the result
+    respond_to do |format|
+      format.rss
+    end
+  end
+
 private
   #------------------------------------------------------------
   # utility functions below.
@@ -435,4 +580,17 @@ private
     return changesets.where("num_changes > 0")
   end
 
+  ##
+  # Get the maximum number of comments to return
+  def comments_limit
+    if params[:limit]
+      if params[:limit].to_i > 0 and params[:limit].to_i <= 10000
+        params[:limit].to_i
+      else
+        raise OSM::APIBadUserInput.new("Comments limit must be between 1 and 10000")
+      end
+    else
+      100
+    end
+  end
 end
index 73422c2f0a3cb0a0d7133ab57aedfd94e0980b05..6053cbb4b5588dcb7fbd6863c7cdc6942e7d5b74 100644 (file)
@@ -1,6 +1,7 @@
 # coding: utf-8
 
 class GeocoderController < ApplicationController
+  require 'cgi'
   require 'uri'
   require 'net/http'
   require 'rexml/document'
@@ -140,20 +141,25 @@ class GeocoderController < ApplicationController
 
     # get objects to excude
     if params[:exclude]
-      exclude = "&exclude_place_ids=#{params[:exclude].join(',')}"
+      exclude = "&exclude_place_ids=#{params[:exclude]}"
     end
 
     # ask nominatim
     response = fetch_xml("#{NOMINATIM_URL}search?format=xml&q=#{escape_query(query)}#{viewbox}#{exclude}&accept-language=#{http_accept_language.user_preferred_languages.join(',')}")
 
+    # extract the results from the response
+    results =  response.elements["searchresults"]
+
+    # extract parameters from more_url
+    more_url_params = CGI.parse(URI.parse(results.attributes["more_url"]).query)
+
     # create result array
     @results = Array.new
 
     # create parameter hash for "more results" link
-    @more_params = params.reverse_merge({ :exclude => [] })
-
-    # extract the results from the response
-    results =  response.elements["searchresults"]
+    @more_params = params.merge({
+      :exclude => more_url_params["exclude_place_ids"].first
+    })
 
     # parse the response
     results.elements.each("place") do |place|
@@ -181,7 +187,6 @@ class GeocoderController < ApplicationController
                      :min_lon => min_lon, :max_lon => max_lon,
                      :prefix => prefix, :name => name,
                      :type => object_type, :id => object_id})
-      @more_params[:exclude].push(place.attributes["place_id"].to_s)
     end
 
     render :action => "results"
index e9ec292e8968fee8ba4db1519029963604551e97..e76ee97f6342c8a90c7e4184ebc2328b35d82025 100644 (file)
@@ -17,7 +17,7 @@ class SiteController < ApplicationController
 
   def permalink
     lon, lat, zoom = ShortLink::decode(params[:code])
-    new_params = params.except(:code, :lon, :lat, :zoom, :node, :way, :relation, :changeset)
+    new_params = params.except(:code, :lon, :lat, :zoom, :layers, :node, :way, :relation, :changeset)
 
     if new_params.has_key? :m
       new_params.delete :m
@@ -48,7 +48,11 @@ class SiteController < ApplicationController
 
     new_params[:anchor] = "map=#{zoom}/#{lat}/#{lon}"
 
-    redirect_to new_params
+    if params.has_key? :layers
+      new_params[:anchor] += "&layers=#{params[:layers]}"
+    end
+
+    redirect_to Hash[new_params]
   end
 
   def key
@@ -147,7 +151,7 @@ class SiteController < ApplicationController
     end
 
     if anchor.present?
-      redirect_to params.merge(:anchor => anchor.join('&'))
+      redirect_to Hash[params].merge(:anchor => anchor.join('&'))
     end
   end
 end
index 9c4a9d8bd18952816f0f267aacec2d378a3a61fc..e1553cbb0f7ca399ed2b86b6a1fbcb7bda247eca 100644 (file)
@@ -49,13 +49,13 @@ class TraceController < ApplicationController
       if @user
         @traces = Trace.visible_to(@user) #1
       else
-        @traces = Trace.public #2
+        @traces = Trace.visible_to_all #2
       end
     else
       if @user and @user == target_user
         @traces = @user.traces #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
       else
-        @traces = target_user.traces.public #4
+        @traces = target_user.traces.visible_to_all #4
       end
     end
 
@@ -206,7 +206,7 @@ class TraceController < ApplicationController
   end
 
   def georss
-    @traces = Trace.public.visible
+    @traces = Trace.visible_to_all.visible
 
     if params[:display_name]
       @traces = @traces.joins(:user).where(:users => {:display_name => params[:display_name]})
index 059f00bbe38b5a6656ba2d4d5f277bc6498aa872..a3face30d4d42af71750d4bf9ac77a038e3c2526 100644 (file)
@@ -26,7 +26,7 @@ class UserPreferenceController < ApplicationController
   ##
   # return the value for a single preference
   def read_one
-    pref = UserPreference.find(@user.id, params[:preference_key])
+    pref = UserPreference.find([@user.id, params[:preference_key]])
 
     render :text => pref.v.to_s, :content_type => "text/plain"
   end
@@ -69,7 +69,7 @@ class UserPreferenceController < ApplicationController
   # update the value of a single preference
   def update_one
     begin
-      pref = UserPreference.find(@user.id, params[:preference_key])
+      pref = UserPreference.find([@user.id, params[:preference_key]])
     rescue ActiveRecord::RecordNotFound 
       pref = UserPreference.new
       pref.user = @user
@@ -85,7 +85,7 @@ class UserPreferenceController < ApplicationController
   ##
   # delete a single preference
   def delete_one
-    UserPreference.find(@user.id, params[:preference_key]).delete
+    UserPreference.find([@user.id, params[:preference_key]]).delete
 
     render :text => "", :content_type => "text/plain"
   end
index e70ec204e6446c5046a7276fcd5c39648206cd38..f4b332f7004fb44785f697fe42cd6b15d246c10d 100644 (file)
@@ -61,6 +61,8 @@ module BrowseHelper
   def format_value(key, value)
     if wp = wikipedia_link(key, value)
       link_to h(wp[:title]), wp[:url], :title => t('browse.tag_details.wikipedia_link', :page => wp[:title])
+    elsif wdt = wikidata_link(key, value)
+      link_to h(wdt[:title]), wdt[:url], :title => t('browse.tag_details.wikidata_link', :page => wdt[:title])
     elsif url = wiki_link("tag", "#{key}=#{value}")
       link_to h(value), url, :title => t('browse.tag_details.wiki_link.tag', :key => key, :value => value)
     elsif url = telephone_link(key, value)
@@ -90,7 +92,7 @@ private
   ]
 
   def icon_tags(object)
-    object.tags.find_all { |k,v| ICON_TAGS.include? k }
+    object.tags.find_all { |k,v| ICON_TAGS.include? k }.sort
   end
 
   def wiki_link(type, lookup)
@@ -149,6 +151,16 @@ private
     }
   end
 
+  def wikidata_link(key, value)
+    if key == "wikidata" and value =~ /^[Qq][1-9][0-9]*$/
+      return {
+        :url => "//www.wikidata.org/wiki/#{value}?uselang=#{I18n.locale}",
+        :title => value
+      }
+    end
+    return nil
+  end
+
   def telephone_link(key, value)
     # does it look like a phone number? eg "+1 (234) 567-8901 " ?
     return nil unless value =~ /^\s*\+[\d\s\(\)\/\.-]{6,25}\s*$/
index 8cacdf2085a7dbf425406c4c33475ea12ec618e5..a1a2125a173f81a72f2b53dcdccecdb3b9322e3f 100644 (file)
@@ -1,7 +1,11 @@
+require 'htmlentities'
+
 module TitleHelper
+  @@coder = HTMLEntities.new
+
   def set_title(title = false)
     if title
-      @title = title.gsub("<bdi>", "\u202a").gsub("</bdi>", "\u202c")
+      @title = @@coder.decode(title.gsub("<bdi>", "\u202a").gsub("</bdi>", "\u202c"))
       response.headers["X-Page-Title"] = t('layouts.project_name.title') + ' | ' + @title
     else
       @title = title
index adb41b204eae382a80c4f4282c69a7b2d33e3a7a..ab6e05ccfd659bec96e3f4a5e5530928ce9b84e5 100644 (file)
@@ -11,6 +11,9 @@ class Changeset < ActiveRecord::Base
   has_many :old_nodes
   has_many :old_ways
   has_many :old_relations
+  
+  has_many :comments, -> { where(:visible => true).order(:created_at) }, :class_name => "ChangesetComment"
+  has_and_belongs_to_many :subscribers, :class_name => 'User', :join_table => 'changesets_subscribers', :association_foreign_key => 'subscriber_id'
 
   validates_presence_of :id, :on => :update
   validates_presence_of :user_id, :created_at, :closed_at, :num_changes
@@ -179,13 +182,13 @@ class Changeset < ActiveRecord::Base
     end
   end
 
-  def to_xml
+  def to_xml(include_discussion = false)
     doc = OSM::API.new.get_xml_doc
-    doc.root << to_xml_node()
+    doc.root << to_xml_node(nil, include_discussion)
     return doc
   end
 
-  def to_xml_node(user_display_name_cache = nil)
+  def to_xml_node(user_display_name_cache = nil, include_discussion = false)
     el1 = XML::Node.new 'changeset'
     el1['id'] = self.id.to_s
 
@@ -217,6 +220,23 @@ class Changeset < ActiveRecord::Base
       bbox.to_unscaled.add_bounds_to(el1, '_')
     end
 
+    el1['comments_count'] = self.comments.count.to_s
+
+    if include_discussion
+      el2 = XML::Node.new('discussion')
+      self.comments.includes(:author).each do |comment|
+        el3 = XML::Node.new('comment')
+        el3['date'] = comment.created_at.xmlschema
+        el3['uid'] = comment.author.id.to_s if comment.author.data_public?
+        el3['user'] = comment.author.display_name.to_s if comment.author.data_public?
+        el4 = XML::Node.new('text')
+        el4.content = comment.body.to_s
+        el3 << el4
+        el2 << el3
+      end
+      el1 << el2
+    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
     # changeset, see the download method of the controller.
diff --git a/app/models/changeset_comment.rb b/app/models/changeset_comment.rb
new file mode 100644 (file)
index 0000000..a010674
--- /dev/null
@@ -0,0 +1,17 @@
+class ChangesetComment < ActiveRecord::Base
+  belongs_to :changeset
+  belongs_to :author, :class_name => "User"
+
+  validates_presence_of :id, :on => :update # is it necessary?
+  validates_uniqueness_of :id
+  validates_presence_of :changeset
+  validates_associated :changeset
+  validates_presence_of :author
+  validates_associated :author
+  validates :visible, :inclusion => { :in => [true,false] }
+  
+  # Return the comment text
+  def body
+    RichText.new("text", read_attribute(:body))
+  end
+end
index 07d43cd741da065ada41e4705b458874f5ca3756..dd91a95b4df1f7b557085f8e9da08e2d1229dba5 100644 (file)
@@ -9,6 +9,7 @@ class NoteComment < ActiveRecord::Base
   validates_presence_of :visible
   validates_associated :author
   validates_inclusion_of :event, :in => [ "opened", "closed", "reopened", "commented", "hidden" ]
+  validates_format_of :body, :with => /\A[^\x00-\x08\x0b-\x0c\x0e-\x1f\x7f\ufffe\uffff]*\z/
 
   # Return the comment text
   def body
index be6679c41b74cd6730134e2dc629e19a48efc634..b1a94a77de0ccfe517edb96e9228f2eddef520d2 100644 (file)
@@ -146,6 +146,26 @@ class Notifier < ActionMailer::Base
     end
   end
 
+  def changeset_comment_notification(comment, recipient)
+    with_recipient_locale recipient do
+      @changeset_url = changeset_url(comment.changeset, :host => SERVER_URL)
+      @comment = comment.body
+      @owner = recipient == comment.changeset.user
+      @commenter = comment.author.display_name
+      @changeset_comment = comment.changeset.tags['comment'].presence
+      @time = comment.created_at
+      @changeset_author = comment.changeset.user.display_name
+
+      if @owner
+        subject = I18n.t("notifier.changeset_comment_notification.commented.subject_own", :commenter => @commenter)
+      else
+        subject = I18n.t("notifier.changeset_comment_notification.commented.subject_other", :commenter => @commenter)
+      end
+
+      mail :to => recipient.email, :subject => subject
+    end
+  end
+
 private
 
   def with_recipient_locale(recipient)
index aba38511ce5e01399bb702a9ef3115b295cd95fa..e5c783f5c68b788e7d5f034970a3a4ebc28acd5e 100644 (file)
@@ -2,6 +2,6 @@ class RelationMember < ActiveRecord::Base
   self.table_name = "current_relation_members"
   self.primary_keys = "relation_id", "sequence_id"
 
-  belongs_to :relation
+  belongs_to :relation, :foreign_key => :relation_id
   belongs_to :member, :polymorphic => true
 end
index df66496a2601381bc103a4fdd6f3c6e9ed82691b..bf8d3731b8e7709a348a7b469fdeef0afd52a7e3 100644 (file)
@@ -7,7 +7,7 @@ class Trace < ActiveRecord::Base
 
   scope :visible, -> { where(:visible => true) }
   scope :visible_to, ->(u) { visible.where("visibility IN ('public', 'identifiable') OR user_id = ?", u) }
-  scope :public, -> { where(:visibility => ["public", "identifiable"]) }
+  scope :visible_to_all, -> { where(:visibility => ["public", "identifiable"]) }
   scope :tagged, ->(t) { joins(:tags).where(:gpx_file_tags => { :tag => t }) }
 
   validates_presence_of :user_id, :name, :timestamp
index b27e0cda54b583afe3d093a3a85e96706e4ed4d9..ed0813bee43a9ff14b47b33be7313147ab395b57 100644 (file)
@@ -12,6 +12,8 @@ class User < ActiveRecord::Base
   has_many :tokens, :class_name => "UserToken"
   has_many :preferences, :class_name => "UserPreference"
   has_many :changesets, -> { order(:created_at => :desc) }
+  has_many :changeset_comments, :foreign_key =>  :author_id
+  has_and_belongs_to_many :changeset_subscriptions, :class_name => 'Changeset', :join_table => 'changesets_subscribers', :foreign_key => 'subscriber_id'
   has_many :note_comments, :foreign_key => :author_id
   has_many :notes, :through => :note_comments
 
@@ -26,7 +28,7 @@ class User < ActiveRecord::Base
 
   scope :visible, -> { where(:status => ["pending", "active", "confirmed"]) }
   scope :active, -> { where(:status => ["active", "confirmed"]) }
-  scope :public, -> { where(:data_public => true) }
+  scope :identifiable, -> { where(:data_public => true) }
 
   has_attached_file :image,
     :default_url => "/assets/:class/:attachment/:style.png",
@@ -42,9 +44,10 @@ class User < ActiveRecord::Base
   validates_length_of :display_name, :within => 3..255, :allow_nil => true
   validates_email_format_of :email, :if => Proc.new { |u| u.email_changed? }
   validates_email_format_of :new_email, :allow_blank => true, :if => Proc.new { |u| u.new_email_changed? }
-  validates_format_of :display_name, :with => /\A[^\/;.,?%#]*\z/, :if => Proc.new { |u| u.display_name_changed? }
+  validates_format_of :display_name, :with => /\A[^\x00-\x1f\x7f\ufffe\uffff\/;.,?%#]*\z/, :if => Proc.new { |u| u.display_name_changed? }
   validates_format_of :display_name, :with => /\A\S/, :message => "has leading whitespace", :if => Proc.new { |u| u.display_name_changed? }
   validates_format_of :display_name, :with => /\S\z/, :message => "has trailing whitespace", :if => Proc.new { |u| u.display_name_changed? }
+  validates_exclusion_of :display_name, :in => %w(new terms save confirm confirm-email go_public reset-password forgot-password suspended)
   validates_numericality_of :home_lat, :allow_nil => true
   validates_numericality_of :home_lon, :allow_nil => true
   validates_numericality_of :home_zoom, :only_integer => true, :allow_nil => true
index 84d85df3c447eaad13145983e371b2afc3cd474c..bbe22792101c283e39fd7084be5a0d930627aa85 100644 (file)
 
   <%= render :partial => "tag_details", :object => @changeset.tags.except('comment') %>
 
+  <h4 class="comments-header"><%= t('browse.changeset.discussion') %></h4>
+  
+  <div class="buttons clearfix subscribe-buttons">
+    <form action="#" class="hide_unless_logged_in">
+      <% if @changeset.subscribers.exists?(@user) %>
+        <input class="action-button" type="submit" name="unsubscribe" value="<%= t('javascripts.changesets.show.unsubscribe') %>" data-method="POST" data-url="<%= changeset_unsubscribe_url(@changeset) %>" />
+      <% else %>
+        <input class="action-button" type="submit" name="subscribe" value="<%= t('javascripts.changesets.show.subscribe') %>" data-method="POST" data-url="<%= changeset_subscribe_url(@changeset) %>" />
+      <% end %>
+    </form>
+  </div>
+
+  <div class="clearfix"></div>
+
+  <% if @comments.length > 0 %>
+    <div class='changeset-comments'>
+      <form action="#">
+        <ul>
+          <% @comments.each do |comment| %>
+            <% if comment.visible %>
+              <li id="c<%= comment.id %>">
+                <small class='deemphasize'>
+                  <%= t("browse.changeset.commented_by",
+                    :when => friendly_date(comment.created_at), :exact_time => l(comment.created_at),
+                    :user => link_to(h(comment.author.display_name), {:controller => "user", :action => "view",
+                    :display_name => comment.author.display_name})).html_safe %>
+                  <% if @user and @user.moderator? %>
+                    — <span class="action-button deemphasize" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_hide_url(comment.id) %>"><%= t('javascripts.changesets.show.hide_comment') %></span>
+                  <% end %>
+                </small>
+                <%= comment.body.to_html %>
+              </li>
+            <% elsif @user and @user.moderator? %>
+              <li id="c<%= comment.id %>">
+                <small class='deemphasize'>
+                  <%= t("browse.changeset.hidden_commented_by",
+                    :when => friendly_date(comment.created_at), :exact_time => l(comment.created_at),
+                    :user => link_to(h(comment.author.display_name), {:controller => "user", :action => "view",
+                    :display_name => comment.author.display_name})).html_safe %>
+                  — <span class="action-button deemphasize" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_unhide_url(comment.id) %>"><%= t('javascripts.changesets.show.unhide_comment') %></span>
+                 </small>
+                <%= comment.body.to_html %>
+              </li>
+            <% end %>
+          <% end %>
+        </ul>
+      </form>
+    </div>
+  <% end %>
+
+  <div class="notice hide_if_logged_in">
+    <%= link_to(t("browse.changeset.join_discussion"), :controller => 'user', :action => 'login', :referer => request.fullpath) %>
+  </div>
+
+  <% unless @changeset.is_open? %>
+    <form action="#" class="hide_unless_logged_in">
+      <textarea class="comment" name="text" cols="40" rows="5"></textarea>
+      <div class="buttons clearfix">
+        <input type="submit" name="comment" value="<%= t('javascripts.changesets.show.comment') %>" data-changeset-id="<%= @changeset.id %>" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled="1"/>
+      </div>
+    </form>
+  <% end %>
+
   <% unless @ways.empty? %>
     <h4>
       <%= type_and_paginated_count('way', @way_pages) %>
diff --git a/app/views/changeset/_comment.html.erb b/app/views/changeset/_comment.html.erb
new file mode 100644 (file)
index 0000000..dfd9116
--- /dev/null
@@ -0,0 +1,6 @@
+<h2><%= t "changeset.rss.comment", :author => comment.author.display_name, 
+  :changeset_id => comment.changeset.id.to_s %></h2>
+<div class="changeset-comment" style="margin-top: 5px">
+  <div class="changeset-comment-description" style="font-size: smaller; color: #999999"><%= t "changeset.rss.commented_at_by_html", :when => friendly_date(comment.created_at), :user => comment.author.display_name %></div>
+  <div class="changeset-comment-text"><%= comment.body %></div>
+</div>
diff --git a/app/views/changeset/_comments.rss.builder b/app/views/changeset/_comments.rss.builder
new file mode 100644 (file)
index 0000000..8ad5cba
--- /dev/null
@@ -0,0 +1,18 @@
+comments.each do |comment|
+  xml.item do
+    xml.title t("changeset.rss.comment", :author => comment.author.display_name, :changeset_id => comment.changeset.id.to_s)
+    
+    xml.link url_for(:controller => "browse", :action => "changeset", :id => comment.changeset.id, :anchor => "c#{comment.id}", :only_path => false)
+    xml.guid url_for(:controller => "browse", :action => "changeset", :id => comment.changeset.id, :anchor => "c#{comment.id}", :only_path => false)
+
+    xml.description do
+      xml.cdata! render(:partial => "comment", :object => comment, :formats => [ :html ])
+    end
+
+    if comment.author
+      xml.dc :creator, comment.author.display_name
+    end
+
+    xml.pubDate comment.created_at.to_s(:rfc822)
+  end
+end
diff --git a/app/views/changeset/comments_feed.rss.builder b/app/views/changeset/comments_feed.rss.builder
new file mode 100644 (file)
index 0000000..60a229a
--- /dev/null
@@ -0,0 +1,14 @@
+xml.rss("version" => "2.0", 
+        "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
+  xml.channel do
+    if @changeset
+      xml.title t('changeset.rss.title_particular', :changeset_id => @changeset.id)
+    else
+      xml.title t('changeset.rss.title_all')
+    end
+    xml.link url_for(:controller => "site", :action => "index", :only_path => false)
+
+    xml << render(:partial => "comments", :object => @comments)
+  end
+end
+
index 13f70708162dc311c92249d38f3779b3ff3d0b64..1c91e68ec1aac9cd28cbbeb4eb7cbff753cc8209 100644 (file)
@@ -9,8 +9,8 @@
   <%= stylesheet_link_tag "leaflet-all", :media => "screen, print" %>
   <!--[if IE]>
     <%= stylesheet_link_tag "large-#{dir}", :media => "screen" %>
+    <%= favicon_link_tag "favicon.ico" %>
   <![endif]-->
-  <%= favicon_link_tag "favicon.ico" %>
   <%= favicon_link_tag "osm_logo_57.png", :rel => "apple-touch-icon", :sizes => "57x57", :type => "image/png" %>
   <%= favicon_link_tag "osm_logo_72.png", :rel => "apple-touch-icon", :sizes => "72x72", :type => "image/png" %>
   <%= favicon_link_tag "osm_logo_114.png", :rel => "apple-touch-icon", :sizes => "114x114", :type => "image/png" %>
index e72214cbefe86fae1d9e6c816bd99766fec39c3c..4715570536f53cb3dcb6f002b30fd9635ffe70b0 100644 (file)
       <p class="error"><%= t 'layouts.osm_read_only' %></p>
     <% end %>
 
+    <div id="sotm">
+      <a href="http://www.stateofthemap.org/?l=en"><%= image_tag "sotm.png" %></a>
+      <h2>
+        <a><span class="icon close"></span></a>
+        <a href="http://www.stateofthemap.org/?l=en"><%= t 'layouts.sotm_header' %></a>
+      </h2>
+      <p><a href="http://www.stateofthemap.org/?l=en">
+        <%= t 'layouts.sotm_line_1' %>
+      <br />
+        <%= t 'layouts.sotm_line_2' %>
+      <br />
+        <%= t 'layouts.sotm_line_3' %>
+      </a></p>
+    </div>
+
     <div id="flash">
       <%= render :partial => "layouts/flash" %>
     </div>
index 35f5b4a0422505642ae4a1f773cc3bfa6fee505d..f7c26aea1fa90bf2a159e81ae5ec0b20473cb5cb 100644 (file)
@@ -16,7 +16,7 @@
     </div>
     <div class='buttons'>
       <%= submit_tag t('message.new.send_button') %>
-      <%= link_to t('message.new.back'), { :controller => 'message', :action => 'inbox', :display_name => @user.display_name }, :class => 'deemphasize button' %>
+      <%= link_to t('message.new.back_to_inbox'), { :controller => 'message', :action => 'inbox', :display_name => @user.display_name }, :class => 'deemphasize button' %>
     </div>
   </fieldset>
 <% end %>
diff --git a/app/views/notifier/changeset_comment_notification.html.erb b/app/views/notifier/changeset_comment_notification.html.erb
new file mode 100644 (file)
index 0000000..b7646a8
--- /dev/null
@@ -0,0 +1,20 @@
+<p><%= t 'notifier.changeset_comment_notification.greeting' %></p>
+
+<p>
+  <% if @owner %>
+    <%= t "notifier.changeset_comment_notification.commented.your_changeset", :commenter => @commenter, :time => @time %>
+  <% else %>
+    <%= t "notifier.changeset_comment_notification.commented.commented_changeset", :commenter => @commenter, :time => @time, :changeset_author => @changeset_author %>
+  <% end %>
+  <% if @changeset_comment %>
+    <%= t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment", :changeset_comment => @changeset_comment %>
+  <% else %>
+    <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %>
+  <% end %>
+</p>
+
+==
+<%= @comment.to_html %>
+==
+
+<p><%= raw t 'notifier.changeset_comment_notification.details', :url => link_to(@changeset_url, @changeset_url) %></p>
diff --git a/app/views/notifier/changeset_comment_notification.text.erb b/app/views/notifier/changeset_comment_notification.text.erb
new file mode 100644 (file)
index 0000000..44a3c12
--- /dev/null
@@ -0,0 +1,18 @@
+<%= t 'notifier.changeset_comment_notification.greeting' %>
+
+<% if @owner %>
+  <%= t "notifier.changeset_comment_notification.commented.your_changeset", :commenter => @commenter, :time => @time %>
+<% else %>
+  <%= t "notifier.changeset_comment_notification.commented.commented_changeset", :commenter => @commenter, :time => @time, :changeset_author => @changeset_author %>
+<% end %>
+<% if @changeset_comment %>
+  <%= t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment", :changeset_comment => @changeset_comment %>
+<% else %>
+  <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %>
+<% end %>
+
+==
+<%= @comment.to_text %>
+==
+
+<%= t 'notifier.changeset_comment_notification.details', :url => @changeset_url %>
index db611f4286855f0603816515435f367d59525c33..7ddee6218269792a64b18bbc4301ce15945d84e3 100644 (file)
       params.background = hashParams.background;
     }
 
+    if (hashParams.comment) {
+      params.comment = hashParams.comment;
+    }
+
 <% if params[:gpx] -%>
     params.gpx = '<%= trace_data_url(params[:gpx]) %>';
 <% else -%>
index 78b98ae08f10f78e13badb487d4ae7e13c26742b..6bf33653562479adb68a7187e585f35d6c30c13c 100644 (file)
@@ -47,7 +47,7 @@
     <dt><a href="http://download.geofabrik.de/"><%= t'export.start.too_large.geofabrik.title' %></a></dt>
     <dd><%= t'export.start.too_large.geofabrik.description' %></dd>
 
-    <dt><a href="http://metro.teczno.com/"><%= t'export.start.too_large.metro.title' %></a></dt>
+    <dt><a href="https://mapzen.com/metro-extracts/"><%= t'export.start.too_large.metro.title' %></a></dt>
     <dd><%= t'export.start.too_large.metro.description' %></dd>
 
     <dt><a href="http://wiki.openstreetmap.org/wiki/Download"><%= t'export.start.too_large.other.title' %></a></dt>
index 200f6aa26fd4f9c9a3f36e85386594606bde74fa..da273b0ebb390ff42549c9adb30d108e419bbc8e 100644 (file)
@@ -9,49 +9,41 @@
 <div id='edit-trace-form' class='standard-form'>
   <fieldset>
     <div class='form-row'>
-      <label><%= t'trace.edit.filename' %></label>
+      <label class='standard-label'><%= t'trace.edit.filename' %></label>
       <p class='deemphasize'><%= @trace.name %> (<%= link_to t('trace.edit.download'), :controller => 'trace', :action => 'data', :id => @trace.id %>)</p>
     </div>
     <div class='form-row'>
-      <label><%= t'trace.edit.uploaded_at' %></label>
+      <label class='standard-label'><%= t'trace.edit.uploaded_at' %></label>
       <p class='deemphasize'><%= l @trace.timestamp, :format => :friendly %></p>
     </div>
-  </fieldset>
-
   <% if @trace.inserted? %>
-
-  <fieldset>
     <div class='form-row'>
-      <label><%= t'trace.edit.points' %></label>
+      <label class='standard-label'><%= t'trace.edit.points' %></label>
       <p class='deemphasize'><%= @trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %></p>
     </div>
     <div class='form-row'>
-      <label><%= t'trace.edit.start_coord' %></label>
+      <label class='standard-label'><%= t'trace.edit.start_coord' %></label>
     </div>
     <div class="geo">
       <span class="latitude"><%= @trace.latitude %></span>;
       <span class="longitude"><%= @trace.longitude %></span>
     </div>
     (<%=link_to t('trace.edit.map'), :controller => 'site', :action => 'index', :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%=link_to t('trace.edit.edit'), :controller => 'site', :action => 'edit', :gpx=> @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>)
-  </fieldset>
-
   <% end %>
-
-  <fieldset>
     <div class='form-row'>
-      <label><%= t'trace.edit.owner' %></label>
+      <label class='standard-label'><%= t'trace.edit.owner' %></label>
       <p class='deemphasize'><%= link_to h(@trace.user.display_name), {:controller => 'user', :action => 'view', :display_name => @trace.user.display_name} %></p>
     </div>
     <div class='form-row'>
-      <label><%= t'trace.edit.description' %></label>
+      <label class='standard-label'><%= t'trace.edit.description' %></label>
       <%= f.text_field :description %>
     </div>
     <div class='form-row'>
-      <label><%= t'trace.edit.tags' %></label>
+      <label class='standard-label'><%= t'trace.edit.tags' %></label>
       <%= f.text_field :tagstring %> (<%= t'trace.edit.tags_help' %>)
     </div>
     <div class='form-row'>
-      <label><%= t'trace.edit.visibility' %></label>
+      <label class='standard-label'><%= t'trace.edit.visibility' %></label>
       <%= f.select :visibility, [[t('trace.visibility.private'),"private"],[t('trace.visibility.public'),"public"],[t('trace.visibility.trackable'),"trackable"],[t('trace.visibility.identifiable'),"identifiable"]] %> (<a href="<%= t'trace.edit.visibility_help_url' %>"><%= t'trace.edit.visibility_help' %></a>)
     </div>
   </fieldset>
index cb70281e6f6bb1fa383eb751ccb7f736b5413d61..051d270a4201164a09c8767790c64aae1e5bf320 100644 (file)
@@ -44,7 +44,6 @@
           <li><%= link_to image_tag("openid.png", :alt => t("user.login.openid_providers.openid.title")), "#", :id => "openid_open_url", :title => t("user.login.openid_providers.openid.title") %></li>
           <li><%= openid_button "google", "gmail.com" %></li>
           <li><%= openid_button "yahoo", "me.yahoo.com" %></li>
-          <li><%= openid_button "myopenid", "myopenid.com" %></li>
           <li><%= openid_button "wordpress", "wordpress.com" %></li>
           <li><%= openid_button "aol", "aol.com" %></li>
         </ul>
index 205abe3536eb70da0ef5fc25dbdace5e48e92a97..5bc2a619e83ea182b17e2507c5e0f2f07f7cf18c 100644 (file)
--- a/config.ru
+++ b/config.ru
@@ -1,4 +1,4 @@
 # This file is used by Rack-based servers to start the application.
 
 require ::File.expand_path('../config/environment',  __FILE__)
-run OpenStreetMap::Application
+run Rails.application
index cc7ef05005bc8156316c2f364afe5e366beeb6ea..a40336c3303dbe53065420e0c8c53c3bd060ccd8 100644 (file)
@@ -5,7 +5,7 @@ require File.expand_path('../preinitializer', __FILE__)
 if STATUS == :database_offline
 require "action_controller/railtie"
 require "action_mailer/railtie"
-require "active_resource/railtie"
+require "active_model/railtie"
 require "sprockets/railtie"
 require "rails/test_unit/railtie"
 else
@@ -14,7 +14,7 @@ end
 
 # Require the gems listed in Gemfile, including any gems
 # you've limited to :test, :development, or :production.
-Bundler.require(:default, Rails.env)
+Bundler.require(*Rails.groups)
 
 module OpenStreetMap
   class Application < Rails::Application
@@ -33,9 +33,6 @@ module OpenStreetMap
     # Custom directories with classes and modules you want to be autoloadable.
     config.autoload_paths += %W(#{config.root}/lib)
 
-    # Configure the default encoding used in templates for Ruby 1.9.
-    config.encoding = "utf-8"
-
     # Use SQL instead of Active Record's schema dumper when creating the 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
@@ -43,12 +40,6 @@ module OpenStreetMap
       config.active_record.schema_format = :sql
     end
 
-    # 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'
-
     # Don't eager load models when the database is offline
     if STATUS == :database_offline
       config.paths["app/models"].skip_eager_load!
index 4489e58688ca642d8e0e9489f6896f49f9b89da6..5e5f0c1fac0bcde58936530ada4fd08abcaf5a64 100644 (file)
@@ -1,6 +1,4 @@
-require 'rubygems'
-
 # Set up gems listed in the Gemfile.
 ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
 
-require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
+require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
index b958021e8fe587a1b8f04c1f8640d5c71e99d9d4..ee8d90dc651948269f1b869953ff04774e737307 100644 (file)
@@ -1,5 +1,5 @@
-# Load the rails application
+# Load the Rails application.
 require File.expand_path('../application', __FILE__)
 
-# Initialize the rails application
-OpenStreetMap::Application.initialize!
+# Initialize the Rails application.
+Rails.application.initialize!
index 36696f8271c50b09f18ea2e3b56c2b546614abaf..a414d1490655db23aa4a00bb688b5a57664c2313 100644 (file)
@@ -19,11 +19,19 @@ OpenStreetMap::Application.configure do
   # Print deprecation notices to the Rails logger.
   config.active_support.deprecation = :log
 
-  # Raise an error on page load if there are pending migrations
+  # Raise an error on page load if there are pending migrations.
   config.active_record.migration_error = :page_load
 
   # Debug mode disables concatenation and preprocessing of assets.
   # This option may cause significant delays in view rendering with a large
   # number of complex assets.
   config.assets.debug = true
+
+  # Adds additional error checking when serving assets at runtime.
+  # Checks for improperly declared sprockets dependencies.
+  # Raises helpful error messages.
+  config.assets.raise_runtime_errors = true
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
 end
index c4910d86f1b6f555b7ecbe727b6847b6cb7fcc6e..941070902d9f32c08a910a25c48d42c60e533dac 100644 (file)
@@ -5,7 +5,7 @@ OpenStreetMap::Application.configure do
   config.cache_classes = true
 
   # Eager load code on boot. This eager loads most of Rails and
-  # your application in memory, allowing both thread web servers
+  # your application in memory, allowing both threaded web servers
   # and those relying on copy on write to perform better.
   # Rake tasks automatically ignore this option for performance.
   config.eager_load = true
@@ -32,9 +32,6 @@ OpenStreetMap::Application.configure do
   # Generate digests for assets URLs.
   config.assets.digest = true
 
-  # Version of your assets, change this if you want to expire all your assets.
-  config.assets.version = '1.0'
-
   # 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
@@ -67,24 +64,7 @@ OpenStreetMap::Application.configure do
   # 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 in app/assets folder are already added.
-  config.assets.precompile += %w( index.js browse.js welcome.js fixthemap.js )
-  config.assets.precompile += %w( user.js diary_entry.js swfobject.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( leaflet-all.css leaflet.ie.css )
-  config.assets.precompile += %w( embed.js embed.css )
-  config.assets.precompile += %w( html5shiv.js )
-  config.assets.precompile += %w( images/marker-*.png img/*-handle.png )
-  config.assets.precompile += %w( potlatch2.swf )
-  config.assets.precompile += %w( potlatch2/assets.zip )
-  config.assets.precompile += %w( potlatch2/FontLibrary.swf )
-  config.assets.precompile += %w( potlatch2/locales/*.swf )
-  config.assets.precompile += %w( help/introduction.* )
-  config.assets.precompile += %w( iD.js iD.css )
-  config.assets.precompile += %w( iD/img/*.svg iD/img/*.png iD/img/*.gif )
-  config.assets.precompile += %w( iD/img/pattern/*.png )
+  # `config.assets.precompile` has moved to config/initializers/assets.rb
 
   # Ignore bad email addresses and do not raise email delivery errors.
   # Set this to true and configure the email server for immediate delivery to raise delivery errors.
@@ -102,4 +82,9 @@ OpenStreetMap::Application.configure do
 
   # Use default logging formatter so that PID and timestamp are not suppressed.
   config.log_formatter = ::Logger::Formatter.new
+
+  # Do not dump schema after migrations.
+  unless STATUS == :database_offline
+    config.active_record.dump_schema_after_migration = false
+  end
 end
index ebbda583634ad7b3c1694f188a9b41b14f2c3e2f..b0ff645a0195d9813dbc3139a0ae658f29fbfa94 100644 (file)
@@ -14,7 +14,7 @@ OpenStreetMap::Application.configure do
 
   # Configure static asset server for tests with Cache-Control for performance.
   config.serve_static_assets  = true
-  config.static_cache_control = "public, max-age=3600"
+  config.static_cache_control = 'public, max-age=3600'
 
   # Show full error reports and disable caching.
   config.consider_all_requests_local       = true
@@ -33,4 +33,7 @@ OpenStreetMap::Application.configure do
 
   # Print deprecation notices to the stderr.
   config.active_support.deprecation = :stderr
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
 end
index 7f6aaf298e5165b795a178a5fd5c405a0c05a01e..e7915c96b7699924de9f98a1a06e8479a0575c07 100644 (file)
@@ -84,6 +84,11 @@ defaults: &defaults
   require_terms_seen: false
   # Whether to require users to agree to the CTs before editing
   require_terms_agreed: false
+  # Imagery to return in capabilities as blacklisted
+  imagery_blacklist:
+    - ".*\\.googleapis\\.com/.*"
+    - ".*\\.google\\.com/.*"
+    - ".*\\.google\\.ru/.*"
   # URL of Overpass instance to use for feature queries
   overpass_url: "//overpass-api.de/api/interpreter"
 
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
new file mode 100644 (file)
index 0000000..9560e29
--- /dev/null
@@ -0,0 +1,25 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
+Rails.application.config.assets.precompile += %w( index.js browse.js welcome.js fixthemap.js )
+Rails.application.config.assets.precompile += %w( user.js diary_entry.js )
+Rails.application.config.assets.precompile += %w( large-ltr.css small-ltr.css print-ltr.css )
+Rails.application.config.assets.precompile += %w( large-rtl.css small-rtl.css print-rtl.css )
+Rails.application.config.assets.precompile += %w( leaflet-all.css leaflet.ie.css )
+Rails.application.config.assets.precompile += %w( embed.js embed.css )
+Rails.application.config.assets.precompile += %w( html5shiv.js )
+Rails.application.config.assets.precompile += %w( images/marker-*.png img/*-handle.png )
+Rails.application.config.assets.precompile += %w( swfobject.js expressInstall.swf )
+Rails.application.config.assets.precompile += %w( potlatch2.swf )
+Rails.application.config.assets.precompile += %w( potlatch2/assets.zip )
+Rails.application.config.assets.precompile += %w( potlatch2/FontLibrary.swf )
+Rails.application.config.assets.precompile += %w( potlatch2/locales/*.swf )
+Rails.application.config.assets.precompile += %w( help/introduction.* )
+Rails.application.config.assets.precompile += %w( iD.js iD.css )
+Rails.application.config.assets.precompile += %w( iD/img/*.svg iD/img/*.png iD/img/*.gif )
+Rails.application.config.assets.precompile += %w( iD/img/pattern/*.png )
+Rails.application.config.assets.precompile += %w( iD/locales/*.json )
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
new file mode 100644 (file)
index 0000000..7a06a89
--- /dev/null
@@ -0,0 +1,3 @@
+# Be sure to restart your server when you modify this file.
+
+Rails.application.config.action_dispatch.cookies_serializer = :json
\ No newline at end of file
index 012e401d2436478ccbc4d07daefb777c3bc83dda..9dcc34fcc05e0706fb2400dec008068cff458b56 100644 (file)
@@ -2,7 +2,7 @@ if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
   module ActiveRecord
     module ConnectionAdapters
       class PostgreSQLAdapter
-        def initialize_type_map_with_enums
+        def initialize_type_map_with_enums(type_map)
           OID.alias_type "format_enum", "text"
           OID.alias_type "gpx_visibility_enum", "text"
           OID.alias_type "note_status_enum", "text"
@@ -11,7 +11,7 @@ if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
           OID.alias_type "user_role_enum", "text"
           OID.alias_type "user_status_enum", "text"
 
-          initialize_type_map_without_enums
+          initialize_type_map_without_enums(type_map)
         end
 
         alias_method_chain :initialize_type_map, :enums
diff --git a/config/initializers/router.rb b/config/initializers/router.rb
new file mode 100644 (file)
index 0000000..a1e6bbf
--- /dev/null
@@ -0,0 +1,18 @@
+# Some versions of ruby seem to accidentally force the encoding
+# as part of normalize_path and some don't
+
+module ActionDispatch
+  module Journey
+    class Router
+      class Utils
+        def self.normalize_path_with_encoding(path)
+          self.normalize_path_without_encoding(path).force_encoding("UTF-8")
+        end
+
+        class << self
+          alias_method_chain :normalize_path, :encoding
+        end
+      end
+    end
+  end
+end
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
deleted file mode 100644 (file)
index ac761ae..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key is used 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,
-# no regular words or you'll be exposed to dictionary attacks.
-# You can use `rake secret` to generate a secure secret key.
-
-# Make sure your secret_key_base is kept private
-# if you're sharing your code publicly.
-OpenStreetMap::Application.config.secret_key_base = '8be565e2e25831d88231f4bcfd83dfc3ab33957c4f33bb3cff7a279f7820ec4d0c1111f246bb347c68859c0b46b4e591be9179a53a5a7165a9936000d6d2be41'
index 17173d536612fdbba32887b1d766a651e3ffee45..97886ab3e3cf6a639a9c8e337504da417a1e42d0 100644 (file)
@@ -1,7 +1,7 @@
 # Be sure to restart your server when you modify this file.
 
 if defined?(MEMCACHE_SERVERS)
-  OpenStreetMap::Application.config.session_store :mem_cache_store, :memcache_server => MEMCACHE_SERVERS, :namespace => "rails:session", :key => "_osm_session"
+  Rails.application.config.session_store :mem_cache_store, :memcache_server => MEMCACHE_SERVERS, :namespace => "rails:session", :key => "_osm_session"
 else
-  OpenStreetMap::Application.config.session_store :cache_store, :key => '_osm_session'
+  Rails.application.config.session_store :cache_store, :key => '_osm_session'
 end
index 7cfcfbe430d58a191cf15e2b95c4ef50b9e36e3b..16dcbe29ac3c1ef1efc95a648b6e080cad8cbd36 100644 (file)
@@ -1,45 +1,16 @@
 # Messages for Afrikaans (Afrikaans)
 # Exported from translatewiki.net
-# Export driver: syck-pecl
+# Export driver: phpyaml
 # Author: Firefishy
 # Author: Naudefj
 # Author: Nroets
-af: 
-  activerecord: 
-    attributes: 
-      diary_comment: 
-        body: Teks
-      diary_entry: 
-        language: Taal
-        latitude: Breedtegraad
-        longitude: Lengtegraad
-        title: Titel
-        user: Gebruiker
-      friend: 
-        friend: Vriend
-        user: Gebruiker
-      message: 
-        body: Teks
-        recipient: Ontvanger
-        sender: Afsender
-        title: Titel
-      trace: 
-        description: Beskrywing
-        latitude: Breedtegraad
-        longitude: Lengtegraad
-        name: Naam
-        public: Openbaar
-        size: Grootte
-        user: Gebruiker
-        visible: Sigbaar
-      user: 
-        active: Aktief
-        description: Beskrywing
-        display_name: Vertoon Naam
-        email: E-pos
-        languages: Tale
-        pass_crypt: Wagwoord
-    models: 
+---
+af:
+  time:
+    formats:
+      friendly: '%e %B %Y om %H:%M'
+  activerecord:
+    models:
       acl: Toegangsbeheer
       changeset: Stel wysigings
       country: Land
@@ -56,165 +27,181 @@ af:
       user: Gebruiker
       user_preference: Gebruikersvoorkeure
       way: Weg
-  browse: 
-    containing_relation: 
+    attributes:
+      diary_comment:
+        body: Teks
+      diary_entry:
+        user: Gebruiker
+        title: Titel
+        latitude: Breedtegraad
+        longitude: Lengtegraad
+        language: Taal
+      friend:
+        user: Gebruiker
+        friend: Vriend
+      trace:
+        user: Gebruiker
+        visible: Sigbaar
+        name: Naam
+        size: Grootte
+        latitude: Breedtegraad
+        longitude: Lengtegraad
+        public: Openbaar
+        description: Beskrywing
+      message:
+        sender: Afsender
+        title: Titel
+        body: Teks
+        recipient: Ontvanger
+      user:
+        email: E-pos
+        active: Aktief
+        display_name: Vertoon Naam
+        description: Beskrywing
+        languages: Tale
+        pass_crypt: Wagwoord
+  browse:
+    relation_member:
+      entry_role: '%{type} %{name} as %{role}'
+      type:
+        node: Node
+        way: Weg
+        relation: Relasie
+    containing_relation:
       entry: Relasie %{relation_name}
       entry_role: Relasie %{relation_name} (as %{relation_role})
-    not_found: 
+    not_found:
       sorry: Jammer, %{type} %{id} kan nie gevind word nie.
-      type: 
-        changeset: Veranderingstel
+      type:
         node: node
-        relation: relasie
         way: weg
-    relation_member: 
-      entry_role: "%{type} %{name} as %{role}"
-      type: 
-        node: Node
-        relation: Relasie
-        way: Weg
-    start_rjs: 
+        relation: relasie
+        changeset: Veranderingstel
+    timeout:
+      sorry: Jammer, dit het te lank geneem om data vir die %{type} met die id %{id}
+        op te soek.
+      type:
+        node: node
+    start_rjs:
       load_data: Laai data
       loading: Laai...
-    tag_details: 
-      tags: "Etikette:"
-    timeout: 
-      sorry: Jammer, dit het te lank geneem om data vir die %{type} met die id %{id} op te soek.
-      type: 
-        node: node
-  changeset: 
-    changeset: 
-      anonymous: Anoniem
-      no_edits: (geen wysigings)
-    changeset_paging_nav: 
+    tag_details:
+      tags: 'Etikette:'
+  changeset:
+    changeset_paging_nav:
+      showing_page: Wys bladsy %{page}
       next: Volgende »
       previous: » Vorige
-      showing_page: Wys bladsy %{page}
-    changesets: 
-      area: Gebied
-      comment: Opmerking
+    changeset:
+      anonymous: Anoniem
+      no_edits: (geen wysigings)
+    changesets:
       id: ID
       saved_at: Gestoor op
       user: Gebruiker
-  diary_entry: 
-    comments: 
-      when: Wanneer
-    diary_comment: 
-      comment_from: Kommentaar van %{link_user} op %{comment_created_at}
-      confirm: Bevestig
-      hide_link: Versteek die opmerking
-    diary_entry: 
-      comment_count: 
-        one: 1 reaksie
-        other: "%{count} reaksies"
-      comment_link: Lewer kommentaar op hierdie bydrae
-      confirm: Bevestig
-      edit_link: Wysig hierdie inskrywing
-      hide_link: Versteek die inskrywing
-      posted_by: Gepos deur %{link_user} op %{created} in die %{language_link}
-      reply_link: Antwoord op hierdie bydrae
-    edit: 
-      body: "Teks:"
-      language: "Taal:"
-      latitude: "Breedtegraad:"
-      location: "Ligging:"
-      longitude: "Lengtegraad:"
-      marker_text: Ligging van dagboekinskrywing
-      save_button: Stoor
-      subject: "Onderwerp:"
-      title: Wysig dagboekinskrywing
-      use_map_link: gebruik kaart
-    feed: 
-      all: 
-        description: Onlangse dagboekinskrywings van OpenStreetMap-gebruikers
-        title: OpenStreetMap dagboekinskrywings
-      language: 
-        description: Onlangse dagboekinskrywings van OpenStreetMap-gebruikers in %{language_name}
-        title: OpenStreetMap dagboekinskrywings in %{language_name}
-      user: 
-        description: Onlangse OpenStreetMap dagboekinskrywings van %{user}
-        title: OpenStreetMap dagboekinskrywings van %{user}
-    list: 
+      comment: Opmerking
+      area: Gebied
+  diary_entry:
+    new:
+      title: Nuwe dagboekinskrywing
+    list:
+      title: Gebruikersdagboeke
+      user_title: Dagboek van %{user}
       in_language_title: Dagboekinkrywings in %{language}
       new: Nuwe dagboekinskrywing
       new_title: Plaas nuwe artikel in u dagboek
-      newer_entries: Nuwer inskrywings
       no_entries: Geen dagboekinskrywings nie
+      recent_entries: 'Onlangse dagboekinskrywings:'
       older_entries: Ouer inskrywings
-      recent_entries: "Onlangse dagboekinskrywings:"
-      title: Gebruikersdagboeke
+      newer_entries: Nuwer inskrywings
+    edit:
+      title: Wysig dagboekinskrywing
+      subject: 'Onderwerp:'
+      body: 'Teks:'
+      language: 'Taal:'
+      location: 'Ligging:'
+      latitude: 'Breedtegraad:'
+      longitude: 'Lengtegraad:'
+      use_map_link: gebruik kaart
+      save_button: Stoor
+      marker_text: Ligging van dagboekinskrywing
+    view:
+      title: '%{user} se dagboek | %{title}'
       user_title: Dagboek van %{user}
-    location: 
-      edit: Wysig
-      location: "Ligging:"
-      view: Wys
-    new: 
-      title: Nuwe dagboekinskrywing
-    no_such_entry: 
-      body: Jammer, daar is geen dagboekinskrywing of kommentaar met die id %{id} nie. Kontroleer u spelling, of miskien is die skakel waarop u gekliek het verkeerd.
-      heading: Die inskrywing met id %{id} bestaan nie
-      title: Die opgevraagde dagboekinskrywing bestaan nie
-    view: 
       leave_a_comment: Los opmerking agter
+      login_to_leave_a_comment: U moet eers %{login_link} alvorens u kommentaar kan
+        lewer
       login: Meld aan
-      login_to_leave_a_comment: U moet eers %{login_link} alvorens u kommentaar kan lewer
       save_button: Stoor
-      title: "%{user} se dagboek | %{title}"
-      user_title: Dagboek van %{user}
-  export: 
-    start: 
-      add_marker: Plaas 'n merker op die kaart
+    no_such_entry:
+      title: Die opgevraagde dagboekinskrywing bestaan nie
+      heading: Die inskrywing met id %{id} bestaan nie
+      body: Jammer, daar is geen dagboekinskrywing of kommentaar met die id %{id}
+        nie. Kontroleer u spelling, of miskien is die skakel waarop u gekliek het
+        verkeerd.
+    diary_entry:
+      posted_by: Gepos deur %{link_user} op %{created} in die %{language_link}
+      comment_link: Lewer kommentaar op hierdie bydrae
+      reply_link: Antwoord op hierdie bydrae
+      comment_count:
+        one: 1 reaksie
+        other: '%{count} reaksies'
+      edit_link: Wysig hierdie inskrywing
+      hide_link: Versteek die inskrywing
+      confirm: Bevestig
+    diary_comment:
+      comment_from: Kommentaar van %{link_user} op %{comment_created_at}
+      hide_link: Versteek die opmerking
+      confirm: Bevestig
+    location:
+      location: 'Ligging:'
+      view: Wys
+      edit: Wysig
+    feed:
+      user:
+        title: OpenStreetMap dagboekinskrywings van %{user}
+        description: Onlangse OpenStreetMap dagboekinskrywings van %{user}
+      language:
+        title: OpenStreetMap dagboekinskrywings in %{language_name}
+        description: Onlangse dagboekinskrywings van OpenStreetMap-gebruikers in %{language_name}
+      all:
+        title: OpenStreetMap dagboekinskrywings
+        description: Onlangse dagboekinskrywings van OpenStreetMap-gebruikers
+    comments:
+      when: Wanneer
+  export:
+    start:
       area_to_export: Area om te eksporteer
-      embeddable_html: HTML-kode
-      export_button: Eksporteer
-      export_details: OpenStreetMap se data is gelisensieer onder die <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.af">Creative Commons Erkenning-Insgelyks Deel 2.0 lisensie</a>.
-      format: "Formaat:"
+      manually_select: Kies 'n ander gebied handmatig
       format_to_export: Lêerformaat
-      image_size: "Prentgrootte:"
-      latitude: "Breedte:"
+      osm_xml_data: OpenStreetMap XML-data
+      embeddable_html: HTML-kode
       licence: Lisensie
-      longitude: "Lengte:"
-      manually_select: Kies 'n ander gebied handmatig
-      max: max
+      export_details: OpenStreetMap se data is gelisensieer onder die <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.af">Creative
+        Commons Erkenning-Insgelyks Deel 2.0 lisensie</a>.
       options: Voorkeure
-      osm_xml_data: OpenStreetMap XML-data
-      output: Afvoer
+      format: 'Formaat:'
       scale: Skaal
+      max: max
+      image_size: 'Prentgrootte:'
       zoom: Zoom
-  geocoder: 
-    description: 
-      title: 
-        geonames: Ligging vanaf <a href="http://www.geonames.org/">GeoNames</a>
-      types: 
-        cities: Stede
-        places: Plekke
-        towns: Dorpe
-    direction: 
-      east: oos
-      north: noord
-      north_east: noordoos
-      north_west: noordwes
-      south: suid
-      south_east: suid-oos
-      south_west: suidwes
-      west: wes
-    distance: 
-      one: ongeveer 1km
-      other: ongeveer %{count}km
-      zero: minder as 1km
-    results: 
-      more_results: Meer resultate
-      no_results: Geen resultate gevind nie
-    search: 
-      title: 
-        ca_postcode: Resultate vanaf <a href="http://geocoder.ca/">Geocoder.CA</a>
-        geonames: Resultate vanaf <a href="http://www.geonames.org/">GeoNames</a>
+      add_marker: Plaas 'n merker op die kaart
+      latitude: 'Breedte:'
+      longitude: 'Lengte:'
+      output: Afvoer
+      export_button: Eksporteer
+  geocoder:
+    search:
+      title:
         latlon: Resultate vanaf <a href="http://openstreetmap.org/">intern</a>
-        uk_postcode: Resultate vanaf <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>
         us_postcode: Resultate vanaf <a href="http://geocoder.us/">Geocoder.us</a>
-    search_osm_nominatim: 
-      prefix: 
-        amenity: 
+        uk_postcode: Resultate vanaf <a href="http://www.npemap.org.uk/">NPEMap /
+          FreeThe Postcode</a>
+        ca_postcode: Resultate vanaf <a href="http://geocoder.ca/">Geocoder.CA</a>
+        geonames: Resultate vanaf <a href="http://www.geonames.org/">GeoNames</a>
+    search_osm_nominatim:
+      prefix:
+        amenity:
           airport: Lughawe
           arts_centre: Kunssentrum
           atm: OTM
@@ -300,11 +287,11 @@ af:
           waste_basket: Asblik
           wifi: WiFi-toegang
           youth_centre: Jeugsentrum
-        boundary: 
+        boundary:
           administrative: Administratiewe grens
-        building: 
+        building:
           "yes": Gebou
-        highway: 
+        highway:
           bridleway: Ruiterpad
           bus_stop: Bushalte
           construction: Snelweg in aanbou
@@ -335,7 +322,7 @@ af:
           trunk_link: Trokpad
           unclassified: Ongeklassifiseerde pad
           unsurfaced: Grondpad
-        historic: 
+        historic:
           archaeological_site: Argeologiese vindplaas
           battlefield: Slagveld
           building: Gebou
@@ -353,7 +340,7 @@ af:
           wayside_cross: Kruis langs die pad
           wayside_shrine: Altaar langs die pad
           wreck: Wrak
-        landuse: 
+        landuse:
           allotments: Volkstuine
           cemetery: Begraafplaas
           commercial: Kommersiële gebied
@@ -377,7 +364,7 @@ af:
           vineyard: Wingerd
           wetland: Vleiland
           wood: Bos
-        leisure: 
+        leisure:
           beach_resort: Strandoort
           fishing: Visvangarea
           garden: Tuin
@@ -394,7 +381,7 @@ af:
           swimming_pool: Swembad
           track: Atletiekbaan
           water_park: Waterspeelpark
-        natural: 
+        natural:
           bay: Baai
           beach: Strand
           cape: Kaap
@@ -430,7 +417,7 @@ af:
           wetland: Moeras
           wetlands: Moeras
           wood: Bos
-        place: 
+        place:
           airport: Lughawe
           city: Stad
           country: Land
@@ -452,7 +439,7 @@ af:
           town: Dorp
           unincorporated_area: Geïnkorporeerde Ruimte
           village: Dorp
-        railway: 
+        railway:
           construction: Spoor in aanbou
           disused_station: Ongebruikte spoorwegstasie
           funicular: Kabelspoorweg
@@ -469,7 +456,7 @@ af:
           subway_entrance: Metroingang
           switch: Spoogwegpunte
           tram_stop: Tramhalte
-        shop: 
+        shop:
           art: Kunswinkel
           bakery: Bakkery
           beauty: Skoonheidssalon
@@ -530,7 +517,7 @@ af:
           toys: Speelgoedwinkel
           travel_agency: Reisburo
           video: Video-winkel
-        tourism: 
+        tourism:
           alpine_hut: Berghut
           artwork: Kunswerk
           attraction: Attraksie
@@ -551,7 +538,7 @@ af:
           valley: Vallei
           viewpoint: Uitkykpunt
           zoo: Dieretuin
-        waterway: 
+        waterway:
           boatyard: Skeepswerf
           canal: Kanaal
           connector: Waterverbinding
@@ -566,554 +553,592 @@ af:
           river: Rivier
           riverbank: Rivierbedding
           stream: Stroom
-          water_point: Waterpunt
           waterfall: Waterval
-  javascripts: 
-    map: 
-      base: 
-        cycle_map: Fietskaart
-  layouts: 
-    copyright: Outeursreg & lisensie
-    donate: Ondersteun OpenStreetMap deur aan die Hardeware Opgradeer-fonds te %{link}.
-    edit: Wysig
-    export: Eksporteer
-    gps_traces: GPS-spore
-    gps_traces_tooltip: Beheer GPS-spore
-    history: Geskiedenis
+          water_point: Waterpunt
+    description:
+      title:
+        geonames: Ligging vanaf <a href="http://www.geonames.org/">GeoNames</a>
+      types:
+        cities: Stede
+        towns: Dorpe
+        places: Plekke
+    results:
+      no_results: Geen resultate gevind nie
+      more_results: Meer resultate
+    distance:
+      one: ongeveer 1km
+      zero: minder as 1km
+      other: ongeveer %{count}km
+    direction:
+      south_west: suidwes
+      south: suid
+      south_east: suid-oos
+      east: oos
+      north_east: noordoos
+      north: noord
+      north_west: noordwes
+      west: wes
+  layouts:
+    logo:
+      alt_text: OpenStreetMap-logo
     home: tuis
+    logout: teken af
     log_in: meld aan
     log_in_tooltip: Teken aan met 'n bestaande rekening
-    logo: 
-      alt_text: OpenStreetMap-logo
-    logout: teken af
-    make_a_donation: 
-      text: Maak 'n donasie
-      title: Ondersteun OpenStreetMap met'n geldelike donasie
-    osm_read_only: Die OpenStreetMap-databasis kan op die oomblik slegs gelees word aangesien noodsaaklik onderhoud tans uitgevoer word.
     sign_up: registreer
     sign_up_tooltip: Skep 'n rekening vir wysigings
-    tag_line: Die vrye wiki-wêreldkaart
+    edit: Wysig
+    history: Geskiedenis
+    export: Eksporteer
+    gps_traces: GPS-spore
+    gps_traces_tooltip: Beheer GPS-spore
     user_diaries: Gebruikersdagboeke
     user_diaries_tooltip: Wys gebruikersdagboeke
-  license_page: 
-    foreign: 
+    tag_line: Die vrye wiki-wêreldkaart
+    osm_read_only: Die OpenStreetMap-databasis kan op die oomblik slegs gelees word
+      aangesien noodsaaklik onderhoud tans uitgevoer word.
+    donate: Ondersteun OpenStreetMap deur aan die Hardeware Opgradeer-fonds te %{link}.
+    copyright: Outeursreg & lisensie
+    make_a_donation:
+      title: Ondersteun OpenStreetMap met'n geldelike donasie
+      text: Maak 'n donasie
+  license_page:
+    foreign:
       title: Oor hierdie vertaling
-  message: 
-    delete: 
-      deleted: Boodskap is verwyder
-    inbox: 
-      date: Datum
-      from: Vanaf
+  notifier:
+    diary_comment_notification:
+      subject: '[OpenStreetMap] %{user} het kommentaar op u dagboekinskrywing gelewer'
+      hi: Hallo %{to_user},
+    message_notification:
+      hi: Hallo %{to_user},
+    friend_notification:
+      subject: '[OpenStreetMap] %{user} het u as ''n vriend bygevoeg'
+    gpx_notification:
+      greeting: Hallo,
+      your_gpx_file: Dit lyk soos jou GPX-lêer
+      with_description: met die beskrywing
+      and_the_tags: 'en die volgende etikette:'
+      and_no_tags: en geen etikette.
+      failure:
+        more_info_2: 'hulle kan gevind word by:'
+    signup_confirm:
+      subject: '[OpenStreetMap] Bevestig u e-posadres'
+    email_confirm:
+      subject: '[OpenStreetMap] Bevestig u e-posadres'
+    email_confirm_plain:
+      greeting: Hallo,
+    email_confirm_html:
+      greeting: Hallo,
+      hopefully_you: Iemand (hopelik u) wil graag sy e-posadres op %{server_url} verander
+        na %{new_address}.
+      click_the_link: As dit u is, kliek op die onderstaande skakel om die verandering
+        te bevestig.
+    lost_password:
+      subject: '[OpenStreetMap] Versoek nuwe wagwoord'
+    lost_password_plain:
+      greeting: Hallo,
+      click_the_link: As dit u is, kliek op die onderstaande skakel om die wagwoord
+        te herstel.
+    lost_password_html:
+      greeting: Hallo,
+  message:
+    inbox:
+      title: Inboks
       my_inbox: My inboks
-      no_messages_yet: U het nog geen boodskappe nie. Hoekom kontak u nie sommige van die %{people_mapping_nearby_link} nie?
       outbox: outboks
-      people_mapping_nearby: nabygeleë karteerders
+      from: Vanaf
       subject: Onderwerp
-      title: Inboks
-    mark: 
-      as_read: Boodskap gemerk as gelees
-      as_unread: Boodskap gemerk as ongelees
-    message_summary: 
-      delete_button: Verwyder
+      date: Datum
+      no_messages_yet: U het nog geen boodskappe nie. Hoekom kontak u nie sommige
+        van die %{people_mapping_nearby_link} nie?
+      people_mapping_nearby: nabygeleë karteerders
+    message_summary:
+      unread_button: Merk as ongelees
       read_button: Merk as gelees
       reply_button: Antwoord
-      unread_button: Merk as ongelees
-    new: 
-      back_to_inbox: Terug na inboks
-      body: Teks
-      message_sent: Boodskap is gestuur
-      send_button: Stuur
+      delete_button: Verwyder
+    new:
+      title: Stuur boodskap
       send_message_to: Stuur 'n nuwe boodskap aan %{name}
       subject: Onderwerp
-      title: Stuur boodskap
-    no_such_message: 
-      heading: Die boodskap bestaan nie
+      body: Teks
+      send_button: Stuur
+      back_to_inbox: Terug na inboks
+      message_sent: Boodskap is gestuur
+    no_such_message:
       title: Die boodskap bestaan nie
-    outbox: 
-      date: Datum
-      inbox: inboks
+      heading: Die boodskap bestaan nie
+    outbox:
+      title: Gestuur
       my_inbox: My %{inbox_link}
-      no_sent_messages: U het nog geen boodskappe gestuur nie. Hoekom kontak u nie sommige van die %{people_mapping_nearby_link} nie?
+      inbox: inboks
       outbox: uitboks
-      people_mapping_nearby: nabygeleë karteerders
-      subject: Onderwerp
-      title: Gestuur
       to: Aan
-    read: 
+      subject: Onderwerp
       date: Datum
+      no_sent_messages: U het nog geen boodskappe gestuur nie. Hoekom kontak u nie
+        sommige van die %{people_mapping_nearby_link} nie?
+      people_mapping_nearby: nabygeleë karteerders
+    read:
+      title: Lees boodskap
       from: Van
-      reply_button: Antwoord
       subject: Onderwerp
-      title: Lees boodskap
-      to: Aan
+      date: Datum
+      reply_button: Antwoord
       unread_button: Merk as ongelees
-    sent_message_summary: 
+      to: Aan
+    sent_message_summary:
       delete_button: Verwyder
-  notifier: 
-    diary_comment_notification: 
-      hi: Hallo %{to_user},
-      subject: "[OpenStreetMap] %{user} het kommentaar op u dagboekinskrywing gelewer"
-    email_confirm: 
-      subject: "[OpenStreetMap] Bevestig u e-posadres"
-    email_confirm_html: 
-      click_the_link: As dit u is, kliek op die onderstaande skakel om die verandering te bevestig.
-      greeting: Hallo,
-      hopefully_you: Iemand (hopelik u) wil graag sy e-posadres op %{server_url} verander na %{new_address}.
-    email_confirm_plain: 
-      greeting: Hallo,
-    friend_notification: 
-      subject: "[OpenStreetMap] %{user} het u as 'n vriend bygevoeg"
-    gpx_notification: 
-      and_no_tags: en geen etikette.
-      and_the_tags: "en die volgende etikette:"
-      failure: 
-        more_info_2: "hulle kan gevind word by:"
-      greeting: Hallo,
-      with_description: met die beskrywing
-      your_gpx_file: Dit lyk soos jou GPX-lêer
-    lost_password: 
-      subject: "[OpenStreetMap] Versoek nuwe wagwoord"
-    lost_password_html: 
-      greeting: Hallo,
-    lost_password_plain: 
-      click_the_link: As dit u is, kliek op die onderstaande skakel om die wagwoord te herstel.
-      greeting: Hallo,
-    message_notification: 
-      hi: Hallo %{to_user},
-    signup_confirm: 
-      subject: "[OpenStreetMap] Bevestig u e-posadres"
-  oauth: 
-    oauthorize: 
-      allow_read_prefs: u gebruikersvoorkeure te lees.
-      allow_write_api: die kaart te wysig.
-      allow_write_gpx: Laai GPS-spore op.
-      allow_write_prefs: verander jou gebruikersvoorkeure.
-  oauth_clients: 
-    edit: 
-      submit: Wysig
-      title: Wysig u applikasie
-    form: 
-      allow_read_prefs: lees hulle gebruikersvoorkeure.
-      allow_write_diary: skep dagboekinskrywings, lewer kommentaar en maak vriende.
-      allow_write_prefs: verander hulle gebruikersvoorkeure.
-      name: Naam
-      required: Verplig
-      support_url: Ondersteunings-URL
-      url: Applikasie-URL
-    index: 
-      application: Applikasienaam
-      issued_at: Uitgereik op
-      my_apps: My kliënt-applikasies
-      register_new: Registreer u applikasie
-      revoke: Herroep!
-      title: My OAuth-details
-    new: 
-      submit: Registreer
-      title: Registreer 'n nuwe applikasie
-    not_found: 
-      sorry: Jammer, die %{type} kon nie gevind word nie.
-    show: 
-      allow_read_prefs: lees hulle gebruikersvoorkeure.
-      allow_write_api: wysig die kaart.
-      allow_write_diary: skep dagboekinskrywings, lewer kommentaar en maak vriende.
-      allow_write_gpx: laai GPS-spore op.
-      authorize_url: "URL vir magtiging:"
-      edit: Wysig details
-  site: 
-    edit: 
-      anon_edits_link_text: Lees waarom dit die geval is.
-      user_page_link: gebruikersbladsy
-    index: 
+    mark:
+      as_read: Boodskap gemerk as gelees
+      as_unread: Boodskap gemerk as ongelees
+    delete:
+      deleted: Boodskap is verwyder
+  site:
+    index:
       permalink: Permanente skakel
       shortlink: Kort skakel
-    key: 
-      table: 
-        entry: 
-          admin: Administratiewe grens
-          allotments: Volkstuine
-          apron: 
-            - Lughaweplatform
-            - terminaal
-          bridge: Brug
+    edit:
+      user_page_link: gebruikersbladsy
+      anon_edits_link_text: Lees waarom dit die geval is.
+    sidebar:
+      search_results: Soekresultate
+      close: Sluit
+    search:
+      search: Soek
+      where_am_i: Waar is ek?
+      submit_text: OK
+    key:
+      table:
+        entry:
+          motorway: Snelweg
+          trunk: Trokpad
+          primary: Primêre pad
+          secondary: Sekondêre pad
+          unclassified: Ongeklassifiseerde pad
+          unsurfaced: Grondpad
+          track: Spoor
           bridleway: Ruiterpad
-          brownfield: Braakliggende terrein
-          building: Belangrike gebou
-          cable: 
-            - Kabelkar
-            - stoelhyser
-          cemetery: Begraafplaas
-          centre: Sport-sentrum
-          commercial: Kommersiële gebied
-          common: 
-            - weide
-            - weide
-          construction: Paaie onder konstruksie
           cycleway: Fietspad
-          destination: Bestemmingsverkeer
-          farm: Plaas
           footway: Voetpad
+          rail: Spoorweg
+          subway: Metro
+          tram:
+          - Ligte spoor
+          - tram
+          cable:
+          - Kabelkar
+          - stoelhyser
+          runway:
+          - Lughawe aanloopbaan
+          - taxibaan
+          apron:
+          - Lughaweplatform
+          - terminaal
+          admin: Administratiewe grens
           forest: Bos
+          wood: Bos
           golf: Gholfbaan
-          heathland: Heide
-          industrial: Industriële gebied
-          lake: 
-            - Meer
-            - reservoir
-          military: Militêre gebied
-          motorway: Snelweg
           park: Park
-          permissive: Beperkte toegang
-          pitch: Sportveld
-          primary: Primêre pad
-          private: Privaat toegang
-          rail: Spoorweg
-          reserve: Natuurreservaat
           resident: Woongebied
+          tourist: Toerisme-trekpleister
+          common:
+          - weide
+          - weide
           retail: Winkelgebied
-          runway: 
-            - Lughawe aanloopbaan
-            - taxibaan
-          school: 
-            - Skool
-            - universiteit
-          secondary: Sekondêre pad
+          industrial: Industriële gebied
+          commercial: Kommersiële gebied
+          heathland: Heide
+          lake:
+          - Meer
+          - reservoir
+          farm: Plaas
+          brownfield: Braakliggende terrein
+          cemetery: Begraafplaas
+          allotments: Volkstuine
+          pitch: Sportveld
+          centre: Sport-sentrum
+          reserve: Natuurreservaat
+          military: Militêre gebied
+          school:
+          - Skool
+          - universiteit
+          building: Belangrike gebou
           station: Spoorwegstasie
-          subway: Metro
-          summit: 
-            - Piek
-            - piek
-          tourist: Toerisme-trekpleister
-          track: Spoor
-          tram: 
-            - Ligte spoor
-            - tram
-          trunk: Trokpad
+          summit:
+          - Piek
+          - piek
           tunnel: Tonnel
-          unclassified: Ongeklassifiseerde pad
-          unsurfaced: Grondpad
-          wood: Bos
-    search: 
-      search: Soek
-      submit_text: OK
-      where_am_i: Waar is ek?
-    sidebar: 
-      close: Sluit
-      search_results: Soekresultate
-  time: 
-    formats: 
-      friendly: "%e %B %Y om %H:%M"
-  trace: 
-    create: 
+          bridge: Brug
+          private: Privaat toegang
+          permissive: Beperkte toegang
+          destination: Bestemmingsverkeer
+          construction: Paaie onder konstruksie
+  trace:
+    create:
       upload_trace: Laai GPS-spore op
-    delete: 
-      scheduled_for_deletion: Spoor is geskeduleer vir verwydering
-    edit: 
-      description: "Beskrywing:"
-      download: aflaai
-      edit: wysig
-      filename: "Lêernaam:"
+    edit:
+      title: Wysig spoor %{name}
       heading: Wysig spoor %{name}
+      filename: 'Lêernaam:'
+      download: aflaai
+      uploaded_at: 'Opgelaai op:'
+      points: 'Punte:'
+      start_coord: 'Beginkoördinaat:'
       map: kaart
-      owner: "Eienaar:"
-      points: "Punte:"
-      save_button: Stoor wysigings
-      start_coord: "Beginkoördinaat:"
-      tags: "Etikette:"
+      edit: wysig
+      owner: 'Eienaar:'
+      description: 'Beskrywing:'
+      tags: 'Etikette:'
       tags_help: met kommas geskei
-      title: Wysig spoor %{name}
-      uploaded_at: "Opgelaai op:"
-      visibility: "Sigbaarheid:"
+      save_button: Stoor wysigings
+      visibility: 'Sigbaarheid:'
       visibility_help: wat beteken dit?
-    list: 
-      public_traces: Openbare GPS-spore
-      public_traces_from: Openbare GPS-spore van %{user}
-      tagged_with: geëtiketteer met %{tags}
-      your_traces: U GPS-spore
-    make_public: 
-      made_public: Spoor is openbaar gemaak
-    trace: 
-      ago: "%{time_in_words_ago} gelede"
-      by: deur
-      count_points: "%{count} punte"
-      edit: wysig
-      edit_map: Kaart bewysig
-      identifiable: IDENTIFISEERBAAR
-      in: in
-      map: kaart
-      more: meer
-      pending: BESIG
-      private: PRIVAAT
-      public: OPENBAAR
-      trace_details: Wys spoor besonderhede
-      view_map: Wys kaart
-    trace_form: 
+    trace_form:
+      upload_gpx: Laai GPX-lêer op
       description: Beskrywing
-      help: Hulp
       tags: Etikette
       tags_help: met kommas geskei
-      upload_button: Laai op
-      upload_gpx: Laai GPX-lêer op
       visibility: Sigbaarheid
       visibility_help: wat beteken dit?
-    trace_header: 
+      upload_button: Laai op
+      help: Hulp
+    trace_header:
       see_all_traces: Wys alle spore
       see_your_traces: Sien al u spore
-    trace_optionals: 
+    trace_optionals:
       tags: Etikette
-    trace_paging_nav: 
-      showing_page: Bladsy %{page}
-    view: 
-      delete_track: Verwyder hierdie spoor
-      description: "Beskrywing:"
-      download: laai af
-      edit: wysig
-      edit_track: Wysig hierdie spoor
-      filename: "Lêernaam:"
+    view:
+      title: Besigting spoor %{name}
       heading: Besigtig spoor %{name}
+      pending: BESIG
+      filename: 'Lêernaam:'
+      download: laai af
+      uploaded: 'Opgelaai op:'
+      points: 'Punte:'
+      start_coordinates: 'Beginkoördinaat:'
       map: kaart
+      edit: wysig
+      owner: 'Eienaar:'
+      description: 'Beskrywing:'
+      tags: 'Etikette:'
       none: Geen
-      owner: "Eienaar:"
-      pending: BESIG
-      points: "Punte:"
-      start_coordinates: "Beginkoördinaat:"
-      tags: "Etikette:"
-      title: Besigting spoor %{name}
+      edit_track: Wysig hierdie spoor
+      delete_track: Verwyder hierdie spoor
       trace_not_found: Spoor nie gevind nie!
-      uploaded: "Opgelaai op:"
-      visibility: "Sigbaarheid:"
-  user: 
-    account: 
-      contributor terms: 
-        link text: wat is dit?
-      current email address: "Huidige e-posadres:"
-      email never displayed publicly: (word nie openbaar gemaak nie)
-      flash update success: U gebruikersinligting is verander.
-      home location: "Tuisligging:"
-      image: "Beeld:"
-      latitude: "Breedtegraad:"
-      longitude: "Lengtegraad:"
-      make edits public button: Maak al my wysigings openbaar
-      my settings: My voorkeure
-      new email address: "Nuwe e-posadres:"
-      new image: Voeg beeld by
-      no home location: U het nog nie u huis se ligging ingevoer nie.
-      preferred languages: "Voorkeur tale:"
-      profile description: "Profielbeskrywing:"
-      public editing: 
-        disabled link text: hoekom kan ek niks wysig nie?
-        enabled: Geaktiveer. U is nie anoniem nie en kan inligting wysig.
-        enabled link text: wat is dit?
-        heading: "Openbaar wysigings:"
-      replace image: Vervang die huidige beeld
-      return to profile: Terug na profiel
-      save changes button: Stoor wysigings
-      title: Wysig rekening
-      update home location on click: Opdateer tuisligging wanneer ek op die kaart kliek?
-    confirm: 
-      button: Bevestig
-      heading: Bevestig 'n gebruiker se rekening
-      press confirm button: Kliek op "Bevestig" hieronder om u rekening aktiveer.
-    confirm_email: 
-      button: Bevestig
-      heading: Bevestig verandering van e-posadres
-      success: U e-posadres is bevestig, dankie dat u geregistreer het!
-    list: 
-      confirm: Bevestig geselekteerde gebruikers
-      empty: Geen gebruikers gevind nie
-      heading: Gebruikers
-      hide: Versteek geselekteerde gebruikers
-      summary: "%{name} geskep vanaf %{ip_address} op %{date}"
-      summary_no_ip: "%{name} geskep op %{date}"
-      title: Gebruikers
-    login: 
-      auth failure: Jammer, kon nie met hierdie inligting aanmeld nie.
-      email or username: "E-posadres of gebruikersnaam:"
+      visibility: 'Sigbaarheid:'
+    trace_paging_nav:
+      showing_page: Bladsy %{page}
+    trace:
+      pending: BESIG
+      count_points: '%{count} punte'
+      ago: '%{time_in_words_ago} gelede'
+      more: meer
+      trace_details: Wys spoor besonderhede
+      view_map: Wys kaart
+      edit: wysig
+      edit_map: Kaart bewysig
+      public: OPENBAAR
+      identifiable: IDENTIFISEERBAAR
+      private: PRIVAAT
+      by: deur
+      in: in
+      map: kaart
+    list:
+      public_traces: Openbare GPS-spore
+      your_traces: U GPS-spore
+      public_traces_from: Openbare GPS-spore van %{user}
+      tagged_with: geëtiketteer met %{tags}
+    delete:
+      scheduled_for_deletion: Spoor is geskeduleer vir verwydering
+    make_public:
+      made_public: Spoor is openbaar gemaak
+  oauth:
+    oauthorize:
+      allow_read_prefs: u gebruikersvoorkeure te lees.
+      allow_write_prefs: verander jou gebruikersvoorkeure.
+      allow_write_api: die kaart te wysig.
+      allow_write_gpx: Laai GPS-spore op.
+  oauth_clients:
+    new:
+      title: Registreer 'n nuwe applikasie
+      submit: Registreer
+    edit:
+      title: Wysig u applikasie
+      submit: Wysig
+    show:
+      authorize_url: 'URL vir magtiging:'
+      edit: Wysig details
+      allow_read_prefs: lees hulle gebruikersvoorkeure.
+      allow_write_diary: skep dagboekinskrywings, lewer kommentaar en maak vriende.
+      allow_write_api: wysig die kaart.
+      allow_write_gpx: laai GPS-spore op.
+    index:
+      title: My OAuth-details
+      application: Applikasienaam
+      issued_at: Uitgereik op
+      revoke: Herroep!
+      my_apps: My kliënt-applikasies
+      register_new: Registreer u applikasie
+    form:
+      name: Naam
+      required: Verplig
+      url: Applikasie-URL
+      support_url: Ondersteunings-URL
+      allow_read_prefs: lees hulle gebruikersvoorkeure.
+      allow_write_prefs: verander hulle gebruikersvoorkeure.
+      allow_write_diary: skep dagboekinskrywings, lewer kommentaar en maak vriende.
+    not_found:
+      sorry: Jammer, die %{type} kon nie gevind word nie.
+  user:
+    login:
+      title: Meld aan
       heading: Meld aan
-      login_button: Meld aan
+      email or username: 'E-posadres of gebruikersnaam:'
+      password: 'Wagwoord:'
+      remember: 'Onthou my:'
       lost password link: Wagwoord vergeet?
-      password: "Wagwoord:"
-      remember: "Onthou my:"
-      title: Meld aan
-    logout: 
+      login_button: Meld aan
+      auth failure: Jammer, kon nie met hierdie inligting aanmeld nie.
+    logout:
+      title: Teken af
       heading: Teken van OpenStreetMap af
       logout_button: Teken af
-      title: Teken af
-    lost_password: 
-      email address: "E-posadres:"
+    lost_password:
+      title: Wagwoord vergeet
       heading: Wagwoord vergeet?
+      email address: 'E-posadres:'
       new password button: Herstel wagwoord
       notice email cannot find: Kon nie die e-posadres vind nie, jammer.
-      title: Wagwoord vergeet
-    make_friend: 
-      already_a_friend: U is reeds met %{name} bevriend.
-      failed: Jammer, kon nie %{name} as 'n vriend byvoeg nie.
-      success: "%{name} is nou u vriend."
-    new: 
-      confirm email address: "Bevestig E-posadres:"
-      confirm password: "Bevestig wagwoord:"
-      continue: Gaan voort
-      display name: "Vertoon naam:"
-      email address: "E-posadres:"
-      license_agreement: Deur 'n rekening hier te skep bevestig u dat u akkoord gaan met voorwaarde dat al die werk wat u na OpenStreetMap oplaai onder die <a href="http://creativecommons.org/licenses/by-sa/2.0/deed.af">Creative Commons-lisensie (by-sa)</a> gelisensieer word (nie-eksklusief).
-      not displayed publicly: Word nie publiek vertoon nie (sien <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="wiki-geheimhoudingbeleid insluitend afdeling oor e-posadresse">geheimhoudingbeleid</a>)
-      password: "Wagwoord:"
-      terms accepted: Dankie dat u die nuwe bydraerooreenkoms aanvaar het!
-      title: Skep rekening
-    no_such_user: 
-      body: Daar is geen gebruiker met die naam %{user} nie. Kontroleer u spelling, of die skakel waarop u gekliek het is verkeerd.
-      heading: Die gebruiker %{user} bestaan nie
-      title: Gebruiker bestaan nie
-    popup: 
-      friend: Vriend
-      nearby mapper: Nabygeleë karteerder
-      your location: U ligging
-    remove_friend: 
-      not_a_friend: "%{name} is nie een van u vriende nie."
-      success: "%{name} is uit u lys van vriende verwyder."
-    reset_password: 
-      confirm password: "Bevestig wagwoord:"
-      flash changed: U wagwoord is verander.
+    reset_password:
+      title: Herstel wagwoord
       heading: Herstel wagwoord vir %{user}
-      password: "Wagwoord:"
+      password: 'Wagwoord:'
+      confirm password: 'Bevestig wagwoord:'
       reset: Kry nuwe wagwoord
-      title: Herstel wagwoord
-    set_home: 
-      flash success: U tuisligging is suksesvol gebêre
-    suspended: 
-      webmaster: webmeester
-    terms: 
+      flash changed: U wagwoord is verander.
+    new:
+      title: Skep rekening
+      license_agreement: Deur 'n rekening hier te skep bevestig u dat u akkoord gaan
+        met voorwaarde dat al die werk wat u na OpenStreetMap oplaai onder die <a
+        href="http://creativecommons.org/licenses/by-sa/2.0/deed.af">Creative Commons-lisensie
+        (by-sa)</a> gelisensieer word (nie-eksklusief).
+      email address: 'E-posadres:'
+      confirm email address: 'Bevestig E-posadres:'
+      not displayed publicly: Word nie publiek vertoon nie (sien <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
+        title="wiki-geheimhoudingbeleid insluitend afdeling oor e-posadresse">geheimhoudingbeleid</a>)
+      display name: 'Vertoon naam:'
+      password: 'Wagwoord:'
+      confirm password: 'Bevestig wagwoord:'
+      continue: Gaan voort
+      terms accepted: Dankie dat u die nuwe bydraerooreenkoms aanvaar het!
+    terms:
+      title: Bydraerooreenkoms
+      heading: Voorwaardes vir bydraes
       agree: Aanvaar
       decline: Weier
-      heading: Voorwaardes vir bydraes
-      legale_names: 
+      legale_names:
         france: Frankryk
         italy: Italië
         rest_of_world: Res van die wêreld
-      title: Bydraerooreenkoms
-    view: 
-      activate_user: aktiveer hierdie gebruiker
-      add as friend: voeg by as vriend
-      ago: (%{time_in_words_ago} gelede)
-      block_history: wys blokkades ontvang
-      blocks by me: blokkades deur my
-      blocks on me: blokkades op my
-      confirm: Bevestig
-      confirm_user: bevestig hierdie gebruiker
-      create_block: blokkeer die gebruiker
-      created from: "Geskep vanaf:"
-      deactivate_user: deaktiveer hierdie gebruiker
-      delete_user: skrap die gebruiker
-      description: Beskrywing
-      diary: dagboek
-      edits: wysigings
-      email address: "E-posadres:"
-      hide_user: versteek hierdie gebruiker
-      if set location: As u u ligging stel, sal 'n pragtige kaart en ander inligting hieronder verskyn. U kan u ligging stel in u %{settings_link}.
-      km away: "%{count}km vêr"
-      m away: "%{count}m vêr"
-      mapper since: "Karteer sedert:"
-      moderator_history: wys blokkades uitgedeel
+    no_such_user:
+      title: Gebruiker bestaan nie
+      heading: Die gebruiker %{user} bestaan nie
+      body: Daar is geen gebruiker met die naam %{user} nie. Kontroleer u spelling,
+        of die skakel waarop u gekliek het is verkeerd.
+    view:
       my diary: my dagboek
+      new diary entry: nuwe dagboekinskrywing
       my edits: my wysigings
-      my settings: my voorkeure
       my traces: my spore
-      nearby users: Ander nabygeleë gebruikers
-      new diary entry: nuwe dagboekinskrywing
-      no friends: U het nog geen vriende bygevoeg nie.
-      no nearby users: Daar is nog geen gebruikers wat herken dat hulle nabygeleë karterinswerk doen nie.
+      my settings: my voorkeure
       oauth settings: Oauth-instellings
+      blocks on me: blokkades op my
+      blocks by me: blokkades deur my
+      send message: stuur boodskap
+      diary: dagboek
+      edits: wysigings
+      traces: spore
       remove as friend: verwyder as vriend
-      role: 
+      add as friend: voeg by as vriend
+      mapper since: 'Karteer sedert:'
+      ago: (%{time_in_words_ago} gelede)
+      email address: 'E-posadres:'
+      created from: 'Geskep vanaf:'
+      status: 'Status:'
+      spam score: 'SPAM-telling:'
+      description: Beskrywing
+      user location: Ligging van gebruiker
+      if set location: As u u ligging stel, sal 'n pragtige kaart en ander inligting
+        hieronder verskyn. U kan u ligging stel in u %{settings_link}.
+      settings_link_text: voorkeure
+      your friends: U vriende
+      no friends: U het nog geen vriende bygevoeg nie.
+      km away: '%{count}km vêr'
+      m away: '%{count}m vêr'
+      nearby users: Ander nabygeleë gebruikers
+      no nearby users: Daar is nog geen gebruikers wat herken dat hulle nabygeleë
+        karterinswerk doen nie.
+      role:
         administrator: Hierdie gebruiker is 'n administrateur
-        grant: 
+        moderator: Hierdie gebruiker is 'n moderator
+        grant:
           administrator: Trek adminregte terug
           moderator: Ken moderatorregte toe
-        moderator: Hierdie gebruiker is 'n moderator
-        revoke: 
+        revoke:
           administrator: Trek adminregte terug
           moderator: Trek moderatorregte terug
-      send message: stuur boodskap
-      settings_link_text: voorkeure
-      spam score: "SPAM-telling:"
-      status: "Status:"
-      traces: spore
+      block_history: wys blokkades ontvang
+      moderator_history: wys blokkades uitgedeel
+      create_block: blokkeer die gebruiker
+      activate_user: aktiveer hierdie gebruiker
+      deactivate_user: deaktiveer hierdie gebruiker
+      confirm_user: bevestig hierdie gebruiker
+      hide_user: versteek hierdie gebruiker
       unhide_user: maak die gebruiker weer sigbaar
-      user location: Ligging van gebruiker
-      your friends: U vriende
-  user_block: 
-    blocks_by: 
-      empty: "%{name} het nog geen blokkades uitgevoer nie."
-      heading: Lys van blokkades deur %{name}
-      title: Blokkades deur %{name}
-    blocks_on: 
-      empty: "%{name} is nog nooit geblokkeer nie."
-      heading: Lys van blokkades teen %{name}
-      title: Blokkades vir %{name}
-    create: 
-      flash: Het gebruiker %{name} geblokkeer.
-      try_contacting: Kontak asseblief die gebruiker en gee hom 'n redelike tyd om te reageer alvorens u hom blokkeer.
-      try_waiting: Gee die gebruikers asseblief 'n redelike tyd om te reageer voordat u 'n blokkade instel.
-    edit: 
+      delete_user: skrap die gebruiker
+      confirm: Bevestig
+    popup:
+      your location: U ligging
+      nearby mapper: Nabygeleë karteerder
+      friend: Vriend
+    account:
+      title: Wysig rekening
+      my settings: My voorkeure
+      current email address: 'Huidige e-posadres:'
+      new email address: 'Nuwe e-posadres:'
+      email never displayed publicly: (word nie openbaar gemaak nie)
+      public editing:
+        heading: 'Openbaar wysigings:'
+        enabled: Geaktiveer. U is nie anoniem nie en kan inligting wysig.
+        enabled link text: wat is dit?
+        disabled link text: hoekom kan ek niks wysig nie?
+      contributor terms:
+        link text: wat is dit?
+      profile description: 'Profielbeskrywing:'
+      preferred languages: 'Voorkeur tale:'
+      image: 'Beeld:'
+      new image: Voeg beeld by
+      replace image: Vervang die huidige beeld
+      home location: 'Tuisligging:'
+      no home location: U het nog nie u huis se ligging ingevoer nie.
+      latitude: 'Breedtegraad:'
+      longitude: 'Lengtegraad:'
+      update home location on click: Opdateer tuisligging wanneer ek op die kaart
+        kliek?
+      save changes button: Stoor wysigings
+      make edits public button: Maak al my wysigings openbaar
+      return to profile: Terug na profiel
+      flash update success: U gebruikersinligting is verander.
+    confirm:
+      heading: Bevestig 'n gebruiker se rekening
+      press confirm button: Kliek op "Bevestig" hieronder om u rekening aktiveer.
+      button: Bevestig
+    confirm_email:
+      heading: Bevestig verandering van e-posadres
+      button: Bevestig
+      success: U e-posadres is bevestig, dankie dat u geregistreer het!
+    set_home:
+      flash success: U tuisligging is suksesvol gebêre
+    make_friend:
+      success: '%{name} is nou u vriend.'
+      failed: Jammer, kon nie %{name} as 'n vriend byvoeg nie.
+      already_a_friend: U is reeds met %{name} bevriend.
+    remove_friend:
+      success: '%{name} is uit u lys van vriende verwyder.'
+      not_a_friend: '%{name} is nie een van u vriende nie.'
+    list:
+      title: Gebruikers
+      heading: Gebruikers
+      summary: '%{name} geskep vanaf %{ip_address} op %{date}'
+      summary_no_ip: '%{name} geskep op %{date}'
+      confirm: Bevestig geselekteerde gebruikers
+      hide: Versteek geselekteerde gebruikers
+      empty: Geen gebruikers gevind nie
+    suspended:
+      webmaster: webmeester
+  user_role:
+    grant:
+      title: Bevestig toekenning van rol
+      heading: Bevestig toekenning van rol
+      confirm: Bevestig
+    revoke:
+      title: Bevestig herroeping van rol
+      heading: Bevestig herroeping van rol
+      confirm: Bevestig
+  user_block:
+    not_found:
+      sorry: Jammer, die gebruiker met ID %{id} kon nie gevind word nie.
+      back: Terug na die indeks
+    new:
+      heading: Skep blokkade op %{name}
+      submit: Skep blokkade
       back: Wys alle blokkades
+    edit:
+      title: Wysig blokkade op %{name}
       heading: Wysig blokkade op %{name}
-      show: Wys hierdie blokkade
       submit: Opdateer blokkade
-      title: Wysig blokkade op %{name}
-    helper: 
-      time_future: Verval oor %{time}.
-      time_past: Het %{time} gelede verval.
-      until_login: Aktief totdat die gebruiker aanmeld.
-    index: 
-      empty: Daar is nog geen blokkades ingestel nie.
-      heading: Lys van gebruikersblokkades
-      title: Gebruikersblokkades
-    new: 
+      show: Wys hierdie blokkade
       back: Wys alle blokkades
-      heading: Skep blokkade op %{name}
-      submit: Skep blokkade
-    not_found: 
-      back: Terug na die indeks
-      sorry: Jammer, die gebruiker met ID %{id} kon nie gevind word nie.
-    partial: 
-      confirm: Is u seker?
-      creator_name: Skepper
-      display_name: Geblokkeerde gebruiker
-      edit: Wysig
-      not_revoked: (nie herroep nie)
-      reason: Rede vir blokkade
-      revoke: Terugtrek
-      revoker_name: Teruggetrek deur
-      show: Wys
-      status: Status
-    period: 
-      one: 1 uur
-      other: "%{count} ure"
-    revoke: 
+    create:
+      try_contacting: Kontak asseblief die gebruiker en gee hom 'n redelike tyd om
+        te reageer alvorens u hom blokkeer.
+      try_waiting: Gee die gebruikers asseblief 'n redelike tyd om te reageer voordat
+        u 'n blokkade instel.
+      flash: Het gebruiker %{name} geblokkeer.
+    update:
+      success: Die blokkade is opgedateer.
+    index:
+      title: Gebruikersblokkades
+      heading: Lys van gebruikersblokkades
+      empty: Daar is nog geen blokkades ingestel nie.
+    revoke:
       confirm: Is u seker u wil hierdie blokkade terugtrek?
-      flash: Hierdie blokkade is teruggetrek.
       revoke: Terugtrek
-    show: 
-      back: Wys alle blokkades
-      confirm: Is u seker?
+      flash: Hierdie blokkade is teruggetrek.
+    period:
+      one: 1 uur
+      other: '%{count} ure'
+    partial:
+      show: Wys
       edit: Wysig
-      heading: "%{block_on} geblokkeer deur %{block_by}"
-      needs_view: Die gebruiker moet aanmeld alvorens hierdie blokkade verwyder sal word.
-      reason: "Rede vir blokkade:"
       revoke: Terugtrek
-      revoker: "Teruggetrek deur:"
-      show: Wys
+      confirm: Is u seker?
+      display_name: Geblokkeerde gebruiker
+      creator_name: Skepper
+      reason: Rede vir blokkade
       status: Status
+      revoker_name: Teruggetrek deur
+      not_revoked: (nie herroep nie)
+    helper:
+      time_future: Verval oor %{time}.
+      until_login: Aktief totdat die gebruiker aanmeld.
+      time_past: Het %{time} gelede verval.
+    blocks_on:
+      title: Blokkades vir %{name}
+      heading: Lys van blokkades teen %{name}
+      empty: '%{name} is nog nooit geblokkeer nie.'
+    blocks_by:
+      title: Blokkades deur %{name}
+      heading: Lys van blokkades deur %{name}
+      empty: '%{name} het nog geen blokkades uitgevoer nie.'
+    show:
+      title: '%{block_on} geblokkeer deur %{block_by}'
+      heading: '%{block_on} geblokkeer deur %{block_by}'
       time_future: Verval oor %{time}
       time_past: Het %{time} gelede verval
-      title: "%{block_on} geblokkeer deur %{block_by}"
-    update: 
-      success: Die blokkade is opgedateer.
-  user_role: 
-    grant: 
-      confirm: Bevestig
-      heading: Bevestig toekenning van rol
-      title: Bevestig toekenning van rol
-    revoke: 
-      confirm: Bevestig
-      heading: Bevestig herroeping van rol
-      title: Bevestig herroeping van rol
+      status: Status
+      show: Wys
+      edit: Wysig
+      revoke: Terugtrek
+      confirm: Is u seker?
+      reason: 'Rede vir blokkade:'
+      back: Wys alle blokkades
+      revoker: 'Teruggetrek deur:'
+      needs_view: Die gebruiker moet aanmeld alvorens hierdie blokkade verwyder sal
+        word.
+  javascripts:
+    map:
+      base:
+        cycle_map: Fietskaart
+...
index d6ac17cf642180961691e9f156a2f0bdca1ef404..3e852d4517ab20885c4a6786c88f31881dafdc94 100644 (file)
@@ -1,6 +1,6 @@
 # Messages for Gheg Albanian (Gegë)
 # Exported from translatewiki.net
-# Export driver: syck-pecl
+# Export driver: phpyaml
 # Author: Albiona
 # Author: Alket
 # Author: Ardian
 # Author: MicroBoy
 # Author: Nemo bis
 # Author: 아라
-aln: 
-  activerecord: 
-    attributes: 
-      diary_comment: 
-        body: Organ
-      diary_entry: 
-        language: Gjuha
-        latitude: Gjerësi
-        longitude: Gjatësi
-        title: Titulli
-        user: Përdorues
-      friend: 
-        friend: Mik
-        user: Përdorues
-      message: 
-        body: Organ
-        recipient: Marrës
-        sender: Dërguesi
-        title: Titulli
-      trace: 
-        description: Përshkrim
-        latitude: Gjerësi
-        longitude: Gjatësi
-        name: Emni
-        public: Publik
-        size: Madhësia
-        user: Përdorues
-        visible: I dukshëm
-      user: 
-        active: Aktiv
-        description: Përshkrimi
-        display_name: Emri Display
-        email: Email
-        languages: Gjuhët
-        pass_crypt: Fjalëkalimi
-    models: 
+---
+aln:
+  time:
+    formats:
+      friendly: '%e %B %Y te %H:%M'
+  activerecord:
+    models:
       acl: Lista Access Control
       changeset: Changeset
       changeset_tag: Changeset Tag
@@ -80,191 +51,202 @@ aln:
       way: Mënyrë
       way_node: Nyja Way
       way_tag: Rruga Tag
-  application: 
-    require_cookies: 
-      cookies_needed: Ju duket se kanë cookies aftësi të kufizuara - ju lutemi aktivizoni cookies në browserin tuaj para se të vazhdoni.
-    setup_user_auth: 
-      blocked: qasja juaj në API është bllokuar. Ju lutemi të log-in për ndërfaqe web për të mësuar më shumë.
-  browse: 
-    changeset: 
+    attributes:
+      diary_comment:
+        body: Organ
+      diary_entry:
+        user: Përdorues
+        title: Titulli
+        latitude: Gjerësi
+        longitude: Gjatësi
+        language: Gjuha
+      friend:
+        user: Përdorues
+        friend: Mik
+      trace:
+        user: Përdorues
+        visible: I dukshëm
+        name: Emni
+        size: Madhësia
+        latitude: Gjerësi
+        longitude: Gjatësi
+        public: Publik
+        description: Përshkrim
+      message:
+        sender: Dërguesi
+        title: Titulli
+        body: Organ
+        recipient: Marrës
+      user:
+        email: Email
+        active: Aktiv
+        display_name: Emri Display
+        description: Përshkrimi
+        languages: Gjuhët
+        pass_crypt: Fjalëkalimi
+  browse:
+    changeset:
+      title: Ndryshim
       changesetxml: Ndryshim en XML
-      feed: 
+      osmchangexml: Ndryshim i OSM-s en XML
+      feed:
         title: Ndryshim %{id}
         title_comment: Ndryshimi %{id} - %{comment}
-      osmchangexml: Ndryshim i OSM-s en XML
-      title: Ndryshim
-    containing_relation: 
+    relation_member:
+      entry_role: '%{type} %{name} asht si %{role}'
+      type:
+        node: Nyje
+        way: Udhë
+        relation: Lidhje
+    containing_relation:
       entry: Lidhja %{relation_name}
       entry_role: Lidhja %{relation_name} (sikur %{relation_role})
-    not_found: 
+    not_found:
       sorry: Na vjen keq, %{type} me ID %{id}, nuk mujti me u gjetë.
-      type: 
+      type:
+        node: pikë
+        way: udhë
+        relation: lidhje
         changeset: shka asht ndrrue
+    timeout:
+      sorry: Kerkojme falje, t'dhanunat për %{type} me %{id}, u vanuen shumë për me
+        u rigjetë.
+      type:
         node: pikë
+        way: rrugë
         relation: lidhje
-        way: udhë
-    relation_member: 
-      entry_role: "%{type} %{name} asht si %{role}"
-      type: 
-        node: Nyje
-        relation: Lidhje
-        way: Udhë
-    start_rjs: 
+        changeset: shka asht ndryshue
+    start_rjs:
       load_data: Ngarkoji të dhanunat
       loading: Tu u ngarkue...
-    tag_details: 
-      tags: "Etiketat:"
-      wiki_link: 
+    tag_details:
+      tags: 'Etiketat:'
+      wiki_link:
         key: Pērshkrimi i wiki faqes pēr %{key} tag
         tag: Pērshkrimi i wiki faqes pēr %{key}=%{value} tag
-      wikipedia_link: "%{page} artikulli nē Wikipedia"
-    timeout: 
-      sorry: Kerkojme falje, t'dhanunat për %{type} me %{id}, u vanuen shumë për me u rigjetë.
-      type: 
-        changeset: shka asht ndryshue
-        node: pikë
-        relation: lidhje
-        way: rrugë
-  changeset: 
-    changeset: 
+      wikipedia_link: '%{page} artikulli nē Wikipedia'
+  changeset:
+    changeset_paging_nav:
+      showing_page: Tu e shfaq faqen %{page}
+      next: Tjetra »
+      previous: «Previous
+    changeset:
       anonymous: Anonim
       no_edits: (Nuk ka redaktimet)
       view_changeset_details: Shikoni detajet changeset
-    changeset_paging_nav: 
-      next: Tjetra »
-      previous: «Previous
-      showing_page: Tu e shfaq faqen %{page}
-    changesets: 
-      area: Zonë
-      comment: Koment
+    changesets:
       id: ID
       saved_at: Ruhen në
       user: Përdorues
-    list: 
+      comment: Koment
+      area: Zonë
+    list:
       title: Changesets
       title_user: Changesets nga %{user}
-  diary_entry: 
-    diary_comment: 
-      comment_from: Komenti prej %{link_user} në %{comment_created_at}
-      confirm: Konfirmo
-      hide_link: Mshefe këtë koment
-    diary_entry: 
-      comment_count: 
-        one: 1 koment
-        other: "%{count} komente"
-      comment_link: Komento në këtë shënim
-      confirm: Konfirmoje
-      edit_link: Ndryshoje qët shënim
-      hide_link: Mshefe qët shënim
-      posted_by: U postu prej %{link_user} më %{created} n'%{language_link}
-      reply_link: Përgjigje për këtë term
-    edit: 
-      body: "Trupi:"
-      language: "Gjuha:"
-      latitude: "Latitude:"
-      location: "Lokacioni:"
-      longitude: "Gjatësi:"
-      marker_text: Vendndodhja Ditari hyrje
-      save_button: Ruje
-      subject: "Titulli:"
-      title: hyrje Edit ditar
-      use_map_link: Harta e përdorimit
-    feed: 
-      all: 
-        description: Shënimet mat fundit të ditarit nga anëtarët e OpenStreetMap
-        title: hyra OpenStreetMap ditar
-      language: 
-        description: shënimeve ditar nga përdoruesit e fundit të OpenStreetMap në %{language_name}
-        title: shënimet në ditar OpenStreetMap në %{language_name}
-      user: 
-        description: shënimet e fundit OpenStreetMap ditar nga %{user}
-        title: hyra OpenStreetMap ditar për %{user}
-    list: 
+  diary_entry:
+    new:
+      title: Hyrja e re Ditari
+    list:
+      title: ditarë Përdorues ,
+      user_title: Ditari i %{user}
       in_language_title: Shënimet e Ditarit në %{language}
       new: Hyrja e re Ditari
       new_title: Shkruaj një hyrje e re në ditarin tuaj përdorues
-      newer_entries: Shënimet Ma Të Reja
       no_entries: Nuk ka shënime në ditar
+      recent_entries: 'shënimet e fundit ditar:'
       older_entries: Shënimet e Vjetra
-      recent_entries: "shënimet e fundit ditar:"
-      title: ditarë Përdorues ,
-      user_title: Ditari i %{user}
-    location: 
-      edit: Ndrysho
-      location: "Lokacioni:"
-      view: Kshyre
-    new: 
-      title: Hyrja e re Ditari
-    no_such_entry: 
-      body: Me na fal, por nuk ka shënim në ditar ose koment me id %{id}. Ju lutem shihni drejtshkrimin, ose lidhja që keni kliku asht gabim.
-      heading: "Nuk ka shënim me id: %{id}"
-      title: Nuk ka hyrje të tilla ditar
-    view: 
-      leave_a_comment: Lene naj koment
-      login: Hyrje
-      login_to_leave_a_comment: "%{login_link} për me lon koment"
+      newer_entries: Shënimet Ma Të Reja
+    edit:
+      title: hyrje Edit ditar
+      subject: 'Titulli:'
+      body: 'Trupi:'
+      language: 'Gjuha:'
+      location: 'Lokacioni:'
+      latitude: 'Latitude:'
+      longitude: 'Gjatësi:'
+      use_map_link: Harta e përdorimit
       save_button: Ruje
+      marker_text: Vendndodhja Ditari hyrje
+    view:
       title: ditari i %{user} | %{title}
       user_title: ditari i %{user}
-  export: 
-    start: 
-      add_marker: Shto ni shenues en harte
+      leave_a_comment: Lene naj koment
+      login_to_leave_a_comment: '%{login_link} për me lon koment'
+      login: Hyrje
+      save_button: Ruje
+    no_such_entry:
+      title: Nuk ka hyrje të tilla ditar
+      heading: 'Nuk ka shënim me id: %{id}'
+      body: Me na fal, por nuk ka shënim në ditar ose koment me id %{id}. Ju lutem
+        shihni drejtshkrimin, ose lidhja që keni kliku asht gabim.
+    diary_entry:
+      posted_by: U postu prej %{link_user} më %{created} n'%{language_link}
+      comment_link: Komento në këtë shënim
+      reply_link: Përgjigje për këtë term
+      comment_count:
+        one: 1 koment
+        other: '%{count} komente'
+      edit_link: Ndryshoje qët shënim
+      hide_link: Mshefe qët shënim
+      confirm: Konfirmoje
+    diary_comment:
+      comment_from: Komenti prej %{link_user} në %{comment_created_at}
+      hide_link: Mshefe këtë koment
+      confirm: Konfirmo
+    location:
+      location: 'Lokacioni:'
+      view: Kshyre
+      edit: Ndrysho
+    feed:
+      user:
+        title: hyra OpenStreetMap ditar për %{user}
+        description: shënimet e fundit OpenStreetMap ditar nga %{user}
+      language:
+        title: shënimet në ditar OpenStreetMap në %{language_name}
+        description: shënimeve ditar nga përdoruesit e fundit të OpenStreetMap në
+          %{language_name}
+      all:
+        title: hyra OpenStreetMap ditar
+        description: Shënimet mat fundit të ditarit nga anëtarët e OpenStreetMap
+  export:
+    start:
       area_to_export: Zona për Eksport
-      embeddable_html: HTML e trupzueshme
-      export_button: Eksporto
-      export_details: T'dhanat e OpenStreetMap jan te licensume nën <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons Attribution-ShareAlike 2.0 license</a>.
-      format: Formati
+      manually_select: Manualisht zgedhe ni zon te ndryshme
       format_to_export: Formati për Eksport
-      image_size: Madhsia e Imazhit
-      latitude: "Lat:"
+      osm_xml_data: OpenStreetMap XML të dhana
+      embeddable_html: HTML e trupzueshme
       licence: Licensa
-      longitude: "Lon:"
-      manually_select: Manualisht zgedhe ni zon te ndryshme
-      max: maks
+      export_details: T'dhanat e OpenStreetMap jan te licensume nën <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
+        Commons Attribution-ShareAlike 2.0 license</a>.
+      too_large:
+        body: Kjo zonë është shum e madhe që të eksportohet si XML në OpenStreetMap.
+          Të lutna afroje ma ngat ose mere një zonë ma të vogel.
       options: Opcionet
-      osm_xml_data: OpenStreetMap XML të dhana
-      output: Outputi
-      paste_html: Fute HTML për me ngjit në web sajt
+      format: Formati
       scale: Shkallë
-      too_large: 
-        body: Kjo zonë është shum e madhe që të eksportohet si XML në OpenStreetMap. Të lutna afroje ma ngat ose mere një zonë ma të vogel.
+      max: maks
+      image_size: Madhsia e Imazhit
       zoom: Zmadho
-  geocoder: 
-    description: 
-      title: 
-        geonames: Lokacioni prej <a href="http://www.geonames.org/">GeoNames</a>
-        osm_nominatim: Lokacioni prej <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>
-      types: 
-        cities: Qytetet
-        places: Places
-        towns: Qytetet
-    direction: 
-      east: lindja
-      north: veriu
-      north_east: veri-lindje
-      north_west: veri-perendim
-      south: jug
-      south_east: jug-lindje
-      south_west: jug-perëndim
-      west: perëndim
-    distance: 
-      one: rreth 1km
-      other: rreth %{count}km
-      zero: ma pak se 1km
-    results: 
-      more_results: Më shumë rezultate
-      no_results: Nuk është gjetur asnjë rezultat
-    search: 
-      title: 
-        ca_postcode: Rezultatet prej <a href="http://geocoder.ca/">Geocoder.CA</a>
-        geonames: Rezultatet prej <a href="http://www.geonames.org/">GeoNames</a>
+      add_marker: Shto ni shenues en harte
+      latitude: 'Lat:'
+      longitude: 'Lon:'
+      output: Outputi
+      paste_html: Fute HTML për me ngjit në web sajt
+      export_button: Eksporto
+  geocoder:
+    search:
+      title:
         latlon: Rezultatet prej <a href="http://openstreetmap.org/">Internal</a>
-        osm_nominatim: Rezultatet prej <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>
-        uk_postcode: Rezultatet prej <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>
         us_postcode: Rezultatet prej <a href="http://geocoder.us/">Geocoder.us</a>
-    search_osm_nominatim: 
-      prefix: 
-        amenity: 
+        uk_postcode: Rezultatet prej <a href="http://www.npemap.org.uk/">NPEMap /
+          FreeThe Postcode</a>
+        ca_postcode: Rezultatet prej <a href="http://geocoder.ca/">Geocoder.CA</a>
+        osm_nominatim: Rezultatet prej <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+          Nominatim</a>
+        geonames: Rezultatet prej <a href="http://www.geonames.org/">GeoNames</a>
+    search_osm_nominatim:
+      prefix:
+        amenity:
           airport: Airoport
           arts_centre: Art Qendra
           atm: Bankomat
@@ -355,11 +337,11 @@ aln:
           waste_basket: Mbeturinat Shporta
           wifi: WiFi Hyrje
           youth_centre: Qendër Rinore
-        boundary: 
+        boundary:
           administrative: Administrative kufitare
-        building: 
+        building:
           "yes": Ndërtesë
-        highway: 
+        highway:
           bridleway: Rruge pa osfallt
           bus_guideway: Lane udhëzoi Autobuseve
           bus_stop: Stacion i autobusave
@@ -395,7 +377,7 @@ aln:
           trunk_link: rrugën kryesore
           unclassified: Paklasifikuara Road
           unsurfaced: Rrugë pa sipërfaqe
-        historic: 
+        historic:
           archaeological_site: Arkeologjik Faqes
           battlefield: Fushë beteje
           boundary_stone: Kufitare Stone
@@ -414,7 +396,7 @@ aln:
           wayside_cross: Buzë rruge Kryqi
           wayside_shrine: Buzë rruge tempullin
           wreck: Mbytet
-        landuse: 
+        landuse:
           allotments: Ndarje
           basin: Pellgut
           brownfield: Brownfield Toka
@@ -446,7 +428,7 @@ aln:
           vineyard: Vresht
           wetland: Ligatinore
           wood: Druri
-        leisure: 
+        leisure:
           beach_resort: hoteli në plazh
           common: Toke e njejte
           fishing: Zone peshkimi
@@ -466,7 +448,7 @@ aln:
           swimming_pool: Bazen
           track: traka e vrapimit
           water_park: Park uji
-        natural: 
+        natural:
           bay: Gji
           beach: Pllazh
           cape: Kep
@@ -504,7 +486,7 @@ aln:
           wetland: Lagunat
           wetlands: Lagunat
           wood: Dru
-        place: 
+        place:
           airport: Aeroport
           city: Qyteti
           country: Veni
@@ -527,7 +509,7 @@ aln:
           town: Veni
           unincorporated_area: Zone e painkorpuruar
           village: Fshati
-        railway: 
+        railway:
           abandoned: Braktisur hekurudhave
           construction: Hekurudhave në ndërtim
           disused: Hekurudhave papërdorur
@@ -550,7 +532,7 @@ aln:
           tram: Tramvajëve
           tram_stop: Tramvaj Stop
           yard: depo stacioni hekurudhor
-        shop: 
+        shop:
           alcohol: kiosk
           art: Shitore e kafshëve
           bakery: Dyqan buke
@@ -618,7 +600,7 @@ aln:
           travel_agency: Agjenci Turistike
           video: dyqan video
           wine: kiosk
-        tourism: 
+        tourism:
           alpine_hut: Vikendice
           artwork: Puna artistike
           attraction: Qef
@@ -639,7 +621,7 @@ aln:
           valley: Lugine
           viewpoint: Pike shikimi
           zoo: Kopsht Zoologjik
-        waterway: 
+        waterway:
           boatyard: Kantier detar
           canal: Kanal
           connector: lidhës lumë i lundrueshëm
@@ -657,709 +639,881 @@ aln:
           riverbank: banka e lumit
           stream: Lumë
           wadi: luginë
-          water_point: Pika e ujit
           waterfall: Ujëvarë
+          water_point: Pika e ujit
           weir: Pendë
-  javascripts: 
-    map: 
-      base: 
-        cycle_map: Cikli Harta
-    site: 
-      edit_disabled_tooltip: Zoom në hartë për të redaktuar
-      edit_tooltip: Edit Harta
-  layouts: 
-    copyright: Copyright & License
-    donate: OpenStreetMap Mbështetja nga %{link} në Fondin Hardware Upgrade.
-    edit: Ndrysho
-    export: Eksport
-    gps_traces: GPS Gjurmët
-    gps_traces_tooltip: Manage gjurmë GPS
-    history: Historia
+    description:
+      title:
+        osm_nominatim: Lokacioni prej <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+          Nominatim</a>
+        geonames: Lokacioni prej <a href="http://www.geonames.org/">GeoNames</a>
+      types:
+        cities: Qytetet
+        towns: Qytetet
+        places: Places
+    results:
+      no_results: Nuk është gjetur asnjë rezultat
+      more_results: Më shumë rezultate
+    distance:
+      one: rreth 1km
+      zero: ma pak se 1km
+      other: rreth %{count}km
+    direction:
+      south_west: jug-perëndim
+      south: jug
+      south_east: jug-lindje
+      east: lindja
+      north_east: veri-lindje
+      north: veriu
+      north_west: veri-perendim
+      west: perëndim
+  layouts:
+    logo:
+      alt_text: logo e OpenStreetMap
     home: shtëpi
+    logout: logout
     log_in: log in
     log_in_tooltip: Hyni që me një llogari ekzistuese
-    logo: 
-      alt_text: logo e OpenStreetMap
-    logout: logout
-    make_a_donation: 
-      text: Bëni një donacion
-      title: OpenStreetMap Mbështetje me një donacion monetar
-    osm_offline: Baza e të dhanave të OpenStreetMap niher për niher jasht funksioni derisa disa punë themelore po kryhen në bazën e të dhanave.
-    osm_read_only: Baza e të dhënave OpenStreetMap është aktualisht në mënyrë read-only ndërsa thelbësor bazës së të dhënave mirëmbajtjen puna është kryer.
     sign_up: regjistrohu
     sign_up_tooltip: Krijo një llogari për përpunim
-    tag_line: Free Harta Wiki Botërore
+    edit: Ndrysho
+    history: Historia
+    export: Eksport
+    gps_traces: GPS Gjurmët
+    gps_traces_tooltip: Manage gjurmë GPS
     user_diaries: Përdoruesi Diaries
     user_diaries_tooltip: përdorues ditaret Shiko
-  license_page: 
-    foreign: 
-      english_link: origjinal anglisht
-      text: Në ni ngjarje të ni konflikti me faqen e përkthyme dhe %{english_original_link}, faqja anglisht ka përparsi
+    tag_line: Free Harta Wiki Botërore
+    osm_offline: Baza e të dhanave të OpenStreetMap niher për niher jasht funksioni
+      derisa disa punë themelore po kryhen në bazën e të dhanave.
+    osm_read_only: Baza e të dhënave OpenStreetMap është aktualisht në mënyrë read-only
+      ndërsa thelbësor bazës së të dhënave mirëmbajtjen puna është kryer.
+    donate: OpenStreetMap Mbështetja nga %{link} në Fondin Hardware Upgrade.
+    copyright: Copyright & License
+    make_a_donation:
+      title: OpenStreetMap Mbështetje me një donacion monetar
+      text: Bëni një donacion
+  license_page:
+    foreign:
       title: Rreth kti përkthimi
-    legal_babble: 
-      contributors_ca_html: "<strong> Kanada </ strong>: Përmban të dhëna nga\n   GeoBase ®, GeoGratis (© Departamenti i Natyrore\n   Burimet Kanada), CanVec (Departamenti i Natyrore ©\n   Burimet Kanada), dhe StatCan (Divizioni Gjeografia,\n   Statistika Kanada)."
-      contributors_footer_2_html: "  Përfshirja e të dhënave në OpenStreetMap nuk do të thotë që origjinal\n  dhënave miraton ofrues OpenStreetMap, ofron çdo garanci ose\n  pranon ndonjë përgjegjësi."
-      contributors_gb_html: "<strong> Mbretëria e Bashkuar </ strong>: Përmban të pajisjeve\n   Anketa të dhënat © Crown copyright bazës së të dhënave dhe të drejtë\n   2010."
-      contributors_intro_html: "licencë CC BY-SA jonë kërkon që ju të \"japin origjinal\n  Author kredi të arsyeshme për të mesëm ose të thotë Ti je\n  shfrytëzuar \". Individuale mappers OSM nuk kërkojnë një\n  kreditit mbi dhe më lart që të \"OpenStreetMap\n  kontribuesit \", por kur të dhënat nga një hartës kombëtare\n  agjenci ose burim kryesor ka qenë i përfshirë në\n  OpenStreetMap, ai mund të jetë e arsyeshme për kredi nga ana e tyre direkt\n  riprodhimin e kreditit e tyre apo duke i lidhur me të në këtë faqe."
-      contributors_nz_html: "<strong> Zelanda e Re </ strong>: Përmban të dhëna me burim nga\n   Zelanda e Re Toka e informacionit. Crown Copyright rezervuara."
-      contributors_title_html: kontribuesit tona
-      credit_1_html: "Nëse jeni duke përdorur harta imazhe OpenStreetMap, ne kërkojmë që\n  kreditit tuaj lexon të paktën \"© OpenStreetMap\n  kontribuesit, CC BY-SA \". Nëse jeni duke përdorur të dhëna vetëm në hartë,\n  ne kerkojme \"Organizimi i të dhënave © kontribuesit OpenStreetMap,\n  CC BY-SA \"."
-      credit_2_html: "Ku të jetë e mundur, duhet të jetë OpenStreetMap hyperlinked në <a\n  href = \"http://www.openstreetmap.org/\"> http://www.openstreetmap.org/ </ a>\n  dhe CC BY-SA për <a\n  href = \"http://creativecommons.org/licenses/by-sa/2.0/\"> http://creativecommons.org/licenses/by-sa/2.0/ </ a>. Nëse\n  ju jeni duke përdorur një të mesme, ku lidhjet nuk janë të mundshme (p.sh. një\n  shtypura punë), ne ju sugjerojmë lexuesit tuaj të drejtpërdrejtë të\n  www.openstreetmap.org (ndoshta duke zgjeruar\n  'OpenStreetMap' në këtë adresë të plotë) dhe të\n  www.creativecommons.org."
+      text: Në ni ngjarje të ni konflikti me faqen e përkthyme dhe %{english_original_link},
+        faqja anglisht ka përparsi
+      english_link: origjinal anglisht
+    native:
+      title: Rreth ksaj faqeje
+      text: Ju jeni tu e kshyr versionin në gjuhën shqipe të faqes së autorit. Ju
+        muni me shku në %{native_link} të kësaj faqe, ose ju muni mos me lexu në lidhje
+        me të drejtën e autorit dhe %{mapping_link}
+      native_link: Gegë verzion
+      mapping_link: fillo hartografimin
+    legal_babble:
+      title_html: Copyright
+      intro_1_html: |-
+        OpenStreetMap is <i>open data</i>, licensed under the <a
+        href="http://opendatacommons.org/licenses/odbl/">Open Data
+        Commons Open Database License</a> (ODbL).
+      intro_2_html: |-
+        Ju jeni të lirë ta kopjoni, shpërndani, përcjell dhe përshtatur hartat tona
+          dhe të dhënat, për aq kohë sa ju e kreditit OpenStreetMap e saj
+          kontribuesve. Nëse ju ndryshoni ose me ndërtimin e hartave tona ose të dhëna, ju
+          mund të shpërndani rezultat vetëm në bazë të licencës të njëjtën.
+          <Plotë një
+          href = "http://creativecommons.org/licenses/by-sa/2.0/legalcode"> ligjore
+          <Kod / a> shpjegon të drejtat tuaja dhe të përgjegjësive.
       credit_title_html: Si të kreditit OpenStreetMap
-      intro_1_html: "OpenStreetMap is <i>open data</i>, licensed under the <a\nhref=\"http://opendatacommons.org/licenses/odbl/\">Open Data\nCommons Open Database License</a> (ODbL)."
-      intro_2_html: "Ju jeni të lirë ta kopjoni, shpërndani, përcjell dhe përshtatur hartat tona\n  dhe të dhënat, për aq kohë sa ju e kreditit OpenStreetMap e saj\n  kontribuesve. Nëse ju ndryshoni ose me ndërtimin e hartave tona ose të dhëna, ju\n  mund të shpërndani rezultat vetëm në bazë të licencës të njëjtën.\n  <Plotë një\n  href = \"http://creativecommons.org/licenses/by-sa/2.0/legalcode\"> ligjore\n  <Kod / a> shpjegon të drejtat tuaja dhe të përgjegjësive."
-      more_1_html: "Lexo më shumë lidhje me përdorimin e të dhënave tona në <a\n  href = \"http://wiki.openstreetmap.org/wiki/Legal_FAQ\"> Ligjore\n  FAQ </ a>."
-      more_2_html: "OSM janë kontribuesit kujtoi kurrë për të shtuar të dhënat nga ndonjë\n  Burime copyright (p.sh. Google Maps apo të shtypura harta) pa\n  lejen shprehimisht nga mbajtësit të drejtën e autorit."
+      credit_1_html: |-
+        Nëse jeni duke përdorur harta imazhe OpenStreetMap, ne kërkojmë që
+          kreditit tuaj lexon të paktën "© OpenStreetMap
+          kontribuesit, CC BY-SA ". Nëse jeni duke përdorur të dhëna vetëm në hartë,
+          ne kerkojme "Organizimi i të dhënave © kontribuesit OpenStreetMap,
+          CC BY-SA ".
+      credit_2_html: |-
+        Ku të jetë e mundur, duhet të jetë OpenStreetMap hyperlinked në <a
+          href = "http://www.openstreetmap.org/"> http://www.openstreetmap.org/ </ a>
+          dhe CC BY-SA për <a
+          href = "http://creativecommons.org/licenses/by-sa/2.0/"> http://creativecommons.org/licenses/by-sa/2.0/ </ a>. Nëse
+          ju jeni duke përdorur një të mesme, ku lidhjet nuk janë të mundshme (p.sh. një
+          shtypura punë), ne ju sugjerojmë lexuesit tuaj të drejtpërdrejtë të
+          www.openstreetmap.org (ndoshta duke zgjeruar
+          'OpenStreetMap' në këtë adresë të plotë) dhe të
+          www.creativecommons.org.
       more_title_html: Gjetja më shumë
-      title_html: Copyright
-    native: 
-      mapping_link: fillo hartografimin
-      native_link: Gegë verzion
-      text: Ju jeni tu e kshyr versionin në gjuhën shqipe të faqes së autorit. Ju muni me shku në %{native_link} të kësaj faqe, ose ju muni mos me lexu në lidhje me të drejtën e autorit dhe %{mapping_link}
-      title: Rreth ksaj faqeje
-  message: 
-    delete: 
-      deleted: Mesazhi u fshi
-    inbox: 
-      date: Data
-      from: Prej
+      more_1_html: |-
+        Lexo më shumë lidhje me përdorimin e të dhënave tona në <a
+          href = "http://wiki.openstreetmap.org/wiki/Legal_FAQ"> Ligjore
+          FAQ </ a>.
+      more_2_html: |-
+        OSM janë kontribuesit kujtoi kurrë për të shtuar të dhënat nga ndonjë
+          Burime copyright (p.sh. Google Maps apo të shtypura harta) pa
+          lejen shprehimisht nga mbajtësit të drejtën e autorit.
+      contributors_title_html: kontribuesit tona
+      contributors_intro_html: |-
+        licencë CC BY-SA jonë kërkon që ju të "japin origjinal
+          Author kredi të arsyeshme për të mesëm ose të thotë Ti je
+          shfrytëzuar ". Individuale mappers OSM nuk kërkojnë një
+          kreditit mbi dhe më lart që të "OpenStreetMap
+          kontribuesit ", por kur të dhënat nga një hartës kombëtare
+          agjenci ose burim kryesor ka qenë i përfshirë në
+          OpenStreetMap, ai mund të jetë e arsyeshme për kredi nga ana e tyre direkt
+          riprodhimin e kreditit e tyre apo duke i lidhur me të në këtë faqe.
+      contributors_ca_html: |-
+        <strong> Kanada </ strong>: Përmban të dhëna nga
+           GeoBase ®, GeoGratis (© Departamenti i Natyrore
+           Burimet Kanada), CanVec (Departamenti i Natyrore ©
+           Burimet Kanada), dhe StatCan (Divizioni Gjeografia,
+           Statistika Kanada).
+      contributors_nz_html: |-
+        <strong> Zelanda e Re </ strong>: Përmban të dhëna me burim nga
+           Zelanda e Re Toka e informacionit. Crown Copyright rezervuara.
+      contributors_gb_html: |-
+        <strong> Mbretëria e Bashkuar </ strong>: Përmban të pajisjeve
+           Anketa të dhënat © Crown copyright bazës së të dhënave dhe të drejtë
+           2010.
+      contributors_footer_2_html: |2-
+          Përfshirja e të dhënave në OpenStreetMap nuk do të thotë që origjinal
+          dhënave miraton ofrues OpenStreetMap, ofron çdo garanci ose
+          pranon ndonjë përgjegjësi.
+  notifier:
+    diary_comment_notification:
+      subject: '[OpenStreetMap] %{user} ka komentu në shënimin tond të ditarit'
+      hi: Tung %{to_user},
+      header: '%{from_user} ka komentu në shënimin tond të fundit në ditar tek OpenStreetMap
+        me titullin %{subject}:'
+      footer: Ju muni gjithashtu me lexu komentin te %{readurl} dhe ju muni me komentu
+        te %{commenturl} apo me u përgjigj te %{replyurl}
+    message_notification:
+      hi: Tung %{to_user},
+      header: '%{from_user} ju ka dërgu një mesazh përmes OpenStreetMap me titullin
+        %{subject}:'
+    friend_notification:
+      subject: '[OpenStreetMap] %{user} ju ka shtu juve si një shok'
+      had_added_you: '%{user} ju ka shtu juve si një shok në OpenStreetMap.'
+      see_their_profile: Ju muni me pa profilin e tyre tek %{userurl}.
+      befriend_them: Ju muni gjithashtu me i shtu ata si shokë tek %{befriendurl}.
+    gpx_notification:
+      greeting: Tung,
+      your_gpx_file: Ajo duket si te re dosjen tuaj
+      with_description: me përshkrimin e
+      and_the_tags: 'dhe të mëposhtme tags:'
+      and_no_tags: dhe nuk tags.
+      failure:
+        subject: '[OpenStreetMap] te re dështimit Import'
+        failed_to_import: 'nuk arriti të importit. Këtu është gabim:'
+        more_info_1: Më shumë informacion në lidhje me dështimet e importit te re
+          dhe si për të shmangur
+        more_info_2: 'ato mund të gjenden në:'
+      success:
+        subject: '[OpenStreetMap] Import sukses te re'
+        loaded_successfully: ngarkuar me sukses me %{trace_points} nga një jetë e
+          mundur %{possible_points} piket.
+    signup_confirm:
+      subject: '[OpenStreetMap] Konfirmoje email adresën tonde'
+    email_confirm:
+      subject: '[OpenStreetMap] Konfirmoje email adresën tonde'
+    email_confirm_plain:
+      greeting: Tung,
+      click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu
+        ndryshimin.
+    email_confirm_html:
+      greeting: Tung,
+      hopefully_you: Dikush (shpresojmë se ju), do të doja të ndryshuar adresën e-mail
+        e tyre gjatë në %{server_url} në %{new_address}.
+      click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu
+        ndryshimin.
+    lost_password:
+      subject: '[OpenStreetMap] kërkesës Password reset'
+    lost_password_plain:
+      greeting: Tung,
+      click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për
+        të rivendosni fjalëkalimin tuaj.
+    lost_password_html:
+      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.
+      click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për
+        të rivendosni fjalëkalimin tuaj.
+  message:
+    inbox:
+      title: Inbox
       my_inbox: postë e mia
-      no_messages_yet: Ju nuk keni asnjë mesazh. Pse nuk po llidheni me disa prej %{people_mapping_nearby_link}?
       outbox: Dalje
-      people_mapping_nearby: njerëzit pranë hartës
+      from: Prej
       subject: Tema
-      title: Inbox
-    mark: 
-      as_read: Mesazhi u bo si i lexum
-      as_unread: Mesazhi u bo si i palexum
-    message_summary: 
-      delete_button: Fshije
+      date: Data
+      no_messages_yet: Ju nuk keni asnjë mesazh. Pse nuk po llidheni me disa prej
+        %{people_mapping_nearby_link}?
+      people_mapping_nearby: njerëzit pranë hartës
+    message_summary:
+      unread_button: Bone si të palexume
       read_button: Bone si të lexume
       reply_button: Ktheje
-      unread_button: Bone si të palexume
-    new: 
-      back_to_inbox: Kthehu në postë
-      body: Organ
-      limit_exceeded: Ju keni dërguar shumë mesazhe kohët e fundit. Ju lutem prisni një kohë para se të dërgoni ndonjë tjetër.
-      message_sent: Mesazhi u dërgu
-      send_button: Dërgo
+      delete_button: Fshije
+    new:
+      title: Qo mesazh
       send_message_to: Qoje një mesazh të ri te %{name}
       subject: Titulli
-      title: Qo mesazh
-    no_such_message: 
-      body: Me na fal por nuk ka asnjë mesazh me at id.
-      heading: Nuk ka ksi mesazhi
+      body: Organ
+      send_button: Dërgo
+      back_to_inbox: Kthehu në postë
+      message_sent: Mesazhi u dërgu
+      limit_exceeded: Ju keni dërguar shumë mesazhe kohët e fundit. Ju lutem prisni
+        një kohë para se të dërgoni ndonjë tjetër.
+    no_such_message:
       title: Nuk ka ksi mesazhi
-    outbox: 
-      date: Data
-      inbox: postë
+      heading: Nuk ka ksi mesazhi
+      body: Me na fal por nuk ka asnjë mesazh me at id.
+    outbox:
+      title: Dalje
       my_inbox: Im %{inbox_link}
-      no_sent_messages: Ju nuk keni dërgu asnjë mesazh. Pse nuk po llidheni me disa prej %{people_mapping_nearby_link}?
+      inbox: postë
       outbox: Dalje
-      people_mapping_nearby: njerëzit pranë hartës
-      subject: Titulli
-      title: Dalje
       to: Te
-    read: 
+      subject: Titulli
       date: Data
+      no_sent_messages: Ju nuk keni dërgu asnjë mesazh. Pse nuk po llidheni me disa
+        prej %{people_mapping_nearby_link}?
+      people_mapping_nearby: njerëzit pranë hartës
+    reply:
+      wrong_user: Ju keni hy si `%{user}' por mesazhi që po doni me ju përgjigj nuk
+        u dërgu për at anëtar. Ju lutem hyni si anëtari korrekt nëse doni me ju përgjigj
+        atij mesazhi.
+    read:
+      title: Lexo mesazhin
       from: Prej
-      reply_button: Përgjigju
       subject: Titulli
-      title: Lexo mesazhin
-      to: Te
+      date: Data
+      reply_button: Përgjigju
       unread_button: Bone si të palexum
-      wrong_user: Ju keni hy si `%{user}' por mesazhi që po doni me lexu nuk u dërgu për ose nga ai anëtar. Ju lutem hyni si anëtari korrekt nëse doni me lexu atë mesazh.
-    reply: 
-      wrong_user: Ju keni hy si `%{user}' por mesazhi që po doni me ju përgjigj nuk u dërgu për at anëtar. Ju lutem hyni si anëtari korrekt nëse doni me ju përgjigj atij mesazhi.
-    sent_message_summary: 
+      to: Te
+      wrong_user: Ju keni hy si `%{user}' por mesazhi që po doni me lexu nuk u dërgu
+        për ose nga ai anëtar. Ju lutem hyni si anëtari korrekt nëse doni me lexu
+        atë mesazh.
+    sent_message_summary:
       delete_button: Fshij
-  notifier: 
-    diary_comment_notification: 
-      footer: Ju muni gjithashtu me lexu komentin te %{readurl} dhe ju muni me komentu te %{commenturl} apo me u përgjigj te %{replyurl}
-      header: "%{from_user} ka komentu në shënimin tond të fundit në ditar tek OpenStreetMap me titullin %{subject}:"
-      hi: Tung %{to_user},
-      subject: "[OpenStreetMap] %{user} ka komentu në shënimin tond të ditarit"
-    email_confirm: 
-      subject: "[OpenStreetMap] Konfirmoje email adresën tonde"
-    email_confirm_html: 
-      click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu ndryshimin.
-      greeting: Tung,
-      hopefully_you: Dikush (shpresojmë se ju), do të doja të ndryshuar adresën e-mail e tyre gjatë në %{server_url} në %{new_address}.
-    email_confirm_plain: 
-      click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu ndryshimin.
-      greeting: Tung,
-    friend_notification: 
-      befriend_them: Ju muni gjithashtu me i shtu ata si shokë tek %{befriendurl}.
-      had_added_you: "%{user} ju ka shtu juve si një shok në OpenStreetMap."
-      see_their_profile: Ju muni me pa profilin e tyre tek %{userurl}.
-      subject: "[OpenStreetMap] %{user} ju ka shtu juve si një shok"
-    gpx_notification: 
-      and_no_tags: dhe nuk tags.
-      and_the_tags: "dhe të mëposhtme tags:"
-      failure: 
-        failed_to_import: "nuk arriti të importit. Këtu është gabim:"
-        more_info_1: Më shumë informacion në lidhje me dështimet e importit te re dhe si për të shmangur
-        more_info_2: "ato mund të gjenden në:"
-        subject: "[OpenStreetMap] te re dështimit Import"
-      greeting: Tung,
-      success: 
-        loaded_successfully: ngarkuar me sukses me %{trace_points} nga një jetë e mundur %{possible_points} piket.
-        subject: "[OpenStreetMap] Import sukses te re"
-      with_description: me përshkrimin e
-      your_gpx_file: Ajo duket si te re dosjen tuaj
-    lost_password: 
-      subject: "[OpenStreetMap] kërkesës Password reset"
-    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.
-    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,
-    message_notification: 
-      header: "%{from_user} ju ka dërgu një mesazh përmes OpenStreetMap me titullin %{subject}:"
-      hi: Tung %{to_user},
-    signup_confirm: 
-      subject: "[OpenStreetMap] Konfirmoje email adresën tonde"
-  oauth: 
-    oauthorize: 
-      allow_read_gpx: lexoni privat tuaj GPS gjurmë.
-      allow_read_prefs: lexoni preferencat tuaj të përdoruesit.
-      allow_to: "Lejoni klientin të aplikimit:"
-      allow_write_api: modifikimin e hartes.
-      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
-      allow_write_gpx: GPS upload gjurmë.
-      allow_write_prefs: ndryshuar parapëlqimet tuaj të përdoruesit.
-      request_access: Aplikacioni %{app_name} po kërkon qasje në llogarinë tonde. Ju lutem kshyrne nëse doni që aplikacioni me i pas kto mundësi. Ju muni me zgjedh sa ma shumë ose sa ma pak që të doni.
-    revoke: 
-      flash: Ju keni revokuar shenjë për %{application}
-  oauth_clients: 
-    create: 
-      flash: Informatat jon regjistru me sukses.
-    destroy: 
-      flash: Shkatërruar kërkesë e klientit regjistrimit
-    edit: 
-      submit: Redaktoj
-      title: Redakto kërkesën tuaj
-    form: 
-      allow_read_gpx: lexo privat GPS gjurmë e tyre.
-      allow_read_prefs: lexoni preferencat e tyre të përdoruesit.
-      allow_write_api: ndryshoje hartën.
-      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
-      allow_write_gpx: GPS upload gjurmë.
-      allow_write_prefs: ndryshuar parapëlqimet e tyre të përdoruesit.
-      callback_url: Callback URL
-      name: Emni
-      requests: "Kërkesë të drejtat e mëposhtme nga përdoruesit:"
-      required: E kërkume
-      support_url: Asistenca URL
-      url: URL Kryesore Aplikimi
-    index: 
-      application: Emri i Aplikacionit
-      issued_at: Lëshuar në
-      list_tokens: "Argumentet e mëposhtme janë lëshuar për aplikimet në emrin tuaj:"
-      my_apps: Aplikime Klienti im
-      my_tokens: Aplikimet e mia i Autorizuar
-      no_apps: A keni një aplikim që ju do të doja të regjistruar për të përdorur me ne duke përdorur %{oauth} standarde? Ju duhet të regjistroheni kërkesën tuaj para se ajo mund të bëjë kërkesë OAuth për këtë shërbim.
-      register_new: Regjistroje aplikacionin tond
-      registered_apps: "Ju keni aplikimet e mëposhtme klientit të regjistruar:"
-      revoke: Tërheq!
-      title: Detajet e mia OAuth
-    new: 
-      submit: Regjistrohu
-      title: Regjistroje një aplikacion të ri.
-    not_found: 
-      sorry: Na vjen keq, se %{type} nuk mund të gjendet.
-    show: 
-      access_url: "URL Qasja Shenjë:"
-      allow_read_gpx: lexo privat GPS gjurmë e tyre.
-      allow_read_prefs: lexoni preferencat e tyre të përdoruesit.
-      allow_write_api: modifikimin e hartes.
-      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
-      allow_write_gpx: GPS upload gjurmë.
-      allow_write_prefs: ndryshuar parapëlqimet e tyre të përdoruesit.
-      authorize_url: "Authorise URL:"
-      edit: Edit Details
-      key: "Konsumatorit kryesore:"
-      requests: "Kërkuar të drejtat e mëposhtme nga përdoruesit:"
-      secret: "Konsumatorit Sekret:"
-      support_notice: Ne mbështesim HMAC-SHA1 (rekomandohet) si tekst i thjeshtë në mënyrë SSL.
-      title: Detajet OAuth për %{app_name}
-      url: "URL Kërkesë Shenjë:"
-    update: 
-      flash: Përditësuar më të dhënat e klientit me sukses
-  site: 
-    edit: 
-      anon_edits_link_text: Find out pse kjo është e rastit.
-      flash_player_required: Ju duhet me pas Flash player për me përdor Potlatch, Flash editorin e OpenStreetMap. Ju muni <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">me marr Flash Player nga Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Disa mënyra të tjera</a> janë të mundshme për me editu OpenStreetMap.
-      not_public: Ju nuk keni vendosur redaktimet e juaj të jetë publike.
-      not_public_description: Ju nuk mund të redaktoni hartën e nëse ju një gjë të tillë. Ju mund të vendosni redaktimet e tuaja si publik nga %{user_page} tuaj.
-      potlatch_unsaved_changes: Ju keni para shpëtimit të ndryshimeve. (Për të ruajtur në Potlatch, ju duhet të asnjërën mënyrë e tanishme ose me pikën e, në qoftë se redaktimi në mënyrë të jetojnë, ose klikoni ruani në qoftë se ju keni një buton të shpëtuar.)
-      user_page_link: faqe përdorues
-    index: 
-      js_1: Ju jeni tuj e përdor naj shfletues që nuk e përkrah JavaScript, ose ju e keni ndalu JavaScript.
+    mark:
+      as_read: Mesazhi u bo si i lexum
+      as_unread: Mesazhi u bo si i palexum
+    delete:
+      deleted: Mesazhi u fshi
+  site:
+    index:
+      js_1: Ju jeni tuj e përdor naj shfletues që nuk e përkrah JavaScript, ose ju
+        e keni ndalu JavaScript.
       js_2: OpenStreetMap përdor Java skriptet për planet e saj të rrëshqitshëm.
       permalink: Permalink
       shortlink: Shortlink
-    key: 
-      table: 
-        entry: 
-          admin: kufitare administrative
-          allotments: Ndarje
-          apron: 
-            - aeroportit Aeroporti
-            - terminal
-          bridge: Shtresë e jashtme e Zi = urë
-          bridleway: Bridleway
-          brownfield: site Brownfield
-          building: ndërtimin e rëndësishme
+    edit:
+      not_public: Ju nuk keni vendosur redaktimet e juaj të jetë publike.
+      not_public_description: Ju nuk mund të redaktoni hartën e nëse ju një gjë të
+        tillë. Ju mund të vendosni redaktimet e tuaja si publik nga %{user_page} tuaj.
+      user_page_link: faqe përdorues
+      anon_edits_link_text: Find out pse kjo është e rastit.
+      flash_player_required: Ju duhet me pas Flash player për me përdor Potlatch,
+        Flash editorin e OpenStreetMap. Ju muni <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">me
+        marr Flash Player nga Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Disa
+        mënyra të tjera</a> janë të mundshme për me editu OpenStreetMap.
+      potlatch_unsaved_changes: Ju keni para shpëtimit të ndryshimeve. (Për të ruajtur
+        në Potlatch, ju duhet të asnjërën mënyrë e tanishme ose me pikën e, në qoftë
+        se redaktimi në mënyrë të jetojnë, ose klikoni ruani në qoftë se ju keni një
+        buton të shpëtuar.)
+    sidebar:
+      search_results: Rezultatet e Kërkimit
+      close: Mshele
+    search:
+      search: Kërko
+      where_am_i: Ku jom une?
+      where_am_i_title: Përshkruje lokacionin e tanishëm tuj e përdor makinën kërkuese
+      submit_text: Shkoj
+    key:
+      table:
+        entry:
+          motorway: Autostradë
+          trunk: rrugë nacionale
+          primary: Udhë kryesore
+          secondary: rrugë e mesme
+          unclassified: Udhë e paklasifikume
+          unsurfaced: rrugë Unsurfaced
+          track: Udhë
           byway: I parrahur
-          cable: 
-            - teleferik
-            - heqë karrige
-          cemetery: Varrezë
-          centre: Qendër Sportive
-          commercial: Zona Tregtare
-          common: 
-            - I përbashkët
-            - livadh
-          construction: Rrugët në ndërtim e sipër
+          bridleway: Bridleway
           cycleway: Cycleway
-          destination: qasje Destinacioni
-          farm: Ferm
           footway: Këmbësore
+          rail: Hekurudhor
+          subway: Metro
+          tram:
+          - hekurudhor Lehta
+          - tramvaj
+          cable:
+          - teleferik
+          - heqë karrige
+          runway:
+          - Aeroporti i pistës
+          - taxiway
+          apron:
+          - aeroportit Aeroporti
+          - terminal
+          admin: kufitare administrative
           forest: Pyll
+          wood: Druri
           golf: fushë e golfit
-          heathland: Heathland
-          industrial: Zonë Industriale
-          lake: 
-            - Liqe
-            - rezervuar
-          military: Zonë Ushtarake
-          motorway: Autostradë
           park: Park
-          permissive: qasje tolerant
-          pitch: katran Sport
-          primary: Udhë kryesore
-          private: qasje privat
-          rail: Hekurudhor
-          reserve: rezervë Natyra
           resident: Zonë Rezidenciale
+          tourist: tërheqje Turistike
+          common:
+          - I përbashkët
+          - livadh
           retail: zonë me pakicë
-          runway: 
-            - Aeroporti i pistës
-            - taxiway
-          school: 
-            - Shkollë
-            - universitet
-          secondary: rrugë e mesme
+          industrial: Zonë Industriale
+          commercial: Zona Tregtare
+          heathland: Heathland
+          lake:
+          - Liqe
+          - rezervuar
+          farm: Ferm
+          brownfield: site Brownfield
+          cemetery: Varrezë
+          allotments: Ndarje
+          pitch: katran Sport
+          centre: Qendër Sportive
+          reserve: rezervë Natyra
+          military: Zonë Ushtarake
+          school:
+          - Shkollë
+          - universitet
+          building: ndërtimin e rëndësishme
           station: Stacion hekurudhor
-          subway: Metro
-          summit: 
-            - Samiti i
-            - pik
-          tourist: tërheqje Turistike
-          track: Udhë
-          tram: 
-            - hekurudhor Lehta
-            - tramvaj
-          trunk: rrugë nacionale
+          summit:
+          - Samiti i
+          - pik
           tunnel: tunel zorrë thye =
-          unclassified: Udhë e paklasifikume
-          unsurfaced: rrugë Unsurfaced
-          wood: Druri
-    search: 
-      search: Kërko
-      submit_text: Shkoj
-      where_am_i: Ku jom une?
-      where_am_i_title: Përshkruje lokacionin e tanishëm tuj e përdor makinën kërkuese
-    sidebar: 
-      close: Mshele
-      search_results: Rezultatet e Kërkimit
-  time: 
-    formats: 
-      friendly: "%e %B %Y te %H:%M"
-  trace: 
-    create: 
-      trace_uploaded: E dhana jote GPX asht ngarkue edhe osht ka pret futjen en databazë. Kjo zakonisht ndodhë mrena gjysë ore, dhe ni email vjen te ti en fund të përfundimit
+          bridge: Shtresë e jashtme e Zi = urë
+          private: qasje privat
+          permissive: qasje tolerant
+          destination: qasje Destinacioni
+          construction: Rrugët në ndërtim e sipër
+  trace:
+    visibility:
+      private: Private (ndahen vetem si pika anonime të rendituna)
+      public: Publike (shfaqet ne listen e të dhanave si e padukshme, pikat e rendituna)
+      trackable: në gjendje për të gjurmuar (ndahet vetëm si anonim, ka urdhëruar
+        pikë me timestamps)
+      identifiable: E identifikueshme (shfaqet në listën e të dhanave, pikat i urdhëron
+        me orë)
+    create:
       upload_trace: Ngarkoj tdhanat e GPS-it
-    delete: 
-      scheduled_for_deletion: Gjurma u parapa për fshirje
-    edit: 
-      description: "Përshkrimi:"
-      download: shkarko
-      edit: ndryshoje
-      filename: "Emni i fajllit:"
+      trace_uploaded: E dhana jote GPX asht ngarkue edhe osht ka pret futjen en databazë.
+        Kjo zakonisht ndodhë mrena gjysë ore, dhe ni email vjen te ti en fund të përfundimit
+    edit:
+      title: Duke ndryshue të dhanen %{name}
       heading: Ndrysho të dhanën %{name}
+      filename: 'Emni i fajllit:'
+      download: shkarko
+      uploaded_at: 'Të ngarkume:'
+      points: 'Pikët:'
+      start_coord: 'Fillo kordinatën:'
       map: harta
-      owner: "Pronari:"
-      points: "Pikët:"
-      save_button: Ruaj Ndryshimet
-      start_coord: "Fillo kordinatën:"
-      tags: "Etiketat:"
+      edit: ndryshoje
+      owner: 'Pronari:'
+      description: 'Përshkrimi:'
+      tags: 'Etiketat:'
       tags_help: Presje e kufizume
-      title: Duke ndryshue të dhanen %{name}
-      uploaded_at: "Të ngarkume:"
-      visibility: "Dukshmënia:"
+      save_button: Ruaj Ndryshimet
+      visibility: 'Dukshmënia:'
       visibility_help: Çka do me than kjo?
-    list: 
-      public_traces: Të dhanat publike të GPS-it
-      public_traces_from: Të dhana publike të GPS-it pej %{user}
-      tagged_with: " e etikume me %{tags}"
-      your_traces: Të dhanat e GPS-it
-    make_public: 
-      made_public: Gjurma u ba publike
-    offline: 
-      heading: Mbledhsi i GPX asht jasht linje
-      message: Mbledhsi i skedareve GPX dhe sistemi i ngarkimit për momentin janë jasht funksionit.
-    offline_warning: 
-      message: Sistemi i ngarkimit GPX për momentin asht jasht përdonimit
-    trace: 
-      ago: "%{time_in_words_ago} përpara"
-      by: nga
-      count_points: "%{count} pikët"
-      edit: ndrysho
-      edit_map: Ndryshoje Harten
-      identifiable: E identifikueshme
-      in: në
-      map: harta
-      more: ma shumë
-      pending: NË PRITJE
-      private: PRIVATE
-      public: PUBLIKE
-      trace_details: Kshyri detalet e të dhanave
-      trackable: E GJURMUESHME
-      view_map: Kshyre Hartën
-    trace_form: 
+    trace_form:
+      upload_gpx: Ngarko një skedar GPX
       description: Përshkrimi
-      help: Ndihma
       tags: Etiketat
       tags_help: Presje e kufizume
-      upload_button: Ngarko
-      upload_gpx: Ngarko një skedar GPX
       visibility: Dukshmënia
       visibility_help: çka do me than kjo?
-    trace_header: 
+      upload_button: Ngarko
+      help: Ndihma
+    trace_header:
       see_all_traces: Kshyri kejt të dhanat
       see_your_traces: Shikoj kejt të dhanat tuja
-      traces_waiting: Ju keni %{count} të dhëna duke pritur për tu ngrarkuar.Ju lutem pritni deri sa të përfundoj ngarkimi përpara se me ngarku tjetër gjë, pra që mos me blloku rradhën për përdoruesit e tjerë.
-    trace_optionals: 
+      traces_waiting: Ju keni %{count} të dhëna duke pritur për tu ngrarkuar.Ju lutem
+        pritni deri sa të përfundoj ngarkimi përpara se me ngarku tjetër gjë, pra
+        që mos me blloku rradhën për përdoruesit e tjerë.
+    trace_optionals:
       tags: Etiketat
-    trace_paging_nav: 
-      showing_page: Duke shfaqun faqen %{page}
-    view: 
-      delete_track: Fshij kët gjurm
-      description: "Përshkrimi:"
-      download: shkarko
-      edit: ndrysho
-      edit_track: Ndrysho kët gjurm
-      filename: "Emni i fajllit:"
+    view:
+      title: Duke par gjurmën %{name}
       heading: Tuj i kqyr t'dhanat %{name}
+      pending: DUKE PRITUR
+      filename: 'Emni i fajllit:'
+      download: shkarko
+      uploaded: 'Të ngarkume:'
+      points: 'Pikët:'
+      start_coordinates: 'Fillo kordinimin:'
       map: harta
+      edit: ndrysho
+      owner: 'Pronari:'
+      description: 'Përshkrimi:'
+      tags: 'Etiketat:'
       none: Asnjo
-      owner: "Pronari:"
-      pending: DUKE PRITUR
-      points: "Pikët:"
-      start_coordinates: "Fillo kordinimin:"
-      tags: "Etiketat:"
-      title: Duke par gjurmën %{name}
+      edit_track: Ndrysho kët gjurm
+      delete_track: Fshij kët gjurm
       trace_not_found: Gjurma nuk u gjet!
-      uploaded: "Të ngarkume:"
-      visibility: "Dukshmënia:"
-    visibility: 
-      identifiable: E identifikueshme (shfaqet në listën e të dhanave, pikat i urdhëron me orë)
-      private: Private (ndahen vetem si pika anonime të rendituna)
-      public: Publike (shfaqet ne listen e të dhanave si e padukshme, pikat e rendituna)
-      trackable: në gjendje për të gjurmuar (ndahet vetëm si anonim, ka urdhëruar pikë me timestamps)
-  user: 
-    account: 
-      current email address: "Email adresa e tanishme:"
-      delete image: Heke imazhin e tanishëm
-      email never displayed publicly: (asniher su kan publike)
-      flash update success: Informatat e shfrytëzuesit u ndryshuan me sukses.
-      flash update success confirm needed: Informatat e shfyrtezuesit u ndryshan me sukses. Shihni emailin per konfirmim.
-      home location: "Veni juej:"
-      image: "Imazhi:"
-      image size hint: (imazhet katrore s'paku me madhsi 100x100px doken ma mir)
-      keep image: Maje imazhin e tanishëm
-      latitude: "Latituda:"
-      longitude: "Longituda:"
-      make edits public button: Boni gjith ndryshimet e mija publike
-      my settings: Preferencat e mia
-      new email address: "Email adresa e re:"
-      new image: Shto ni imazh
-      no home location: Ju se keni caktu venin e juj.
-      preferred languages: "Gjuhët e parapëlqyme:"
-      profile description: "Pershkrimi i profilit:"
-      public editing: 
-        disabled: E çkyckur dhe smuni me i ndryshu të dhanat, të gjitha ndryshimet e ma hershme jan anonime.
-        disabled link text: pse spo muj me i ndryshue?
-        enabled: E pranishme. Jo anonime dhe muni me i ndryshue t'dhanat.
-        enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
-        enabled link text: çka osht kjo?
-        heading: "Ndryshime publike:"
-      public editing note: 
-        heading: Duke ndryshue publikisht
-        text: Niher për niher ndryshimet e juaja janë anonime dhe njerëzit nuk mund të ju dërgojnë mesazhe apo shohin vendndodhjen tuaj. Për të treguar atë që e keni edituar dhe lejojnë njerëzit të lidhen me ju nëpërmjet internetit, kliko butonin më poshtë. <b> Që nga ndryshimi 0,6 API, vetëm përdoruesit e publikut mund të redaktoni të dhënat hartë </ b>. (<a Href="http://wiki.openstreetmap.org/wiki/Anonymous_edits"> gjeni se pse </ a>). <ul> <li> Adresa juaj e emailit nuk do të zbulohet duke u bërë publik. </ Li > <li> Ky veprim nuk mund të kthehet dhe të gjithë përdoruesit e rinj janë tashmë publik nga default. </ li> </ ul>
-      replace image: Ndryshoje imazhin e tanishëm
-      return to profile: Kthehu te profili
-      save changes button: Ruaj Ndryshimet
-      title: Ndrysho akountin
-      update home location on click: Ndryshoma venin kur të klikoj në hart?
-    confirm: 
-      button: Konfirmo
-      heading: Konfirmo nje akount te shfrytezuesit
-      press confirm button: Shtype butonin e konfirmimit ma posht që me mujt me aktivizue akountin e juej
-    confirm_email: 
-      button: Konfirmo
-      failure: Ni email adres tashma osht konfirmue me kët token.
-      heading: Konfirmo ni ndryshim te email adreses
-      press confirm button: Truse butonin për konfirmim për me konfirmu email adresën tone të re.
-      success: Konfirmo email adresën tone, ju faleminderit për regjistrim!
-    filter: 
-      not_an_administrator: Ju duhet të jeni administrator për me kry kët veprim.
-    go_public: 
-      flash success: Gjitha ndryshimet tuja janë publike tash, edhe tash t'lejohet me ndryshue
-    list: 
-      confirm: Konfirmo Anëtarët e Selektum
-      empty: Asni perputhje e perdoruesve nuk asht gjetun
-      heading: Perdoruesit
-      hide: Mshefi Perdorust e Zgjedhun
-      showing: 
-        one: Tu e kallxu faqen %{page} (%{first_item} prej %{items})
-        other: Tu e kallxu faqen %{page} (%{first_item}-%{last_item} prej %{items})
-      summary: "%{name} u kriju prej %{ip_address} në %{date}"
-      summary_no_ip: "%{name} u krijue me %{date}"
-      title: Perdoruesit
-    login: 
-      account not active: Na vjen keq, akonti juej nuk asht hala aktiv<br /> Ju lutemi klikoni në linkun e dërguem në email për me aktivizu akountin tuej.
-      auth failure: Na vjen keq, smunem me ju kyc me ato detaje.
-      email or username: "Email Adresa ose Username:"
+      visibility: 'Dukshmënia:'
+    trace_paging_nav:
+      showing_page: Duke shfaqun faqen %{page}
+    trace:
+      pending: NË PRITJE
+      count_points: '%{count} pikët'
+      ago: '%{time_in_words_ago} përpara'
+      more: ma shumë
+      trace_details: Kshyri detalet e të dhanave
+      view_map: Kshyre Hartën
+      edit: ndrysho
+      edit_map: Ndryshoje Harten
+      public: PUBLIKE
+      identifiable: E identifikueshme
+      private: PRIVATE
+      trackable: E GJURMUESHME
+      by: nga
+      in: në
+      map: harta
+    list:
+      public_traces: Të dhanat publike të GPS-it
+      your_traces: Të dhanat e GPS-it
+      public_traces_from: Të dhana publike të GPS-it pej %{user}
+      tagged_with: ' e etikume me %{tags}'
+    delete:
+      scheduled_for_deletion: Gjurma u parapa për fshirje
+    make_public:
+      made_public: Gjurma u ba publike
+    offline_warning:
+      message: Sistemi i ngarkimit GPX për momentin asht jasht përdonimit
+    offline:
+      heading: Mbledhsi i GPX asht jasht linje
+      message: Mbledhsi i skedareve GPX dhe sistemi i ngarkimit për momentin janë
+        jasht funksionit.
+  application:
+    require_cookies:
+      cookies_needed: Ju duket se kanë cookies aftësi të kufizuara - ju lutemi aktivizoni
+        cookies në browserin tuaj para se të vazhdoni.
+    setup_user_auth:
+      blocked: qasja juaj në API është bllokuar. Ju lutemi të log-in për ndërfaqe
+        web për të mësuar më shumë.
+  oauth:
+    oauthorize:
+      request_access: Aplikacioni %{app_name} po kërkon qasje në llogarinë tonde.
+        Ju lutem kshyrne nëse doni që aplikacioni me i pas kto mundësi. Ju muni me
+        zgjedh sa ma shumë ose sa ma pak që të doni.
+      allow_to: 'Lejoni klientin të aplikimit:'
+      allow_read_prefs: lexoni preferencat tuaj të përdoruesit.
+      allow_write_prefs: ndryshuar parapëlqimet tuaj të përdoruesit.
+      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
+      allow_write_api: modifikimin e hartes.
+      allow_read_gpx: lexoni privat tuaj GPS gjurmë.
+      allow_write_gpx: GPS upload gjurmë.
+    revoke:
+      flash: Ju keni revokuar shenjë për %{application}
+  oauth_clients:
+    new:
+      title: Regjistroje një aplikacion të ri.
+      submit: Regjistrohu
+    edit:
+      title: Redakto kërkesën tuaj
+      submit: Redaktoj
+    show:
+      title: Detajet OAuth për %{app_name}
+      key: 'Konsumatorit kryesore:'
+      secret: 'Konsumatorit Sekret:'
+      url: 'URL Kërkesë Shenjë:'
+      access_url: 'URL Qasja Shenjë:'
+      authorize_url: 'Authorise URL:'
+      support_notice: Ne mbështesim HMAC-SHA1 (rekomandohet) si tekst i thjeshtë në
+        mënyrë SSL.
+      edit: Edit Details
+      requests: 'Kërkuar të drejtat e mëposhtme nga përdoruesit:'
+      allow_read_prefs: lexoni preferencat e tyre të përdoruesit.
+      allow_write_prefs: ndryshuar parapëlqimet e tyre të përdoruesit.
+      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
+      allow_write_api: modifikimin e hartes.
+      allow_read_gpx: lexo privat GPS gjurmë e tyre.
+      allow_write_gpx: GPS upload gjurmë.
+    index:
+      title: Detajet e mia OAuth
+      my_tokens: Aplikimet e mia i Autorizuar
+      list_tokens: 'Argumentet e mëposhtme janë lëshuar për aplikimet në emrin tuaj:'
+      application: Emri i Aplikacionit
+      issued_at: Lëshuar në
+      revoke: Tërheq!
+      my_apps: Aplikime Klienti im
+      no_apps: A keni një aplikim që ju do të doja të regjistruar për të përdorur
+        me ne duke përdorur %{oauth} standarde? Ju duhet të regjistroheni kërkesën
+        tuaj para se ajo mund të bëjë kërkesë OAuth për këtë shërbim.
+      registered_apps: 'Ju keni aplikimet e mëposhtme klientit të regjistruar:'
+      register_new: Regjistroje aplikacionin tond
+    form:
+      name: Emni
+      required: E kërkume
+      url: URL Kryesore Aplikimi
+      callback_url: Callback URL
+      support_url: Asistenca URL
+      requests: 'Kërkesë të drejtat e mëposhtme nga përdoruesit:'
+      allow_read_prefs: lexoni preferencat e tyre të përdoruesit.
+      allow_write_prefs: ndryshuar parapëlqimet e tyre të përdoruesit.
+      allow_write_diary: krijojnë të hyra ditar, komentet dhe të bëni miq të rinj.
+      allow_write_api: ndryshoje hartën.
+      allow_read_gpx: lexo privat GPS gjurmë e tyre.
+      allow_write_gpx: GPS upload gjurmë.
+    not_found:
+      sorry: Na vjen keq, se %{type} nuk mund të gjendet.
+    create:
+      flash: Informatat jon regjistru me sukses.
+    update:
+      flash: Përditësuar më të dhënat e klientit me sukses
+    destroy:
+      flash: Shkatërruar kërkesë e klientit regjistrimit
+  user:
+    login:
+      title: Kyçu
       heading: Kycu
-      login_button: Kyçu
+      email or username: 'Email Adresa ose Username:'
+      password: 'Fjalekalimi:'
+      remember: 'Kujtom mu:'
       lost password link: Keni harru fjalëkalimin tuaj?
-      password: "Fjalekalimi:"
-      remember: "Kujtom mu:"
-      title: Kyçu
-    logout: 
+      login_button: Kyçu
+      account not active: Na vjen keq, akonti juej nuk asht hala aktiv<br /> Ju lutemi
+        klikoni në linkun e dërguem në email për me aktivizu akountin tuej.
+      auth failure: Na vjen keq, smunem me ju kyc me ato detaje.
+    logout:
+      title: Dil
       heading: Dil nga OpenStreetMap
       logout_button: Dil
-      title: Dil
-    lost_password: 
-      email address: "Email Adresa:"
+    lost_password:
+      title: T'ka hup fjalkalimi
       heading: Ke harrue fjalkalimin?
-      help_text: Shkrueje email adresen që je regjistrue me to, do t'ju deromi një lidhe rreth ksaj ku ju muni me ndrru fjalkalimin
+      email address: 'Email Adresa:'
       new password button: Ndrysho fjalkalimin
+      help_text: Shkrueje email adresen që je regjistrue me to, do t'ju deromi një
+        lidhe rreth ksaj ku ju muni me ndrru fjalkalimin
+      notice email on way: Na vjen keq që e keni hup :-( po ni email ka me ju ardh
+        së shpejti edhe muni me ricaktu.
       notice email cannot find: Smujtëm me gjet qat email adres, na vjen keq.
-      notice email on way: Na vjen keq që e keni hup :-( po ni email ka me ju ardh së shpejti edhe muni me ricaktu.
-      title: T'ka hup fjalkalimi
-    make_friend: 
-      already_a_friend: Ju tashma jeni shok me %{name}.
-      failed: Na vjen keq, dështuam ta shtojm %{name} si shok/qe.
-      success: "%{name} është shok/shoqe jot/e."
-    new: 
-      confirm email address: "Konfirmo Adresën e Emailit:"
-      confirm password: "Konfirmo fjalëkalimin:"
-      contact_webmaster: Ju lutna kontaktoni <a href="mailto:webmaster@openstreetmap.org">webmasterin</a> per më caktu ni akount që të ju krijohet - na do të merremi me kërkesën sa ma shpejt që tjet e mundshme.
-      continue: Vazhdo
-      display name: "Emni i pamshem:"
-      display name description: Emni jot publik. Ju muni me ndrru ma von në preferencat e tua.
-      email address: "Email Adresa:"
-      license_agreement: Kur e konfirmoni llogarinë tuaj ju duhet ti pranoni <a href="http://www.osmfoundation.org/wiki/License/Contributor_Terms">kushtet e kontributit</a>.
-      no_auto_account_create: Për momentin spo mujm me ju kriju akount automatikisht.
-      not displayed publicly: Nuk u shfaq publikisht (kshyre <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="wiki privacy policy including section on email addresses">privacy policy</a>)
-      password: "Fjalekalimi:"
-      title: Krijo akount
-    no_such_user: 
-      body: Na vjen keq, ska shfrytëzues me kët emën %{user}. Ju lutemi kontrolloni shkrimin, ose nashta linku ku keni kliku asht gabim.
-      heading: Ky shfrytzues %{user} nuk egziston
-      title: Ska ksi shfrytëzuesi
-    popup: 
-      friend: Shoq
-      nearby mapper: Hartues i aftërt
-      your location: Vendi juej
-    remove_friend: 
-      not_a_friend: "%{name} nuk osht njoni pi shokve tu."
-      success: "%{name} u hek pi shokve tu"
-    reset_password: 
-      confirm password: "Konfirmo Fjalëkalimin:"
-      flash changed: Fjalëkalimi juaj u ndryshua.
-      flash token bad: Sun e gjetëm qat token, kontrolloje URL?
+    reset_password:
+      title: Ricakto fjalëkalimin
       heading: Ricakto fjalëkalimin për %{user}
-      password: "Fjalëkalimi:"
+      password: 'Fjalëkalimi:'
+      confirm password: 'Konfirmo Fjalëkalimin:'
       reset: Ricakto Fjalëkalimin
-      title: Ricakto fjalëkalimin
-    set_home: 
-      flash success: Veni i shpis u ruajt me sukses
-    suspended: 
-      body: "<p>\n  Me na fal, por llogaria juaj automatikisht osht suspendu\n  për shkak të aktivitetit të dyshimt.\n</p>\n<p>\n  Ky vendim së shpejti ka mu rishiku prej një administratori, ose\n  ju muni me kontaktu me %{webmaster} nëse doni me diskutu ma shumë.\n</p>"
-      heading: Llogaria u Suspendu
-      title: Llogaria u Suspendu
-      webmaster: webmaster
-    terms: 
-      agree: Pajtohem
+      flash changed: Fjalëkalimi juaj u ndryshua.
+      flash token bad: Sun e gjetëm qat token, kontrolloje URL?
+    new:
+      title: Krijo akount
+      no_auto_account_create: Për momentin spo mujm me ju kriju akount automatikisht.
+      contact_webmaster: Ju lutna kontaktoni <a href="mailto:webmaster@openstreetmap.org">webmasterin</a>
+        per më caktu ni akount që të ju krijohet - na do të merremi me kërkesën sa
+        ma shpejt që tjet e mundshme.
+      license_agreement: Kur e konfirmoni llogarinë tuaj ju duhet ti pranoni <a href="http://www.osmfoundation.org/wiki/License/Contributor_Terms">kushtet
+        e kontributit</a>.
+      email address: 'Email Adresa:'
+      confirm email address: 'Konfirmo Adresën e Emailit:'
+      not displayed publicly: Nuk u shfaq publikisht (kshyre <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
+        title="wiki privacy policy including section on email addresses">privacy policy</a>)
+      display name: 'Emni i pamshem:'
+      display name description: Emni jot publik. Ju muni me ndrru ma von në preferencat
+        e tua.
+      password: 'Fjalekalimi:'
+      confirm password: 'Konfirmo fjalëkalimin:'
+      continue: Vazhdo
+    terms:
+      heading: rregullat për Pjesëmarrës
       consider_pd: Unë e konsideroj kontributet e mia të jenë në domenin publik
       consider_pd_why: çka o kjo?
+      agree: Pajtohem
       decline: Mos prano
-      heading: rregullat për Pjesëmarrës
-      legale_names: 
+      legale_select: 'Ju lutem zgjidhni vendin tuaj të banimit:'
+      legale_names:
         france: Franca
         italy: Italia
         rest_of_world: Pjesa tjetër e botës
-      legale_select: "Ju lutem zgjidhni vendin tuaj të banimit:"
-    view: 
-      activate_user: aktivizo kët shfrytezues
-      add as friend: shtoje si shoq
-      ago: (para %{time_in_words_ago})
-      block_history: shih blokimet e marrne
-      blocks by me: bllokimet e dhana nga un
-      blocks on me: bllokimet e mia
-      confirm: Konfirmo
-      confirm_user: konfirmo ket perdorus
-      create_block: blloko ket shfrytzues
-      created from: "U krijue prej:"
-      deactivate_user: ç'aktivizoje kët shfrytezues
-      delete_user: fshije kët shfrytzues
-      description: Përshkrimi
-      diary: ditari
-      edits: ndryshimet
-      email address: "Email Adresa:"
-      hide_user: mshife kët shfrytëzues
-      if set location: Nqofse e zgedh venin, shum harta edhe sene kan me u paraqit ktu. Ju muni me caktu venin ton në %{settings_link} .
-      km away: "%{count}km larg"
-      m away: "%{count}m larg"
-      mapper since: "Hartues qe prej:"
-      moderator_history: shihe kan e ke blloku
+    no_such_user:
+      title: Ska ksi shfrytëzuesi
+      heading: Ky shfrytzues %{user} nuk egziston
+      body: Na vjen keq, ska shfrytëzues me kët emën %{user}. Ju lutemi kontrolloni
+        shkrimin, ose nashta linku ku keni kliku asht gabim.
+    view:
       my diary: ditari im
+      new diary entry: hyrje e re ne ditar
       my edits: ndryshimet e mia
-      my settings: preferencat e mia
       my traces: gjurmët e mia
-      nearby users: Shfrytëzuesit e tjer që jan afër
-      new diary entry: hyrje e re ne ditar
-      no friends: Hala nuk ke shtue asni shoq.
-      no nearby users: Hala nuk ka shfrytëzues që pranon hartimin e aftërt.
+      my settings: preferencat e mia
       oauth settings: ndrryshimet per autorizim
+      blocks on me: bllokimet e mia
+      blocks by me: bllokimet e dhana nga un
+      send message: dërgo mesazh
+      diary: ditari
+      edits: ndryshimet
+      traces: gjurmet
       remove as friend: heke si shok
-      role: 
+      add as friend: shtoje si shoq
+      mapper since: 'Hartues qe prej:'
+      ago: (para %{time_in_words_ago})
+      email address: 'Email Adresa:'
+      created from: 'U krijue prej:'
+      status: 'Statuti:'
+      spam score: 'Piket e Badihavgjive:'
+      description: Përshkrimi
+      user location: Veni i shfrytëzuesit
+      if set location: Nqofse e zgedh venin, shum harta edhe sene kan me u paraqit
+        ktu. Ju muni me caktu venin ton në %{settings_link} .
+      settings_link_text: ndryshimet
+      your friends: Shokt e tu
+      no friends: Hala nuk ke shtue asni shoq.
+      km away: '%{count}km larg'
+      m away: '%{count}m larg'
+      nearby users: Shfrytëzuesit e tjer që jan afër
+      no nearby users: Hala nuk ka shfrytëzues që pranon hartimin e aftërt.
+      role:
         administrator: Ky shfrytëzues asht aministrator
-        grant: 
+        moderator: Ky shfrytëzues asht moderator
+        grant:
           administrator: Banu administrator
           moderator: Banu moderator
-        moderator: Ky shfrytëzues asht moderator
-        revoke: 
+        revoke:
           administrator: Riqoje aksesin e administratorit
           moderator: Riqoje aksesin e moderatorit
-      send message: dërgo mesazh
-      settings_link_text: ndryshimet
-      spam score: "Piket e Badihavgjive:"
-      status: "Statuti:"
-      traces: gjurmet
+      block_history: shih blokimet e marrne
+      moderator_history: shihe kan e ke blloku
+      create_block: blloko ket shfrytzues
+      activate_user: aktivizo kët shfrytezues
+      deactivate_user: ç'aktivizoje kët shfrytezues
+      confirm_user: konfirmo ket perdorus
+      hide_user: mshife kët shfrytëzues
       unhide_user: shfaqe kët shfrytzues
-      user location: Veni i shfrytëzuesit
-      your friends: Shokt e tu
-  user_block: 
-    blocks_by: 
-      empty: "%{name} nuk ka bërë ndonjë blloqe ende."
-      heading: Lista e blloqeve me %{name}
-      title: Blloqe me %{name}
-    blocks_on: 
-      empty: "%{name} nuk është bllokuar akoma."
-      heading: Lista e blloqeve në %{name}
-      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.
-    edit: 
+      delete_user: fshije kët shfrytzues
+      confirm: Konfirmo
+    popup:
+      your location: Vendi juej
+      nearby mapper: Hartues i aftërt
+      friend: Shoq
+    account:
+      title: Ndrysho akountin
+      my settings: Preferencat e mia
+      current email address: 'Email adresa e tanishme:'
+      new email address: 'Email adresa e re:'
+      email never displayed publicly: (asniher su kan publike)
+      public editing:
+        heading: 'Ndryshime publike:'
+        enabled: E pranishme. Jo anonime dhe muni me i ndryshue t'dhanat.
+        enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
+        enabled link text: çka osht kjo?
+        disabled: E çkyckur dhe smuni me i ndryshu të dhanat, të gjitha ndryshimet
+          e ma hershme jan anonime.
+        disabled link text: pse spo muj me i ndryshue?
+      public editing note:
+        heading: Duke ndryshue publikisht
+        text: Niher për niher ndryshimet e juaja janë anonime dhe njerëzit nuk mund
+          të ju dërgojnë mesazhe apo shohin vendndodhjen tuaj. Për të treguar atë
+          që e keni edituar dhe lejojnë njerëzit të lidhen me ju nëpërmjet internetit,
+          kliko butonin më poshtë. <b> Që nga ndryshimi 0,6 API, vetëm përdoruesit
+          e publikut mund të redaktoni të dhënat hartë </ b>. (<a Href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">
+          gjeni se pse </ a>). <ul> <li> Adresa juaj e emailit nuk do të zbulohet
+          duke u bërë publik. </ Li > <li> Ky veprim nuk mund të kthehet dhe të gjithë
+          përdoruesit e rinj janë tashmë publik nga default. </ li> </ ul>
+      profile description: 'Pershkrimi i profilit:'
+      preferred languages: 'Gjuhët e parapëlqyme:'
+      image: 'Imazhi:'
+      new image: Shto ni imazh
+      keep image: Maje imazhin e tanishëm
+      delete image: Heke imazhin e tanishëm
+      replace image: Ndryshoje imazhin e tanishëm
+      image size hint: (imazhet katrore s'paku me madhsi 100x100px doken ma mir)
+      home location: 'Veni juej:'
+      no home location: Ju se keni caktu venin e juj.
+      latitude: 'Latituda:'
+      longitude: 'Longituda:'
+      update home location on click: Ndryshoma venin kur të klikoj në hart?
+      save changes button: Ruaj Ndryshimet
+      make edits public button: Boni gjith ndryshimet e mija publike
+      return to profile: Kthehu te profili
+      flash update success confirm needed: Informatat e shfyrtezuesit u ndryshan me
+        sukses. Shihni emailin per konfirmim.
+      flash update success: Informatat e shfrytëzuesit u ndryshuan me sukses.
+    confirm:
+      heading: Konfirmo nje akount te shfrytezuesit
+      press confirm button: Shtype butonin e konfirmimit ma posht që me mujt me aktivizue
+        akountin e juej
+      button: Konfirmo
+    confirm_email:
+      heading: Konfirmo ni ndryshim te email adreses
+      press confirm button: Truse butonin për konfirmim për me konfirmu email adresën
+        tone të re.
+      button: Konfirmo
+      success: Konfirmo email adresën tone, ju faleminderit për regjistrim!
+      failure: Ni email adres tashma osht konfirmue me kët token.
+    set_home:
+      flash success: Veni i shpis u ruajt me sukses
+    go_public:
+      flash success: Gjitha ndryshimet tuja janë publike tash, edhe tash t'lejohet
+        me ndryshue
+    make_friend:
+      success: '%{name} është shok/shoqe jot/e.'
+      failed: Na vjen keq, dështuam ta shtojm %{name} si shok/qe.
+      already_a_friend: Ju tashma jeni shok me %{name}.
+    remove_friend:
+      success: '%{name} u hek pi shokve tu'
+      not_a_friend: '%{name} nuk osht njoni pi shokve tu.'
+    filter:
+      not_an_administrator: Ju duhet të jeni administrator për me kry kët veprim.
+    list:
+      title: Perdoruesit
+      heading: Perdoruesit
+      showing:
+        one: Tu e kallxu faqen %{page} (%{first_item} prej %{items})
+        other: Tu e kallxu faqen %{page} (%{first_item}-%{last_item} prej %{items})
+      summary: '%{name} u kriju prej %{ip_address} në %{date}'
+      summary_no_ip: '%{name} u krijue me %{date}'
+      confirm: Konfirmo Anëtarët e Selektum
+      hide: Mshefi Perdorust e Zgjedhun
+      empty: Asni perputhje e perdoruesve nuk asht gjetun
+    suspended:
+      title: Llogaria u Suspendu
+      heading: Llogaria u Suspendu
+      webmaster: webmaster
+      body: |-
+        <p>
+          Me na fal, por llogaria juaj automatikisht osht suspendu
+          për shkak të aktivitetit të dyshimt.
+        </p>
+        <p>
+          Ky vendim së shpejti ka mu rishiku prej një administratori, ose
+          ju muni me kontaktu me %{webmaster} nëse doni me diskutu ma shumë.
+        </p>
+  user_role:
+    filter:
+      not_an_administrator: Veç administratorat munen me pas rol të menaxhimit, dhe
+        ju nuk jeni administrator.
+      not_a_role: Lidhja `%{role}' nuk asht rol valid.
+      already_has_role: Shfrytzuesi tashmë ka ni rol %{role}.
+      doesnt_have_role: Ky shfrytzeus nuk ka asni rrol %{role}
+    grant:
+      title: Konfirmo dhanjen e rolit
+      heading: Konfirmo dhenjen e rolit
+      are_you_sure: A jeni i sigurt që po doni mja dhonë rolin `%{role}' te përdoruesi
+        `%{name}'?
+      confirm: Konfirmo
+      fail: Nuk i dha rol tmadh `%{role}' te perdoruesi `%{name}'. Ju lutna kontrollone
+        perdoruesin dhe rolin qe a jane te dzte valid.
+    revoke:
+      title: Konfirmoje rolin duke e zgjuar
+      heading: Konfirmoje folin duke e zgjuar
+      are_you_sure: A jeni i sigurt qe ju doni me zgjue rolin `%{role}' prej perdoruesit
+        `%{name}'?
+      confirm: Konfirmo
+      fail: Nuk munet me zgjue folin `%{role}' prej perdoruesit `%{name}'. Ju lutem
+        kontrolloje perdoruesin edhe rolin a jane te dyte valid.
+  user_block:
+    model:
+      non_moderator_update: Duhet të jetë një moderator për të krijuar ose rinovuar
+        një bllok.
+      non_moderator_revoke: Duni me kon moderator për me hek një bllokim.
+    not_found:
+      sorry: Na vjen keq, blloku përdorues me ID %{id} nuk mund të gjendet.
+      back: Kthehu tek Indeksi
+    new:
+      title: Krijimi i bllokuar në %{name}
+      heading: Krijimi i bllokuar në %{name}
+      reason: Arsyja pse %{name} osht blloku. Ju lutem bëhuni sa më i qet dhe arsyeshëm
+        që osht e mundshme, tu dhon sa ma shumë detaje që muni rreth situatës, tu
+        e mbajt në men që mesazhi munet me u pa prej publikut. Maje në men se jo krejt
+        anëtarët e kuptojn gjuhën e komunitetit, pra ju lutem munoni me përdor terma
+        të mirë.
+      period: Sa kohë, duke filluar nga tani, përdoruesi do të bllokohet nga API për.
+      submit: bllok Krijo
+      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.
+      needs_view: Përdoruesi duhet të hyni në para këtij blloku do të pastrohen
       back: Shiko të gjitha blloqet e
+    edit:
+      title: Editimi bllokuar në %{name}
       heading: Editimi bllokuar në %{name}
-      needs_view: A i përdoruesit duhet të identifikoheni për para këtij blloku do të fshihet?
+      reason: Arsyeja pse %{name} është bllokuar. Ju lutemi të jetë si të qetë dhe
+        të arsyeshme të jetë e mundur, duke i dhënë sa më shumë hollësi si ju mund
+        të lidhur me situatën. Të ketë parasysh se jo të gjithë përdoruesit e kuptojnë
+        zhargon komunitetit, kështu që ju lutemi provoni të përdorni laymans kushtet.
       period: Sa kohë, duke filluar nga tani, përdoruesi do të bllokohet nga API për.
-      reason: Arsyeja pse %{name} është bllokuar. Ju lutemi të jetë si të qetë dhe të arsyeshme të jetë e mundur, duke i dhënë sa më shumë hollësi si ju mund të lidhur me situatën. Të ketë parasysh se jo të gjithë përdoruesit e kuptojnë zhargon komunitetit, kështu që ju lutemi provoni të përdorni laymans kushtet.
-      show: Shiko këtë bllok
       submit: bllok Update
-      title: Editimi bllokuar në %{name}
-    filter: 
+      show: Shiko këtë bllok
+      back: Shiko të gjitha blloqet e
+      needs_view: A i përdoruesit duhet të identifikoheni për para këtij blloku do
+        të fshihet?
+    filter:
       block_expired: Blloku ka skaduar dhe nuk mund të redaktohen.
-      block_period: Periudha e bllokuar duhet të jetë një nga vlerat selectable në drop-down list.
-    helper: 
-      time_future: Përfundon në %{time}.
-      time_past: Përfundoi %{time} më parë.
-      until_login: Aktiv deri kur përdoruesi shkrimet in
-    index: 
-      empty: Nuk ka blloqe janë bërë ende.
-      heading: Lista e blloqeve përdorues
+      block_period: Periudha e bllokuar duhet të jetë një nga vlerat selectable në
+        drop-down list.
+    create:
+      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.
+      flash: Krijuar një bllok të përdorues %{name}.
+    update:
+      only_creator_can_edit: Vetëm moderatori i cili krijoi këtë bllok mund ta redaktojnë.
+      success: Block përditësuar.
+    index:
       title: blloqe Përdoruesi
-    model: 
-      non_moderator_revoke: Duni me kon moderator për me hek një bllokim.
-      non_moderator_update: Duhet të jetë një moderator për të krijuar ose rinovuar një bllok.
-    new: 
-      back: Shiko të gjitha blloqet e
-      heading: Krijimi i bllokuar në %{name}
-      needs_view: Përdoruesi duhet të hyni në para këtij blloku do të pastrohen
-      period: Sa kohë, duke filluar nga tani, përdoruesi do të bllokohet nga API për.
-      reason: Arsyja pse %{name} osht blloku. Ju lutem bëhuni sa më i qet dhe arsyeshëm që osht e mundshme, tu dhon sa ma shumë detaje që muni rreth situatës, tu e mbajt në men që mesazhi munet me u pa prej publikut. Maje në men se jo krejt anëtarët e kuptojn gjuhën e komunitetit, pra ju lutem munoni me përdor terma të mirë.
-      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.
-    not_found: 
-      back: Kthehu tek Indeksi
-      sorry: Na vjen keq, blloku përdorues me ID %{id} nuk mund të gjendet.
-    partial: 
-      confirm: A jeni i sigurt?
-      creator_name: Krijuesi
-      display_name: Përdoruesi Blocked
-      edit: Redaktoj
-      not_revoked: (Jo revokuar)
-      reason: Arsyeja për bllok
-      revoke: Tërheq!
-      revoker_name: Revokuar nga ana
-      show: Tregoj
-      status: Statusi
-    period: 
-      one: 1 orë
-      other: "%{count} orë"
-    revoke: 
-      confirm: Jeni i sigurt që dëshironi të revokuar kete kategori?
-      flash: Ky bllok është revokuar.
+      heading: Lista e blloqeve përdorues
+      empty: Nuk ka blloqe janë bërë ende.
+    revoke:
+      title: Revokimin e bllokuar në %{block_on}
       heading: Revokimin e bllokuar në %{block_on} nga %{block_by}
+      time_future: Ky bllok do të përfundojë në %{time}.
       past: Ky bllok u mbyll %{time} më parë dhe nuk mund të kthehet tani.
+      confirm: Jeni i sigurt që dëshironi të revokuar kete kategori?
       revoke: Tërheq!
-      time_future: Ky bllok do të përfundojë në %{time}.
-      title: Revokimin e bllokuar në %{block_on}
-    show: 
-      back: Shiko të gjitha blloqet
-      confirm: A jeni i sigurt?
+      flash: Ky bllok është revokuar.
+    period:
+      one: 1 orë
+      other: '%{count} orë'
+    partial:
+      show: Tregoj
       edit: Redaktoj
-      heading: "%{block_on} bllokuar nga %{block_by}"
-      needs_view: Shfrytëzuesi duhet të hyj para se të fshihet ky bllok.
-      reason: "Arsyeja për bllok:"
       revoke: Tërheq!
-      revoker: "Revoker:"
-      show: Tregoj
+      confirm: A jeni i sigurt?
+      display_name: Përdoruesi Blocked
+      creator_name: Krijuesi
+      reason: Arsyeja për bllok
       status: Statusi
+      revoker_name: Revokuar nga ana
+      not_revoked: (Jo revokuar)
+    helper:
+      time_future: Përfundon në %{time}.
+      until_login: Aktiv deri kur përdoruesi shkrimet in
+      time_past: Përfundoi %{time} më parë.
+    blocks_on:
+      title: Blocks në %{name}
+      heading: Lista e blloqeve në %{name}
+      empty: '%{name} nuk është bllokuar akoma.'
+    blocks_by:
+      title: Blloqe me %{name}
+      heading: Lista e blloqeve me %{name}
+      empty: '%{name} nuk ka bërë ndonjë blloqe ende.'
+    show:
+      title: '%{block_on} bllokuar nga %{block_by}'
+      heading: '%{block_on} bllokuar nga %{block_by}'
       time_future: Përfundon në %{time}
       time_past: Përfundoi %{time} më parë
-      title: "%{block_on} bllokuar nga %{block_by}"
-    update: 
-      only_creator_can_edit: Vetëm moderatori i cili krijoi këtë bllok mund ta redaktojnë.
-      success: Block përditësuar.
-  user_role: 
-    filter: 
-      already_has_role: Shfrytzuesi tashmë ka ni rol %{role}.
-      doesnt_have_role: Ky shfrytzeus nuk ka asni rrol %{role}
-      not_a_role: Lidhja `%{role}' nuk asht rol valid.
-      not_an_administrator: Veç administratorat munen me pas rol të menaxhimit, dhe ju nuk jeni administrator.
-    grant: 
-      are_you_sure: A jeni i sigurt që po doni mja dhonë rolin `%{role}' te përdoruesi `%{name}'?
-      confirm: Konfirmo
-      fail: Nuk i dha rol tmadh `%{role}' te perdoruesi `%{name}'. Ju lutna kontrollone perdoruesin dhe rolin qe a jane te dzte valid.
-      heading: Konfirmo dhenjen e rolit
-      title: Konfirmo dhanjen e rolit
-    revoke: 
-      are_you_sure: A jeni i sigurt qe ju doni me zgjue rolin `%{role}' prej perdoruesit `%{name}'?
-      confirm: Konfirmo
-      fail: Nuk munet me zgjue folin `%{role}' prej perdoruesit `%{name}'. Ju lutem kontrolloje perdoruesin edhe rolin a jane te dyte valid.
-      heading: Konfirmoje folin duke e zgjuar
-      title: Konfirmoje rolin duke e zgjuar
+      status: Statusi
+      show: Tregoj
+      edit: Redaktoj
+      revoke: Tërheq!
+      confirm: A jeni i sigurt?
+      reason: 'Arsyeja për bllok:'
+      back: Shiko të gjitha blloqet
+      revoker: 'Revoker:'
+      needs_view: Shfrytëzuesi duhet të hyj para se të fshihet ky bllok.
+  javascripts:
+    map:
+      base:
+        cycle_map: Cikli Harta
+    site:
+      edit_tooltip: Edit Harta
+      edit_disabled_tooltip: Zoom në hartë për të redaktuar
+...
index d4164814bbb19bf422d07d13fae9c2d0d1be9bea..a0e39b5da7392c0e6e26caac1b344ed3b7a8a2b6 100644 (file)
@@ -1,6 +1,6 @@
 # Messages for Arabic (العربية)
 # Exported from translatewiki.net
-# Export driver: syck-pecl
+# Export driver: phpyaml
 # Author: Ali1
 # Author: Aude
 # Author: Bassem JARKAS
 # Author: TTMTT
 # Author: Zaher kadour
 # Author: ترجمان05
+# Author: عباد ديرانية
 # Author: عبد الرحمان أيمن
-ar: 
-  activerecord: 
-    attributes: 
-      diary_comment: 
-        body: نص الرسالة
-      diary_entry: 
-        language: اللغة
-        latitude: خط العرض
-        longitude: خط الطول
-        title: العنوان
-        user: المستخدم
-      friend: 
-        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: 
+---
+ar:
+  html:
+    dir: rtl
+  time:
+    formats:
+      friendly: '%e %B %Y في %H:%M'
+  activerecord:
+    models:
       acl: لائحة التحكم بالوصول
       changeset: حزمة التغييرات
       changeset_tag: سمة حزمة التغييرات
@@ -85,248 +59,304 @@ ar:
       way: طريق
       way_node: عقدة طريق
       way_tag: سمة طريق
-  application: 
-    require_cookies: 
-      cookies_needed: يبدو أن الكوكيز عندك معطلة - يرجى تفعيل الكوكيز في متصفحك قبل المتابعة.
-    require_moderator: 
-      not_a_moderator: عليك أن تكون وسيط لتنفيذ هذا الإجراء
-    setup_user_auth: 
-      blocked: لقد تم عرقلة وصولك إلى الـ API. يرجى تسجيل الدخول من صفحة الموقع لمعرفة المزيد.
-  browse: 
+    attributes:
+      diary_comment:
+        body: نص الرسالة
+      diary_entry:
+        user: المستخدم
+        title: الموضوع
+        latitude: خط العرض
+        longitude: خط الطول
+        language: اللغة
+      friend:
+        user: المستخدم
+        friend: صديق
+      trace:
+        user: المستخدم
+        visible: ظاهر
+        name: الاسم
+        size: الحجم
+        latitude: خط العرض
+        longitude: خط الطول
+        public: علني
+        description: الوصف
+      message:
+        sender: المرسل
+        title: الموضوع
+        body: نص الرسالة
+        recipient: المستلم
+      user:
+        email: البريد الإلكتروني
+        active: نشط
+        display_name: الاسم الظاهر
+        description: الوصف
+        languages: اللغات
+        pass_crypt: كلمة السر
+  editor:
+    default: الغيابي (حالياً %{name})
+    potlatch:
+      name: Potlatch 1
+      description: Potlatch 1 (محرّر ضمن المتصفح)
+    id:
+      name: معرّف
+    potlatch2:
+      name: Potlatch 2
+      description: Potlatch 2 (محرّر ضمن المتصفح)
+    remote:
+      name: تحكم عن بعد
+      description: تحكم عن بعد (JOSM أو Merkaartor)
+  browse:
+    created: تم الإنشاء
+    closed: تم الإغلاق
+    created_html: تم الإغلاق قبل <abbr title='%{title}'>%{time}</abbr>
+    closed_html: تم الإغلاق قبل <abbr title='%{title}'>%{time}</abbr>
+    created_by_html: تم الإنشاء قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
+    deleted_by_html: تم الحذف قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
+    edited_by_html: تم التعديل قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
+    closed_by_html: تم الإغلاق قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
+    version: الإصدار
+    in_changeset: مجموعة تغييرات
     anonymous: مجهول
-    changeset: 
+    no_comment: (لا تعليق)
+    part_of: جزء من
+    download_xml: حمّل XML
+    view_history: شاهد التاريخ
+    view_details: شاهد التفاصيل
+    location: 'الموقع:'
+    changeset:
+      title: حزمة التغييرات %{id}
+      belongs_to: الصانع
       changesetxml: حزمة التغييرات إكس إم أل
-      feed: 
+      feed:
         title: حزمة التغييرات %{id}
         title_comment: حزمة التغييرات %{id} - %{comment}
-      title: حزمة التغييرات
-    containing_relation: 
+    relation:
+      members: الأعضاء
+    relation_member:
+      entry_role: '%{type} %{name} كــ %{role}'
+      type:
+        node: عقدة
+        way: طريق
+        relation: علاقة
+    containing_relation:
       entry: العلاقة %{relation_name}
       entry_role: العلاقة %{relation_name} (كــ %{relation_role})
-    location: "الموقع:"
-    no_comment: (لا تعليق)
-    not_found: 
-      sorry: "عفوًا، تعذر العثور على %{type} #%{id}."
-      type: 
-        changeset: حزمة التغييرات
+    not_found:
+      sorry: 'عفوًا، تعذر العثور على %{type} #%{id}.'
+      type:
         node: عقدة
-        relation: علاقة
         way: طريق
-    note: 
-      closed_title: "ملاحظات محلولة: %{note_name}"
-      description: الوصف
-      open_title: "ملاحظة لم يتم حلها: %{note_name}"
-      title: "ملاحظة: %{id}"
-    redacted: 
+        relation: علاقة
+        changeset: حزمة التغييرات
+    timeout:
+      sorry: عذرًا، بيانات %{type} بالمعرّف %{id} استغرقت وقتًا طويلا للاسترداد.
+      type:
+        node: العقدة
+        way: الطريق
+        relation: العلاقة
+        changeset: حزمة التغييرات
+    redacted:
       redaction: التنقيح %{id}
-      type: 
+      message_html: لا يمكن إظهار الإصدارة  %{version} من هذا %{type} لأن صياغتها
+        غُيِّرت، رجاءً اطلع على %{redaction_link} للمزيد من التفاصيل
+      type:
         node: العقدة
-        relation: علاقة
         way: طريق
-    relation_member: 
-      entry_role: "%{type} %{name} كــ %{role}"
-      type: 
-        node: عقدة
         relation: علاقة
-        way: طريق
-    start_rjs: 
+    start_rjs:
+      feature_warning: يجري تحميل ميزات %{num_features}، والتي يمكن أن تجعل متصفّحك
+        بطيئاً أو عديم الاستجابة. هل أنت متأكد من رغبتك بعرض هذه البيانات؟
       load_data: تحميل البيانات
       loading: جاري التحميل...
-    tag_details: 
+    tag_details:
       tags: الوسوم
+      wiki_link:
+        key: صفحة وصف الويكي لعلامة %{key}
+        tag: صفحة وصف الويكي لعلامة %{key}=%{value}
+      wikidata_link: صفحة %{page} على ويكي داتا
       wikipedia_link: الـ%{page} مقالة على ويكيبيديا
-    timeout: 
-      sorry: عذرًا، بيانات %{type} بالمعرّف %{id} استغرقت وقتًا طويلا للاسترداد.
-      type: 
-        changeset: حزمة التغييرات
-        node: العقدة
-        relation: العلاقة
-        way: الطريق
-    version: الإصدار
-  changeset: 
-    changeset: 
+      telephone_link: اتصل بـ %{phone_number}
+    note:
+      title: 'ملاحظة: %{id}'
+      new_note: ملاحظة جديدة
+      description: الوصف
+      open_title: 'ملاحظة لم يتم حلها: %{note_name}'
+      closed_title: 'ملاحظات محلولة: %{note_name}'
+      hidden_title: 'ملاحظة مخفيّة #%{note_name}'
+      open_by: أنشأه المستخدم %{user} قبل <abbr title='%{exact_time}'>%{when}</abbr>
+      open_by_anonymous: أنشأه مستخدم مجهول قبل  <abbr title='%{exact_time}'>%{when}
+        </abbr>
+      commented_by: تعليق من %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      commented_by_anonymous: تعليق من مجهول قبل <abbr title='%{exact_time}'>%{when}
+        </abbr>
+      closed_by: حلّه %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      closed_by_anonymous: حلّه مجهول قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      reopened_by: أعاد تنشيطه %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      reopened_by_anonymous: أعاد تنشيطه مجهول قبل <abbr title='%{exact_time}'>%{when}
+        </abbr>
+      hidden_by: أخفاه %{user} قبل <abbr title='%{exact_time}'>%{when} =</abbr>
+  changeset:
+    changeset_paging_nav:
+      showing_page: الصفحة %{page}
+      next: التالي »
+      previous: «السابق
+    changeset:
       anonymous: مجهول
       no_edits: (لا تعديلات)
       view_changeset_details: اعرض تفاصيل حزمة التغييرات
-    changeset_paging_nav: 
-      next: التالي »
-      previous: «السابق
-      showing_page: الصفحة %{page}
-    changesets: 
-      area: منطقة
-      comment: التعليق
+    changesets:
       id: رقم
       saved_at: حُفظ في
       user: المستخدم
-    list: 
+      comment: التعليق
+      area: منطقة
+    list:
       title: حزم التغييرات
+      title_user: حزم التغييرات بواسطة %{user}
       title_friend: حزم التغييرات بواسطة أصدقائك
       title_nearby: تغييرات من قبل مستخدمين قريبين
-      title_user: حزم التغييرات بواسطة %{user}
-    timeout: 
+      empty: لم يُعثَر على أي حزم تغييرات.
+      empty_area: لم يُعثَر على أي حزم تغييرات في هذه المنطقة.
+      empty_user: لم يُعثَر على أي حزم تغييرات لهذا المستخدم.
+      no_more: لم يُعثَر على حزم تغييرات أخرى.
+      no_more_area: لم يُعثَر على حزم تغييرات أخرى في هذه المنطقة.
+      no_more_user: ' يُعثَر على حزم تغييرات أخرى لهذا المستخدم.'
+      load_more: حمِّل المزيد؟
+    timeout:
       sorry: عذراً، لقد إستمرت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب.
-  diary_entry: 
-    comments: 
-      ago: "%{ago} سابقاً"
-      comment: التعليق
-      has_commented_on: "%{display_name} علّق على مدخلات اليومية التالية"
-      newer_comments: التعليقات الجديدة
-      older_comments: التعليقات القديمة
-      post: إرسال
-      when: متى
-    diary_comment: 
-      comment_from: تعليق من %{link_user}  في %{comment_created_at}
-      confirm: أكّد
-      hide_link: اخفِ هذا التعليق
-    diary_entry: 
-      comment_count: 
-        few: "%{count} تعليقات"
-        one: تعليق واحد
-        other: "%{count} تعليق"
-        two: تعليقان
-        zero: لا تعليق
-      comment_link: علّق على هذه المدخلة
-      confirm: أكّد
-      edit_link: عدّل هذه المدخلة
-      hide_link: اخفِ هذه المدخلة
-      posted_by: أُرسل بواسطة %{link_user} في %{created} باللغة %{language_link}
-      reply_link: رد برسالة
-    edit: 
-      body: "نص الرسالة:"
-      language: "اللغة:"
-      latitude: "خط العرض:"
-      location: "الموقع:"
-      longitude: "خط الطول:"
-      marker_text: موقع مدخلة اليومية
-      save_button: احفظ
-      subject: "الموضوع:"
-      title: عدّل مدخلة يومية
-      use_map_link: استخدم الخريطة
-    feed: 
-      all: 
-        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة
-        title: مدخلات اليومية في خريطة الشارع المفتوحة
-      language: 
-        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة باللغة %{language_name}
-        title: مدخلات يومية خريطة الشارع المفتوحة باللغة %{language_name}
-      user: 
-        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة بواسطة المستخدم %{user}
-        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم %{user}
-    list: 
+  diary_entry:
+    new:
+      title: مدخلة يومية جديدة
+    list:
+      title: يوميات المستخدمين
+      title_friends: يوميات الأصدقاء
+      title_nearby: يوميات/مفكرات المستخدمين في المقبرة
+      user_title: يومية %{user}
       in_language_title: مدخلات اليومية باللغة %{language}
       new: مدخلة يومية جديدة
       new_title: اكتب مدخلة يومية جديدة في يوميتك
-      newer_entries: المدخلات الأحدث
       no_entries: لا يوجد مدخلات يومية
-      older_entries: المدخلات الأقدم
       recent_entries: إدخالات يوميات الحديثة
-      title: يوميات المستخدمين
-      title_friends: يوميات الأصدقاء
-      title_nearby: يوميات/مفكرات المستخدمين في المقبرة
+      older_entries: المدخلات الأقدم
+      newer_entries: المدخلات الأحدث
+    edit:
+      title: عدّل مدخلة يومية
+      subject: 'الموضوع:'
+      body: 'نص الرسالة:'
+      language: 'اللغة:'
+      location: 'الموقع:'
+      latitude: 'خط العرض:'
+      longitude: 'خط الطول:'
+      use_map_link: استخدم الخريطة
+      save_button: احفظ
+      marker_text: موقع مدخلة اليومية
+    view:
+      title: يوميات %{user} | %{title}
       user_title: يومية %{user}
-    location: 
-      edit: تعديل
-      location: "الموقع:"
-      view: اعرض
-    new: 
-      title: مدخلة يومية جديدة
-    no_such_entry: 
-      body: عذرًا، لا يوجد مدخلة يومية أو تعليق بالمعرّف %{id}. يرجى تدقيق التهجئة، أو ربما يكون الرابط الذي تم النقر عليه خاطئ.
-      heading: "لا يوجد مدخلة بالمعرّف: %{id}"
-      title: مدخلة يومية غير موجودة
-    view: 
       leave_a_comment: اترك تعليقًا
+      login_to_leave_a_comment: '%{login_link} لترك تعليق'
       login: تسجيل الدخول
-      login_to_leave_a_comment: "%{login_link} لترك تعليق"
       save_button: احفظ
-      title: يوميات %{user} | %{title}
-      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: أضف علامة على الخريطة
+    no_such_entry:
+      title: مدخلة يومية غير موجودة
+      heading: 'لا يوجد مدخلة بالمعرّف: %{id}'
+      body: عذرًا، لا يوجد مدخلة يومية أو تعليق بالمعرّف %{id}. يرجى تدقيق التهجئة،
+        أو ربما يكون الرابط الذي تم النقر عليه خاطئ.
+    diary_entry:
+      posted_by: أُرسل بواسطة %{link_user} في %{created} باللغة %{language_link}
+      comment_link: علّق على هذه المدخلة
+      reply_link: رد برسالة
+      comment_count:
+        few: '%{count} تعليقات'
+        one: تعليق واحد
+        two: تعليقان
+        zero: لا تعليق
+        other: '%{count} تعليق'
+      edit_link: عدّل هذه المدخلة
+      hide_link: اخفِ هذه المدخلة
+      confirm: أكّد
+    diary_comment:
+      comment_from: تعليق من %{link_user}  في %{comment_created_at}
+      hide_link: اخفِ هذا التعليق
+      confirm: أكّد
+    location:
+      location: 'الموقع:'
+      view: اعرض
+      edit: تعديل
+    feed:
+      user:
+        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم %{user}
+        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة بواسطة المستخدم
+          %{user}
+      language:
+        title: مدخلات يومية خريطة الشارع المفتوحة باللغة %{language_name}
+        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة باللغة
+          %{language_name}
+      all:
+        title: مدخلات اليومية في خريطة الشارع المفتوحة
+        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة
+    comments:
+      has_commented_on: '%{display_name} علّق على مدخلات اليومية التالية'
+      post: إرسال
+      when: متى
+      comment: التعليق
+      ago: '%{ago} سابقاً'
+      newer_comments: التعليقات الجديدة
+      older_comments: التعليقات القديمة
+  export:
+    title: صدِّر
+    start:
       area_to_export: المنطقة المطلوب تصديرها
-      embeddable_html: HTML مضمن
-      export_button: صدِّر
-      export_details: بيانات خريطة الشارع المفتوحة مرخصة تحت <a href="http://opendatacommons.org/licenses/odbl/1.0/">رخصة قاعدة البيانات المفتوحة المشاعة </a>.
-      format: الهيئة
-      format_to_export: الهيئة المطلوب تصديرها
-      image_size: حجم الصورة
-      latitude: "خط العرض:"
-      licence: الرخصة
-      longitude: "خط الطول:"
       manually_select: اختر يدويًا منطقة أخرى
+      format_to_export: الهيئة المطلوب تصديرها
+      osm_xml_data: معطيات خريطة الطريق المفتوح بنسق إكس أم أل
       map_image: صورة الخريطة (عرض الطبقة الإفتراضية)
-      max: الأقصى
+      embeddable_html: HTML مضمن
+      licence: الرخصة
+      export_details: بيانات خريطة الشارع المفتوحة مرخصة تحت <a href="http://opendatacommons.org/licenses/odbl/1.0/">رخصة
+        قاعدة البيانات المفتوحة المشاعة </a>.
+      too_large:
+        advice: 'إذا فشل التصدير أعلاه، فكّر من فضلك باستخدام أحد المصادر الموضَّحة
+          أدناه:'
+        body: 'هذه المنطقة كبيرة جدًا للتصدير على هيئة بيانات إكس إم إل لخريطة الشارع
+          المفتوحة. يرجى تكبير الخريطة أو استخدام منطقة أصغر أو استخدام أحد المصادر
+          التالية لتنزيل البيانات الضخمة:'
+        planet:
+          title: كوكب OSM
+          description: نسخ محدثة بشكل دوري من قاعدة بيانات خرائط الشوارع المفتوحة
+            OpenStreetMap
+        overpass:
+          title: تجاوز API
+        geofabrik:
+          title: تنزيلات موقع جيوفابريك
       options: خيارات
-      osm_xml_data: معطيات خريطة الطريق المفتوح بنسق إكس أم أل
-      output: الخرج
-      paste_html: ألصق HTML لتضمينه في موقع ما
+      format: الهيئة
       scale: القياس
-      too_large: 
-        body: "هذه المنطقة كبيرة جدًا للتصدير على هيئة بيانات إكس إم إل لخريطة الشارع المفتوحة. يرجى تكبير الخريطة أو استخدام منطقة أصغر أو استخدام أحد المصادر التالية لتنزيل البيانات الضخمة:"
-        geofabrik: 
-          title: تنزيلات موقع جيوفابريك
-        planet: 
-          description: نسخ محدثة بشكل دوري من قاعدة بيانات خرائط الشوارع المفتوحة OpenStreetMap
-          title: كوكب OSM
+      max: الأقصى
+      image_size: حجم الصورة
       zoom: تكبير
-  geocoder: 
-    description: 
-      title: 
-        geonames: موقع من <a href="http://www.geonames.org/">GeoNames</a>
-        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>
-      types: 
-        cities: مدن
-        places: أماكن
-        towns: بلدات
-    direction: 
-      east: شرق
-      north: شمال
-      north_east: شمال-شرق
-      north_west: شمال-غرب
-      south: جنوب
-      south_east: جنوب-شرق
-      south_west: جنوب-غرب
-      west: غرب
-    distance: 
-      one: حوالي 1 كم
-      other: حوالي %{count}كم
-      zero: أقل من 1 كم
-    results: 
-      more_results: المزيد من النتائج
-      no_results: لم يتم العثور على نتائج
-    search: 
-      title: 
-        ca_postcode: نتائج من <a href="http://geocoder.ca/">Geocoder.CA</a>
-        geonames: نتائج من <a href="http://www.geonames.org/">GeoNames</a>
+      add_marker: أضف علامة على الخريطة
+      latitude: 'خط العرض:'
+      longitude: 'خط الطول:'
+      output: الخرج
+      paste_html: ألصق HTML لتضمينه في موقع ما
+      export_button: صدِّر
+  geocoder:
+    search:
+      title:
         latlon: نتائج <a href="http://openstreetmap.org/">داخليًا</a>
-        osm_nominatim: نتائج من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap Nominatim</a>
-        uk_postcode: نتائج من <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>
         us_postcode: نتائج من <a href="http://geocoder.us/">Geocoder.us</a>
-    search_osm_nominatim: 
-      admin_levels: 
-        level10: حدود الضاحية
-        level2: حدود قطرية
-        level4: حدود الدولة
-        level5: حدود المنطقة
-        level6: حدود قطرية
-        level8: حدود المدينة
-        level9: حدود قرية
-      prefix: 
-        aerialway: 
+        uk_postcode: نتائج من <a href="http://www.npemap.org.uk/">NPEMap / FreeThe
+          Postcode</a>
+        ca_postcode: نتائج من <a href="http://geocoder.ca/">Geocoder.CA</a>
+        osm_nominatim: نتائج من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+          Nominatim</a>
+        geonames: نتائج من <a href="http://www.geonames.org/">GeoNames</a>
+    search_osm_nominatim:
+      prefix:
+        aerialway:
           station: محطة قطار هوائي
-        aeroway: 
+        aeroway:
           aerodrome: المطار
           apron: موقف طائرات
           gate: البوابة
@@ -334,8 +364,7 @@ ar:
           runway: مدرج إقلاع
           taxiway: مدرج المناورات
           terminal: صالة مطار
-        amenity: 
-          WLAN: نقطة إتصال لاسلكية
+        amenity:
           airport: مطار
           arts_centre: مركز فني/ثقافي
           artwork: عمل فني
@@ -434,24 +463,25 @@ ar:
           village_hall: مبنى/دار القرية
           waste_basket: سلة نفايات
           wifi: نقطة إتصال لاسلكية
+          WLAN: نقطة إتصال لاسلكية
           youth_centre: مركز نشاطات للشباب
-        boundary: 
+        boundary:
           administrative: حدود إدارية
           census: حدود تعدادية
           national_park: محمية وطنية
           protected_area: منطقة محمية
-        bridge: 
+        bridge:
           aqueduct: قنطرة
           suspension: جسر معلق
           swing: جسر متحرك
           viaduct: جسر
           "yes": جسر
-        building: 
+        building:
           "yes": مبنى
-        emergency: 
+        emergency:
           fire_hydrant: صنبور مياه الإطفاء
           phone: هاتف طوارئ
-        highway: 
+        highway:
           bridleway: مسلك خيول
           bus_guideway: مسار خاص للحافلات
           bus_stop: موقف حافلات
@@ -483,8 +513,8 @@ ar:
           services: خدمات الطرق السريعة
           speed_camera: كاميرا كشف السرعة
           steps: درج
-          stile: مرقى لعبور جدار
           street_lamp: مصباح شارع
+          stile: مرقى لعبور جدار
           tertiary: طريق فرعي
           tertiary_link: طريق فرعي
           track: مسار
@@ -493,7 +523,7 @@ ar:
           trunk_link: طريق رئيسي
           unclassified: طريق غير مصنّف
           unsurfaced: طريق غير معبد
-        historic: 
+        historic:
           archaeological_site: موقع أثري
           battlefield: ساحة معركة
           boundary_stone: حجر/صخرة تعليم حدود
@@ -515,7 +545,7 @@ ar:
           wayside_cross: صليب تذكاري
           wayside_shrine: مزار جانب طريق
           wreck: حطام
-        landuse: 
+        landuse:
           allotments: حصص سكنية
           basin: حوض
           brownfield: أرض مخلفات
@@ -535,8 +565,8 @@ ar:
           meadow: مرج
           military: منطقة عسكرية
           mine: منجم
-          nature_reserve: محمية طبيعية
           orchard: بستان
+          nature_reserve: محمية طبيعية
           park: منتزه
           piste: منطقة تزحلق
           quarry: كسّارة
@@ -550,7 +580,7 @@ ar:
           vineyard: كرم عنب
           wetland: أرض رطبة
           wood: حرج
-        leisure: 
+        leisure:
           beach_resort: شاطئ منتجع
           bird_hide: مخبئ طيور
           common: أرض مشاع
@@ -573,13 +603,13 @@ ar:
           swimming_pool: بركة سباحة
           track: مضمار سباق
           water_park: منتزه ألعاب مائية
-        military: 
+        military:
           airfield: منطقة عسكرية
           barracks: ثكنات
           bunker: دشمة
-        mountain_pass: 
+        mountain_pass:
           "yes": ممر جبلي
-        natural: 
+        natural:
           bay: خليج
           beach: شاطئ
           cape: رأس (أرض داخلة في البحر(
@@ -620,7 +650,7 @@ ar:
           wetland: أرض رطبة
           wetlands: أراضي رطبة
           wood: حرج
-        office: 
+        office:
           accountant: محاسب
           architect: مهندس معماري
           company: شركة
@@ -633,7 +663,7 @@ ar:
           telecommunication: مكتب شركة إتصالات
           travel_agent: وكيل سفريات
           "yes": مكتب
-        place: 
+        place:
           airport: مطار
           city: مدينة
           country: دولة
@@ -658,7 +688,7 @@ ar:
           town: بلدة
           unincorporated_area: منطقة فردية
           village: قرية
-        railway: 
+        railway:
           abandoned: سكة حديد مهجورة
           construction: سكة حديدية تحت الإنشاء
           disused: سكة حديد مهجورة
@@ -684,7 +714,7 @@ ar:
           tram: سكة ترام
           tram_stop: موقف ترام
           yard: فناء سكة حديد
-        shop: 
+        shop:
           alcohol: متجر كحول للبيع الخارجي
           antiques: تحف
           art: متجر فن
@@ -759,7 +789,7 @@ ar:
           video: متجر فيديو
           wine: متجر نبيذ للبيع الخارجي
           "yes": متجر
-        tourism: 
+        tourism:
           alpine_hut: كوخ جبلي
           artwork: عمل فني
           attraction: معلم سياحي
@@ -780,10 +810,10 @@ ar:
           valley: وادي
           viewpoint: موقع كاشف
           zoo: حديقة حيوانات
-        tunnel: 
+        tunnel:
           culvert: مجرى مائي
           "yes": نفق
-        waterway: 
+        waterway:
           artificial: مجرى ماء إصطناعي
           boatyard: حوض سفن
           canal: قناة
@@ -802,765 +832,874 @@ ar:
           riverbank: ضفة نهر
           stream: جدول
           wadi: وادي
-          water_point: نقطة ماء شفة
           waterfall: شلال
+          water_point: نقطة ماء شفة
           weir: هدار (سدّ منخفض)
-  html: 
-    dir: rtl
-  javascripts: 
-    map: 
-      base: 
-        cycle_map: خريطة للدراجات
-        transport_map: خريطة تنقلات
-    site: 
-      edit_disabled_tooltip: قم بالتكبير لتحرير الخريطة
-      edit_tooltip: عدّل الخريطة
-  layouts: 
-    community_blogs: مدونات المجتمع
-    community_blogs_title: مدونات لأعضاء من مجتمع خريطة الشارع المفتوحة
-    copyright: حقوق النسخ
-    data: البيانات
-    donate: ادعم خريطة الشارع المفتوحة ب%{link} لتمويل ترقية العتاد.
-    edit: تعديل
-    edit_with: حرر بإستعمال %{editor}
-    export: صدِّر
-    export_data: تصدير البيانات
-    foundation: المؤسسة
-    foundation_title: مؤسسة خريطة الشارع المفتوحة
-    gps_traces: آثار جي بي أس
-    gps_traces_tooltip: عالج آثار جي بي إس
-    help: مساعدة
-    history: تاريخ
+      admin_levels:
+        level2: حدود قطرية
+        level4: حدود الدولة
+        level5: حدود المنطقة
+        level6: حدود قطرية
+        level8: حدود المدينة
+        level9: حدود قرية
+        level10: حدود الضاحية
+    description:
+      title:
+        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+          Nominatim</a>
+        geonames: موقع من <a href="http://www.geonames.org/">GeoNames</a>
+      types:
+        cities: مدن
+        towns: بلدات
+        places: أماكن
+    results:
+      no_results: لم يتم العثور على نتائج
+      more_results: المزيد من النتائج
+    distance:
+      one: حوالي 1 كم
+      zero: أقل من 1 كم
+      other: حوالي %{count}كم
+    direction:
+      south_west: جنوب-غرب
+      south: جنوب
+      south_east: جنوب-شرق
+      east: شرق
+      north_east: شمال-شرق
+      north: شمال
+      north_west: شمال-غرب
+      west: غرب
+  layouts:
+    logo:
+      alt_text: شعار خريطة الشارع المفتوحة
     home: اذهب إلى الصفحة الرئيسية
-    intro_2_create_account: أنشئ حساب مستخدم
+    logout: سجل خروج
     log_in: لِج
     log_in_tooltip: سجّل الدخول مع حساب موجود
-    logo: 
-      alt_text: شعار خريطة الشارع المفتوحة
-    logout: سجل خروج
-    make_a_donation: 
-      text: تبرع
-      title: ادعم خريطة الشارع المفتوحة بهبة نقدية
-    osm_offline: حاليًا قاعدة بيانات خريطة الشارع المفتوحة مغلقة بينما يتم الانتهاء من أعمال الصيانة الأساسية لقاعدة البيانات.
-    osm_read_only: حاليًا قاعدة بيانات خريطة الشارع المفتوحة في وضع القراءة بينما يتم الانتهاء من أعمال الصيانة الأساسية لقاعدة البيانات.
-    partners_html: الضيافة مدعومة من %{ucl}, %{ic} و %{bytemark}, و %{partners} آخرون.
-    partners_ic: كلية امبراطورية لندن
-    partners_partners: الشركاء
     sign_up: إنشئ حساباً
     sign_up_tooltip: أنشئ حسابًا كي تستطيع المساهمة
-    tag_line: ويكي خريطة العالم الحرة
+    edit: تعديل
+    history: تاريخ
+    export: صدِّر
+    data: البيانات
+    export_data: تصدير البيانات
+    gps_traces: آثار جي بي أس
+    gps_traces_tooltip: عالج آثار جي بي إس
     user_diaries: يوميات المستخدمين
     user_diaries_tooltip: اعرض يوميات المستخدمين
-  license_page: 
-    foreign: 
-      english_link: النص الإنجليزي الأصلي
+    edit_with: حرر بإستعمال %{editor}
+    tag_line: ويكي خريطة العالم الحرة
+    intro_2_create_account: أنشئ حساب مستخدم
+    partners_html: الضيافة مدعومة من %{ucl}, %{ic} و %{bytemark}, و %{partners} آخرون.
+    partners_ic: كلية امبراطورية لندن
+    partners_partners: الشركاء
+    osm_offline: حاليًا قاعدة بيانات خريطة الشارع المفتوحة مغلقة بينما يتم الانتهاء
+      من أعمال الصيانة الأساسية لقاعدة البيانات.
+    osm_read_only: حاليًا قاعدة بيانات خريطة الشارع المفتوحة في وضع القراءة بينما
+      يتم الانتهاء من أعمال الصيانة الأساسية لقاعدة البيانات.
+    donate: ادعم خريطة الشارع المفتوحة ب%{link} لتمويل ترقية العتاد.
+    help: مساعدة
+    about: حول
+    copyright: حقوق النسخ
+    community_blogs: مدونات المجتمع
+    community_blogs_title: مدونات لأعضاء من مجتمع خريطة الشارع المفتوحة
+    foundation: المؤسسة
+    foundation_title: مؤسسة خريطة الشارع المفتوحة
+    make_a_donation:
+      title: ادعم خريطة الشارع المفتوحة بهبة نقدية
+      text: تبرع
+    learn_more: التعرف على المزيد
+  license_page:
+    foreign:
       title: حول هذه الترجمة
-    legal_babble: 
-      title_html: حقوق النشر والترخيص
-    native: 
-      mapping_link: إبدأ التخطيط
-      native_link: النسخة العربية
+      english_link: النص الإنجليزي الأصلي
+    native:
       title: حول هذه الصفحة
-  message: 
-    delete: 
-      deleted: حُذفت الرسالة
-    inbox: 
-      date: التاريخ
-      from: من
-      messages: لديك %{new_messages} و %{old_messages}
+      native_link: النسخة العربية
+      mapping_link: إبدأ التخطيط
+    legal_babble:
+      title_html: حقوق النشر والترخيص
+  about_page:
+    partners_title: الشركاء
+  notifier:
+    diary_comment_notification:
+      subject: '[خريطة الشارع المفتوحة] %{user} أضاف تعليقًا على مدخلتك في اليومية'
+      hi: مرحبًا %{to_user}،
+      header: '%{from_user} علّق على مدخلتك اليومية الحديثة في خريطة الشارع المفتوحة
+        بالعنوان %{subject}:'
+      footer: يمكنك أيضًا قراءة التعليق على %{readurl} ويمكنك التعليق على %{commenturl}
+        أو الرد على %{replyurl}
+    message_notification:
+      hi: مرحبًا %{to_user}،
+      header: '%{from_user} قام بإرسال رسالة لك عبر خريطة الشارع المفتوحة بالعنوان
+        %{subject}:'
+    friend_notification:
+      subject: '[خريطة الشارع المفتوحة] %{user} أضافك كصديق.'
+      had_added_you: '%{user} قام بإضافتك كصديق على خريطة الشارع المفتوحة.'
+      see_their_profile: يمكنك أن تشاهد ملفهم الشخصي على %{userurl}.
+      befriend_them: "\uFEFFيمكنك أيضًا إضافتهم كصديق على %{befriendurl}."
+    gpx_notification:
+      greeting: تحياتي،
+      your_gpx_file: يبدو أنه ملف جي بي إكس الخاص بك
+      with_description: مع الوصف
+      and_the_tags: 'والسمات التالية:'
+      and_no_tags: ولا يوجد سمات.
+      failure:
+        subject: '[خريطة الشارع المفتوحة] فشل استيراد جي بي إكس'
+        failed_to_import: 'فشل الاستيراد. الخطأ هو:'
+        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبها
+        more_info_2: 'وهم موجودين على:'
+      success:
+        subject: '[خريطة الشارع المفتوحة] نجاح استيراد جي بي إكس'
+        loaded_successfully: تم تحميل بنجاح %{trace_points} نقطة من أصل %{possible_points}
+          نقطة ممكنة.
+    signup_confirm:
+      subject: '[خرائط اوبن ستريت] مرحباً بك في خرائط اوبن ستريت'
+    email_confirm:
+      subject: '[خريطة الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني'
+    email_confirm_plain:
+      greeting: تحياتي،
+      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لتأكيد التغيير.
+    email_confirm_html:
+      greeting: مرحبًا،
+      hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على %{server_url}
+        to %{new_address}.
+      click_the_link: إذا كان هذا هو أنت، رجاءًا انقر فوق الرابط أدناه لتأكيد التغيير.
+    lost_password:
+      subject: '[خريطة الشارع المفتوحة] طلب إعادة تعيين كلمة المرور'
+    lost_password_plain:
+      greeting: تحياتي،
+      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+        كلمة المرور.
+    lost_password_html:
+      greeting: تحياتي،
+      hopefully_you: شخص ما (ربما أنت) طلب إعادة تعيين كلمة المرور لحساب openstreetmap.org  على
+        عنوان البريد الإلكتروني هذا.
+      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+        كلمة المرور.
+    note_comment_notification:
+      greeting: أهلا,
+  message:
+    inbox:
+      title: الوارد
       my_inbox: الوارد
-      no_messages_yet: لا يوجد لديك رسائل بعد. لماذا لا تقوم بالاتصال مع بعض %{people_mapping_nearby_link}؟
       outbox: الصادر
-      people_mapping_nearby: مخططون في جواري
+      messages: لديك %{new_messages} و %{old_messages}
+      from: من
       subject: الموضوع
-      title: الوارد
-    mark: 
-      as_read: عُلّمت الرسالة مقروءة
-      as_unread: عُلّمت الرسالة كغير مقروءة
-    message_summary: 
-      delete_button: حذف
+      date: التاريخ
+      no_messages_yet: لا يوجد لديك رسائل بعد. لماذا لا تقوم بالاتصال مع بعض %{people_mapping_nearby_link}؟
+      people_mapping_nearby: مخططون في جواري
+    message_summary:
+      unread_button: علّم كغير مقروءة
       read_button: علّم كمقروءة
       reply_button: رد
-      unread_button: علّم كغير مقروءة
-    new: 
-      back_to_inbox: العودة إلى صندوق الوارد
-      body: نص الرسالة
-      limit_exceeded: لقد أرسلت الكثير من الرسائل مؤخرًا. الرجاء الانتظار بعض الوقت قبل أن تحاول إرسال المزيد.
-      message_sent: تم إرسال الرسالة
-      send_button: أرسل
+      delete_button: حذف
+    new:
+      title: أرسل رسالة
       send_message_to: أرسل رسالة جديدة إلى %{name}
       subject: الموضوع
-      title: أرسل رسالة
-    no_such_message: 
+      body: نص الرسالة
+      send_button: أرسل
+      back_to_inbox: العودة إلى صندوق الوارد
+      message_sent: تم إرسال الرسالة
+      limit_exceeded: لقد أرسلت الكثير من الرسائل مؤخرًا. الرجاء الانتظار بعض الوقت
+        قبل أن تحاول إرسال المزيد.
+    no_such_message:
+      title: "\uFEFFلا توجد مثل هذه الرسالة"
+      heading: "\uFEFFلا توجد مثل هذه الرسالة"
       body: عذرًا لا يوجد أي رسالة بهذا المعرف.
-      heading: لا توجد مثل هذه الرسالة
-      title: لا توجد مثل هذه الرسالة
-    outbox: 
-      date: التاريخ
-      inbox: صندوق البريد الوارد
+    outbox:
+      title: صندوق الصادر
       my_inbox: رابطي %{inbox_link}
-      no_sent_messages: لا يوجد لديك رسائل مرسلة بعد. لماذا لا تقوم بالاتصال مع بعض %{people_mapping_nearby_link}؟
+      inbox: صندوق البريد الوارد
       outbox: الصادر
-      people_mapping_nearby: مخططون في جواري
-      subject: الموضوع
-      title: صندوق الصادر
       to: إلى
-    read: 
+      subject: الموضوع
       date: التاريخ
+      no_sent_messages: لا يوجد لديك رسائل مرسلة بعد. لماذا لا تقوم بالاتصال مع بعض
+        %{people_mapping_nearby_link}؟
+      people_mapping_nearby: مخططون في جواري
+    reply:
+      wrong_user: "\uFEFFأنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت الرد
+        عليها لم تكن مرسلة لذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد."
+    read:
+      title: اقرأ الرسالة
       from: من
-      reply_button: رد
       subject: الموضوع
-      title: اقرأ الرسالة
-      to: إلى
+      date: التاريخ
+      reply_button: رد
       unread_button: علّم كغير مقروءة
-      wrong_user: أنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت قراءتها لم تكن من أو إلى ذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد.
-    reply: 
-      wrong_user: أنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت الرد عليها لم تكن مرسلة لذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد.
-    sent_message_summary: 
+      to: إلى
+      wrong_user: "\uFEFFأنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت قراءتها
+        لم تكن من أو إلى ذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد."
+    sent_message_summary:
       delete_button: حذف
-  notifier: 
-    diary_comment_notification: 
-      footer: يمكنك أيضًا قراءة التعليق على %{readurl} ويمكنك التعليق على %{commenturl} أو الرد على %{replyurl}
-      header: "%{from_user} علّق على مدخلتك اليومية الحديثة في خريطة الشارع المفتوحة بالعنوان %{subject}:"
-      hi: مرحبًا %{to_user}،
-      subject: "[خريطة الشارع المفتوحة] %{user} أضاف تعليقًا على مدخلتك في اليومية"
-    email_confirm: 
-      subject: "[خريطة الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني"
-    email_confirm_html: 
-      click_the_link: إذا كان هذا هو أنت، رجاءًا انقر فوق الرابط أدناه لتأكيد التغيير.
-      greeting: مرحبًا،
-      hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على %{server_url} to %{new_address}.
-    email_confirm_plain: 
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لتأكيد التغيير.
-      greeting: تحياتي،
-    friend_notification: 
-      befriend_them: يمكنك أيضًا إضافتهم كصديق على %{befriendurl}.
-      had_added_you: "%{user} قام بإضافتك كصديق على خريطة الشارع المفتوحة."
-      see_their_profile: يمكنك أن تشاهد ملفهم الشخصي على %{userurl}.
-      subject: "[خريطة الشارع المفتوحة] %{user} أضافك كصديق."
-    gpx_notification: 
-      and_no_tags: ولا يوجد سمات.
-      and_the_tags: "والسمات التالية:"
-      failure: 
-        failed_to_import: "فشل الاستيراد. الخطأ هو:"
-        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبها
-        more_info_2: "وهم موجودين على:"
-        subject: "[خريطة الشارع المفتوحة] فشل استيراد جي بي إكس"
-      greeting: تحياتي،
-      success: 
-        loaded_successfully: تم تحميل بنجاح %{trace_points} نقطة من أصل %{possible_points} نقطة ممكنة.
-        subject: "[خريطة الشارع المفتوحة] نجاح استيراد جي بي إكس"
-      with_description: مع الوصف
-      your_gpx_file: يبدو أنه ملف جي بي إكس الخاص بك
-    lost_password: 
-      subject: "[خريطة الشارع المفتوحة] طلب إعادة تعيين كلمة المرور"
-    lost_password_html: 
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين كلمة المرور.
-      greeting: تحياتي،
-      hopefully_you: شخص ما (ربما أنت) طلب إعادة تعيين كلمة المرور لحساب openstreetmap.org  على عنوان البريد الإلكتروني هذا.
-    lost_password_plain: 
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين كلمة المرور.
-      greeting: تحياتي،
-    message_notification: 
-      header: "%{from_user} قام بإرسال رسالة لك عبر خريطة الشارع المفتوحة بالعنوان %{subject}:"
-      hi: مرحبًا %{to_user}،
-    signup_confirm: 
-      subject: "[خرائط اوبن ستريت] مرحباً بك في خرائط اوبن ستريت"
-  oauth: 
-    oauthorize: 
-      allow_read_gpx: قراءة آثار جي بي أس الخاصة بك.
-      allow_read_prefs: يقرأ تفضيلات المستخدم.
-      allow_to: "اسمح للتطبيق بأن:"
-      allow_write_api: يعدّل الخريطة.
-      allow_write_diary: إنشاء مدخلات يومية، تعليقات وإضافة أصدقاء.
-      allow_write_gpx: ارفع آثار جي بي أس.
-      allow_write_prefs: عدّل تفضيلات المستخدم.
-      request_access: التطبيق %{app_name} يطلب الوصول إلى حسابك %{user}. يرجى التحقق ما إذا كنت تريد أن يكون للتطبيق هذه القدرات. يمكن أن تختار ما تشاء.
-    revoke: 
-      flash: لقد أبطلت نموذج التطبيق %{application}
-  oauth_clients: 
-    create: 
-      flash: تم تسجيل المعلومات بنجاح
-    destroy: 
-      flash: دمّر تسجيل التطبيق
-    edit: 
-      submit: تعديل
-      title: عدّل تطبيقك
-    form: 
-      allow_read_gpx: قراءة آثاره للجي بي إس الخصوصية.
-      allow_read_prefs: قراءة تفضيلاته.
-      allow_write_api: تعديل الخريطة.
-      allow_write_diary: إنشاء مدخلات يومية، تعليقات وإضافة أصدقاء.
-      allow_write_gpx: رفع آثار جي بي إس.
-      allow_write_prefs: تعديل تفضيلاته.
-      callback_url: رابط الرد
-      name: الاسم
-      requests: "اطلب الصلاحيات التالية من المستخدم:"
-      required: مطلوب
-      support_url: رابط الدعم
-      url: رابط التطبيق الرئيسي
-    index: 
-      application: اسم التطبيق
-      issued_at: أُصدِر في
-      list_tokens: "النماذج التالية أصدرت للتطبيقات باسمك:"
-      my_apps: تطبيقاتي
-      my_tokens: تطبيقاتي المصرحة
-      no_apps: هل لديك تطبيق تود أن تسجله للاستخدام معنا من خلال %{oauth} القياسي؟ يجب عليك أن تسجل تطبيق الويب الخاص قبل أن يتمكن من تقديم طلبات OAuth لهذه الخدمة.
-      register_new: سجِّل تطبيقك
-      registered_apps: "لديك التطبيقات المسجلة التالية:"
-      revoke: ابطل!
-      title: تفاصيل OAuth الخاص بي
-    new: 
-      submit: سجِّل
-      title: سجِّل تطبيق جديد
-    not_found: 
-      sorry: عذرًا، لم يتم العثور على تلك %{type}.
-    show: 
-      access_url: "رابط وصول النموذج:"
-      allow_read_gpx: قراءة آثاره للجي بي إس الخصوصية.
-      allow_read_prefs: قراءة تفضيلاته.
-      allow_write_api: تعديل الخريطة.
-      allow_write_diary: إنشاء مدخلات يومية، تعليقات وإضافة أصدقاء.
-      allow_write_gpx: ارفع آثار جي بي إس.
-      allow_write_prefs: تعديل تفضيلاته.
-      authorize_url: "رابط التصريح:"
-      confirm: هل أنت متأكد؟
-      delete: أمحي الزبون
-      edit: عدّل التفاصيل
-      key: "مفتاح المستهلك:"
-      requests: "طلب الصلاحيات التالية من المستخدم:"
-      secret: "سر المستهلك:"
-      support_notice: نحن ندعم HMAC-SHA1 (مستحسن) وكذلك النص العادي في وضع ssl.
-      title: تفاصيل OAuth للتطبيق %{app_name}
-      url: "رابط طلب النموذج:"
-    update: 
-      flash: تم تحديث معلومات العميل بنجاح
-  redaction: 
-    edit: 
-      description: الوصف
-    new: 
-      description: الوصف
-    show: 
-      confirm: هل أنت متأكد؟
-      description: "الوصف:"
-      user: "المنشئ:"
-    update: 
-      flash: تمّ حفظ التغييرات.
-  site: 
-    edit: 
-      anon_edits_link_text: ابحث عن السبب لماذا هو هذا الحال.
-      flash_player_required: أنت بحاجة لمشغل فلاش لاستخدام Potlatch، محرر فلاش خريطة الشارع المفتوحة. يمكنك <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">تنزيل مشغل الفلاش من موقع أدوبي</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">وهناك خيارات أخرى</a> أيضًا متاحة لتعديل خريطة الشارع المفتوحة.
-      not_public: لم تقم بتعيين تعديلاتك لتظهر بشكل علني.
-      not_public_description: أنت لم تعد قادر على تعديل الخريطة إلا إذا قمت بذلك. يمكنك تعيين تعديلاتك لتظهر بشكل علني من حسابك %{user_page}.
-      potlatch_unsaved_changes: لديك تغييرات غير محفوظة. (للحفظ في Potlatch، يجب إلغاء الطريق أو النقطة الحاليين إن كان التعديل في الوضع المباشر، أو انقر فوق حفظ إن كان لديك زر الحفظ.)
-      user_page_link: صفحة مستخدم
-    index: 
+    mark:
+      as_read: عُلّمت الرسالة مقروءة
+      as_unread: عُلّمت الرسالة كغير مقروءة
+    delete:
+      deleted: حُذفت الرسالة
+  site:
+    index:
       js_1: أنت إما تستخدم متصفح لا يدعم جافا سكريبت، أو أنك عطلت استعمال جافا سكريبت.
       js_2: خريطة الشارع المفتوحة تستخدم جافا سكريبت لخريطتها المنزلقة.
       permalink: وصلة دائمة
       shortlink: وصلة قصيرة
-    key: 
-      table: 
-        entry: 
-          admin: حدود إدارية
-          allotments: حصص سكنية
-          apron: 
-            - ساحة مطار
-            - صالة مطار
-          bridge: غطاء أسود = جسر
-          bridleway: مسلك خيول
-          brownfield: موقع مخلفات
-          building: مبنى كبير
+    edit:
+      not_public: لم تقم بتعيين تعديلاتك لتظهر بشكل علني.
+      not_public_description: أنت لم تعد قادر على تعديل الخريطة إلا إذا قمت بذلك.
+        يمكنك تعيين تعديلاتك لتظهر بشكل علني من حسابك %{user_page}.
+      user_page_link: صفحة مستخدم
+      anon_edits_link_text: ابحث عن السبب لماذا هو هذا الحال.
+      flash_player_required: أنت بحاجة لمشغل فلاش لاستخدام Potlatch، محرر فلاش خريطة
+        الشارع المفتوحة. يمكنك <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">تنزيل
+        مشغل الفلاش من موقع أدوبي</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">وهناك
+        خيارات أخرى</a> أيضًا متاحة لتعديل خريطة الشارع المفتوحة.
+      potlatch_unsaved_changes: لديك تغييرات غير محفوظة. (للحفظ في Potlatch، يجب إلغاء
+        الطريق أو النقطة الحاليين إن كان التعديل في الوضع المباشر، أو انقر فوق حفظ
+        إن كان لديك زر الحفظ.)
+    sidebar:
+      search_results: نتائج البحث
+      close: أغلق
+    search:
+      search: بحث
+      where_am_i: أين أنا؟
+      where_am_i_title: صِف الموقع الحالي باستخدام محرك البحث
+      submit_text: اذهب
+    key:
+      table:
+        entry:
+          motorway: طريق سريع
+          trunk: طريق رئيسي
+          primary: طريق رئيسي
+          secondary: طريق ثانوي
+          unclassified: طريق غير مصنّف
+          unsurfaced: طريق غير معبد
+          track: مسار
           byway: طريق فرعي
-          cable: 
-            - عربة أسلاك
-            - تلفريك
-          cemetery: مقبرة
-          centre: مركز رياضي
-          commercial: منطقة تجارية
-          common: 
-            - شائع
-            - مرج
-          construction: الطرق تحت الإنشاء
+          bridleway: مسلك خيول
           cycleway: طريق دراجات
-          destination: استخدام إلى الوجهة
-          farm: أرض زراعية
           footway: طريق مشاة
+          rail: سكة حديدية
+          subway: قطار الأنفاق
+          tram:
+          - قطار خفيف
+          - ترام
+          cable:
+          - عربة أسلاك
+          - تلفريك
+          run