]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/2009'
authorTom Hughes <tom@compton.nu>
Sun, 4 Nov 2018 14:50:14 +0000 (14:50 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 4 Nov 2018 14:50:14 +0000 (14:50 +0000)
185 files changed:
.mailmap
.rubocop.yml
.rubocop_todo.yml
.travis.yml
Gemfile
Gemfile.lock
app/abilities/ability.rb [new file with mode: 0644]
app/abilities/capability.rb [new file with mode: 0644]
app/assets/javascripts/index/history.js
app/assets/stylesheets/common.scss
app/controllers/application_controller.rb
app/controllers/browse_controller.rb
app/controllers/changeset_controller.rb
app/controllers/diary_entry_controller.rb
app/controllers/issue_comments_controller.rb
app/controllers/issues_controller.rb
app/controllers/messages_controller.rb
app/controllers/notes_controller.rb
app/controllers/reports_controller.rb
app/controllers/site_controller.rb
app/controllers/user_preferences_controller.rb
app/controllers/users_controller.rb [moved from app/controllers/user_controller.rb with 89% similarity]
app/helpers/changeset_helper.rb
app/helpers/note_helper.rb
app/helpers/user_helper.rb
app/helpers/user_roles_helper.rb
app/mailers/notifier.rb [moved from app/models/notifier.rb with 95% similarity]
app/models/concerns/geo_record.rb [moved from lib/geo_record.rb with 89% similarity]
app/models/concerns/not_redactable.rb [moved from lib/not_redactable.rb with 78% similarity]
app/models/concerns/object_metadata.rb [moved from lib/object_metadata.rb with 97% similarity]
app/models/note_comment.rb
app/models/relation.rb
app/views/browse/changeset.html.erb
app/views/browse/new_note.html.erb
app/views/browse/note.html.erb
app/views/changeset/_user.atom.builder
app/views/diary_entry/show.html.erb
app/views/layouts/_header.html.erb
app/views/messages/_message_summary.html.erb
app/views/messages/_sent_message_summary.html.erb
app/views/messages/show.html.erb
app/views/redactions/show.html.erb
app/views/site/copyright.html.erb
app/views/user/blocked.html.erb [deleted file]
app/views/users/_api_user.builder [moved from app/views/user/_api_user.builder with 100% similarity]
app/views/users/_auth_association.html.erb [moved from app/views/user/_auth_association.html.erb with 100% similarity]
app/views/users/_contact.html.erb [moved from app/views/user/_contact.html.erb with 68% similarity]
app/views/users/_popup.html.erb [moved from app/views/user/_popup.html.erb with 100% similarity]
app/views/users/_terms.html.erb [moved from app/views/user/_terms.html.erb with 100% similarity]
app/views/users/_user.html.erb [moved from app/views/user/_user.html.erb with 89% similarity]
app/views/users/account.html.erb [moved from app/views/user/account.html.erb with 94% similarity]
app/views/users/api_read.builder [moved from app/views/user/api_read.builder with 100% similarity]
app/views/users/api_users.builder [moved from app/views/user/api_users.builder with 100% similarity]
app/views/users/blocked.html.erb [new file with mode: 0644]
app/views/users/confirm.html.erb [moved from app/views/user/confirm.html.erb with 100% similarity]
app/views/users/confirm_email.html.erb [moved from app/views/user/confirm_email.html.erb with 100% similarity]
app/views/users/index.html.erb [moved from app/views/user/index.html.erb with 100% similarity]
app/views/users/login.html.erb [moved from app/views/user/login.html.erb with 94% similarity]
app/views/users/logout.html.erb [moved from app/views/user/logout.html.erb with 100% similarity]
app/views/users/lost_password.html.erb [moved from app/views/user/lost_password.html.erb with 100% similarity]
app/views/users/make_friend.html.erb [moved from app/views/user/make_friend.html.erb with 100% similarity]
app/views/users/new.html.erb [moved from app/views/user/new.html.erb with 100% similarity]
app/views/users/no_such_user.html.erb [moved from app/views/user/no_such_user.html.erb with 100% similarity]
app/views/users/remove_friend.html.erb [moved from app/views/user/remove_friend.html.erb with 100% similarity]
app/views/users/reset_password.html.erb [moved from app/views/user/reset_password.html.erb with 100% similarity]
app/views/users/show.html.erb [moved from app/views/user/show.html.erb with 97% similarity]
app/views/users/suspended.html.erb [moved from app/views/user/suspended.html.erb with 100% similarity]
app/views/users/terms.html.erb [moved from app/views/user/terms.html.erb with 100% similarity]
config/environments/production.rb
config/environments/test.rb
config/initializers/r2.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/bn.yml
config/locales/br.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cs.yml
config/locales/cy.yml
config/locales/da.yml
config/locales/de.yml
config/locales/diq.yml
config/locales/dsb.yml
config/locales/el.yml
config/locales/en-GB.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/ga.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/he.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/kab.yml
config/locales/km.yml
config/locales/kn.yml
config/locales/ko.yml
config/locales/ku-Latn.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mo.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/pt-BR.yml
config/locales/pt-PT.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/scn.yml
config/locales/sco.yml
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/th.yml
config/locales/tl.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/routes.rb
db/migrate/20181031113522_create_delayed_jobs.rb [new file with mode: 0644]
db/structure.sql
lib/classic_pagination/pagination.rb
lib/diff_reader.rb
lib/tasks/auto_annotate_models.rake
test/abilities/abilities_test.rb [new file with mode: 0644]
test/abilities/capability_test.rb [new file with mode: 0644]
test/controllers/amf_controller_test.rb
test/controllers/changeset_controller_test.rb
test/controllers/diary_entry_controller_test.rb
test/controllers/messages_controller_test.rb
test/controllers/notes_controller_test.rb
test/controllers/site_controller_test.rb
test/controllers/traces_controller_test.rb
test/controllers/user_blocks_controller_test.rb
test/controllers/user_roles_controller_test.rb
test/controllers/users_controller_test.rb [moved from test/controllers/user_controller_test.rb with 91% similarity]
test/integration/client_applications_test.rb
test/integration/user_changeset_comments_test.rb
test/integration/user_creation_test.rb
test/integration/user_diaries_test.rb
test/integration/user_login_test.rb
test/integration/user_roles_test.rb
test/integration/user_terms_seen_test.rb
test/models/relation_test.rb
test/system/issues_test.rb
test/system/report_user_test.rb
test/test_helper.rb

index 29f21fde6f1178be3dd239791da197b071f89b44..761478b563baaec90676ac4ae7a9d35edd41e271 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -7,4 +7,4 @@ Kai Krueger <kakrueger@gmail.com> <kai@aiputerlx.(none)>
 Michael Glanznig <nebulon42@yandex.com>
 Petr Kadlec <mormegil@centrum.cz>
 Richard Fairhurst <richard@systemeD.net> <richard@systemed.net>
-Simon Poole <simon@poole.ch> <simon@rails-dev.poole.ch>
+Simon Poole <simon@poole.ch> <simon@rails-dev.poole.ch> <simonpoole@users.noreply.github.com>
index 31c14773c1b0e994f215efa5f3916f9672434900..b33f9046cb87c117925cc8e290392f2021aae270 100644 (file)
@@ -45,7 +45,7 @@ Rails/InverseOf:
 Rails/SkipsModelValidations:
   Exclude:
     - 'db/migrate/*.rb'
-    - 'app/controllers/user_controller.rb'
+    - 'app/controllers/users_controller.rb'
 
 Style/BracesAroundHashParameters:
   EnforcedStyle: context_dependent
@@ -56,10 +56,6 @@ Style/FormatStringToken:
 Style/IfInsideElse:
   Enabled: false
 
-Style/GlobalVars:
-  Exclude:
-    - 'lib/quad_tile/extconf.rb'
-
 Style/GuardClause:
   Enabled: false
 
index 293135907385bc9b3d0890b8be3db2ceac17c430..7d2c583eb73c4ebff19e52adc3367559e83757c2 100644 (file)
@@ -14,12 +14,12 @@ Lint/AssignmentInCondition:
     - 'app/controllers/geocoder_controller.rb'
     - 'app/controllers/notes_controller.rb'
     - 'app/controllers/traces_controller.rb'
-    - 'app/controllers/user_controller.rb'
+    - 'app/controllers/users_controller.rb'
     - 'app/controllers/user_preferences_controller.rb'
     - 'app/helpers/application_helper.rb'
     - 'app/helpers/browse_helper.rb'
     - 'app/models/client_application.rb'
-    - 'app/models/notifier.rb'
+    - 'app/mailers/notifier.rb'
     - 'lib/nominatim.rb'
     - 'lib/osm.rb'
     - 'script/deliver-message'
@@ -28,17 +28,17 @@ Lint/AssignmentInCondition:
 Lint/HandleExceptions:
   Exclude:
     - 'app/controllers/amf_controller.rb'
-    - 'app/controllers/user_controller.rb'
+    - 'app/controllers/users_controller.rb'
 
 # Offense count: 692
 Metrics/AbcSize:
-  Max: 280
+  Max: 283
 
 # Offense count: 40
 # Configuration parameters: CountComments, ExcludedMethods.
 # ExcludedMethods: refine
 Metrics/BlockLength:
-  Max: 259
+  Max: 262
 
 # Offense count: 11
 # Configuration parameters: CountBlocks.
@@ -48,7 +48,7 @@ Metrics/BlockNesting:
 # Offense count: 63
 # Configuration parameters: CountComments.
 Metrics/ClassLength:
-  Max: 1795
+  Max: 1801
 
 # Offense count: 72
 Metrics/CyclomaticComplexity:
@@ -139,7 +139,7 @@ Rails/NotNullColumn:
 # Offense count: 20
 Rails/OutputSafety:
   Exclude:
-    - 'app/controllers/user_controller.rb'
+    - 'app/controllers/users_controller.rb'
     - 'app/helpers/application_helper.rb'
     - 'app/helpers/changeset_helper.rb'
     - 'app/helpers/geocoder_helper.rb'
index 8ce7f5f305b317e36df70fe404bd68a2a87e110a..3b56d2b4b666af3b77fb9df25838a6259b0def03 100644 (file)
@@ -1,7 +1,7 @@
 sudo: false
 language: ruby
 rvm:
-  - 2.3.1
+  - 2.3.3
 cache: bundler
 addons:
   postgresql: 9.5
diff --git a/Gemfile b/Gemfile
index 9ba2703134d5d9b9bf8e5c47904c188396a762e7..05bfc6cbd3e6d14ea36f335a468cf6767038de70 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -45,7 +45,9 @@ gem "image_optim_rails"
 
 # Load rails plugins
 gem "actionpack-page_caching"
+gem "cancancan"
 gem "composite_primary_keys", "~> 11.0.0"
+gem "delayed_job_active_record"
 gem "dynamic_form"
 gem "http_accept_language", "~> 2.0.0"
 gem "i18n-js", ">= 3.0.0"
index 76a31e169e59a8c4aacd58ef738f2de056957302..72f769929033edf0790dbfe20be7567cfda32b40 100644 (file)
@@ -21,7 +21,7 @@ GEM
       rack-test (>= 0.6.3)
       rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.0.2)
-    actionpack-page_caching (1.1.0)
+    actionpack-page_caching (1.1.1)
       actionpack (>= 4.0.0, < 6)
     actionview (5.2.0)
       activesupport (= 5.2.0)
@@ -66,6 +66,7 @@ GEM
     bootsnap (1.3.2)
       msgpack (~> 1.0)
     builder (3.2.3)
+    cancancan (2.1.3)
     canonical-rails (0.2.4)
       rails (>= 4.1, < 5.3)
     capybara (2.18.0)
@@ -97,8 +98,13 @@ GEM
     crack (0.4.3)
       safe_yaml (~> 1.0.0)
     crass (1.0.4)
-    dalli (2.7.8)
+    dalli (2.7.9)
     debug_inspector (0.0.3)
+    delayed_job (4.1.5)
+      activesupport (>= 3.0, < 5.3)
+    delayed_job_active_record (4.1.3)
+      activerecord (>= 3.0, < 5.3)
+      delayed_job (>= 3.0, < 5)
     docile (1.3.1)
     dynamic_form (1.1.4)
     erubi (1.7.1)
@@ -109,7 +115,7 @@ GEM
     factory_bot_rails (4.11.1)
       factory_bot (~> 4.11.1)
       railties (>= 3.0.0)
-    faraday (0.12.2)
+    faraday (0.15.3)
       multipart-post (>= 1.2, < 3)
     ffi (1.9.25)
     fspath (3.1.0)
@@ -122,9 +128,9 @@ GEM
     http_accept_language (2.0.5)
     i18n (0.9.5)
       concurrent-ruby (~> 1.0)
-    i18n-js (3.0.11)
+    i18n-js (3.1.0)
       i18n (>= 0.6.6, < 2)
-    image_optim (0.26.2)
+    image_optim (0.26.3)
       exifr (~> 1.2, >= 1.2.2)
       fspath (~> 3.0)
       image_size (>= 1.5, < 3)
@@ -160,14 +166,14 @@ GEM
       rb-inotify (~> 0.9, >= 0.9.7)
       ruby_dep (~> 1.2)
     logstash-event (1.2.02)
-    logstasher (1.2.2)
+    logstasher (1.3.0)
       activesupport (>= 4.0)
       logstash-event (~> 1.2.0)
       request_store
-    loofah (2.2.2)
+    loofah (2.2.3)
       crass (~> 1.0.2)
       nokogiri (>= 1.5.9)
-    mail (2.7.0)
+    mail (2.7.1)
       mini_mime (>= 0.1.1)
     marcel (0.3.3)
       mimemagic (~> 0.3.2)
@@ -184,19 +190,19 @@ GEM
     multi_xml (0.6.0)
     multipart-post (2.0.0)
     nio4r (2.3.1)
-    nokogiri (1.8.4)
+    nokogiri (1.8.5)
       mini_portile2 (~> 2.3.0)
-    nokogumbo (1.5.0)
-      nokogiri
+    nokogumbo (2.0.0)
+      nokogiri (~> 1.8, >= 1.8.4)
     oauth (0.4.7)
     oauth-plugin (0.5.1)
       multi_json
       oauth (~> 0.4.4)
       oauth2 (>= 0.5.0)
       rack
-    oauth2 (1.4.0)
-      faraday (>= 0.8, < 0.13)
-      jwt (~> 1.0)
+    oauth2 (1.4.1)
+      faraday (>= 0.8, < 0.16.0)
+      jwt (>= 1.0, < 3.0)
       multi_json (~> 1.3)
       multi_xml (~> 0.5)
       rack (>= 1.2, < 3)
@@ -235,7 +241,7 @@ GEM
       mimemagic (~> 0.3.0)
       terrapin (~> 0.6.0)
     parallel (1.12.1)
-    parser (2.5.1.2)
+    parser (2.5.3.0)
       ast (~> 2.4.0)
     pg (0.21.0)
     poltergeist (1.18.1)
@@ -243,8 +249,8 @@ GEM
       cliver (~> 0.3.1)
       websocket-driver (>= 0.2.0)
     powerpack (0.1.2)
-    progress (3.4.0)
-    psych (3.0.2)
+    progress (3.5.0)
+    psych (3.0.3)
     public_suffix (3.0.3)
     puma (3.12.0)
     quad_tile (1.0.1)
@@ -300,36 +306,31 @@ GEM
     request_store (1.4.1)
       rack (>= 1.4)
     rinku (2.0.4)
-    rotp (3.3.1)
-    rubocop (0.59.1)
+    rotp (4.0.2)
+      addressable (~> 2.5)
+    rubocop (0.60.0)
       jaro_winkler (~> 1.5.1)
       parallel (~> 1.10)
       parser (>= 2.5, != 2.5.1.1)
       powerpack (~> 0.1)
       rainbow (>= 2.2.2, < 4.0)
       ruby-progressbar (~> 1.7)
-      unicode-display_width (~> 1.0, >= 1.0.1)
+      unicode-display_width (~> 1.4.0)
     ruby-openid (2.7.0)
     ruby-progressbar (1.10.0)
     ruby_dep (1.5.0)
     safe_yaml (1.0.4)
-    sanitize (4.6.6)
+    sanitize (5.0.0)
       crass (~> 1.0.2)
-      nokogiri (>= 1.4.4)
-      nokogumbo (~> 1.4)
-    sass (3.6.0)
-      sass-listen (~> 4.0.0)
-    sass-listen (4.0.0)
-      rb-fsevent (~> 0.9, >= 0.9.4)
-      rb-inotify (~> 0.9, >= 0.9.7)
-    sassc (1.12.1)
+      nokogiri (>= 1.8.0)
+      nokogumbo (~> 2.0)
+    sassc (2.0.0)
       ffi (~> 1.9.6)
-      sass (>= 3.3.0)
-    sassc-rails (1.3.0)
+      rake
+    sassc-rails (2.0.0)
       railties (>= 4.0.0)
-      sass
-      sassc (~> 1.9)
-      sprockets (> 2.11)
+      sassc (>= 2.0)
+      sprockets (> 3.0)
       sprockets-rails
       tilt
     secure_headers (6.0.0)
@@ -355,7 +356,7 @@ GEM
     thor (0.19.4)
     thread_safe (0.3.6)
     tilt (2.0.8)
-    tins (1.16.3)
+    tins (1.17.0)
     tzinfo (1.2.5)
       thread_safe (~> 0.1)
     uglifier (4.1.19)
@@ -363,7 +364,7 @@ GEM
     unicode-display_width (1.4.0)
     validates_email_format_of (1.6.3)
       i18n
-    vendorer (0.1.16)
+    vendorer (0.2.0)
     webmock (3.4.2)
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
@@ -371,7 +372,7 @@ GEM
     websocket-driver (0.7.0)
       websocket-extensions (>= 0.1.0)
     websocket-extensions (0.1.3)
-    xpath (3.1.0)
+    xpath (3.2.0)
       nokogiri (~> 1.8)
 
 PLATFORMS
@@ -387,12 +388,14 @@ DEPENDENCIES
   bigdecimal (~> 1.1.0)
   binding_of_caller
   bootsnap (>= 1.1.0)
+  cancancan
   canonical-rails
   capybara (~> 2.13)
   coffee-rails (~> 4.2)
   composite_primary_keys (~> 11.0.0)
   coveralls
   dalli
+  delayed_job_active_record
   dynamic_form
   factory_bot_rails
   faraday
diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb
new file mode 100644 (file)
index 0000000..f55f19e
--- /dev/null
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+class Ability
+  include CanCan::Ability
+
+  def initialize(user)
+    can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :preview, :copyright, :key, :id], :site
+    can [:index, :rss, :show, :comments], DiaryEntry
+    can [:search, :search_latlon, :search_ca_postcode, :search_osm_nominatim,
+         :search_geonames, :search_osm_nominatim_reverse, :search_geonames_reverse], :geocoder
+
+    if user
+      can :welcome, :site
+      can [:create, :edit, :comment, :subscribe, :unsubscribe], DiaryEntry
+      can [:new, :create], Report
+      can [:read, :read_one, :update, :update_one, :delete_one], UserPreference
+
+      if user.moderator?
+        can [:index, :show, :resolve, :ignore, :reopen], Issue
+        can :create, IssueComment
+      end
+
+      if user.administrator?
+        can [:hide, :hidecomment], [DiaryEntry, DiaryComment]
+        can [:index, :show, :resolve, :ignore, :reopen], Issue
+        can :create, IssueComment
+      end
+    end
+
+    # Define abilities for the passed in user here. For example:
+    #
+    #   user ||= User.new # guest user (not logged in)
+    #   if user.admin?
+    #     can :manage, :all
+    #   else
+    #     can :read, :all
+    #   end
+    #
+    # The first argument to `can` is the action you are giving the user
+    # permission to do.
+    # If you pass :manage it will apply to every action. Other common actions
+    # here are :read, :create, :update and :destroy.
+    #
+    # The second argument is the resource the user can perform the action on.
+    # If you pass :all it will apply to every resource. Otherwise pass a Ruby
+    # class of the resource.
+    #
+    # The third argument is an optional hash of conditions to further filter the
+    # objects.
+    # For example, here the user can only update published articles.
+    #
+    #   can :update, Article, :published => true
+    #
+    # See the wiki for details:
+    # https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
+  end
+end
diff --git a/app/abilities/capability.rb b/app/abilities/capability.rb
new file mode 100644 (file)
index 0000000..2a5c927
--- /dev/null
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class Capability
+  include CanCan::Ability
+
+  def initialize(token)
+    can [:read, :read_one], UserPreference if capability?(token, :allow_read_prefs)
+    can [:update, :update_one, :delete_one], UserPreference if capability?(token, :allow_write_prefs)
+  end
+
+  private
+
+  def capability?(token, cap)
+    token&.read_attribute(cap)
+  end
+end
index 0b98237d85535f39b970d83bb2f8dc2b0eee90ce..38d0b249ac23cecfd89363207785035f7dd30043 100644 (file)
@@ -89,19 +89,30 @@ OSM.History = function(map) {
     });
   }
 
-  function updateMap() {
+  var changesets = [];
+
+  function updateBounds() {
     group.clearLayers();
 
-    var changesets = [];
+    changesets.forEach(function(changeset) {
+      var bottomLeft = map.project(L.latLng(changeset.bbox.minlat, changeset.bbox.minlon)),
+          topRight = map.project(L.latLng(changeset.bbox.maxlat, changeset.bbox.maxlon)),
+          width = topRight.x - bottomLeft.x,
+          height = bottomLeft.y - topRight.y,
+          minSize = 20;  // Min width/height of changeset in pixels
+
+      if (width < minSize) {
+        bottomLeft.x -= ((minSize - width) / 2);
+        topRight.x += ((minSize - width) / 2);
+      }
 
-    $("[data-changeset]").each(function () {
-      var changeset = $(this).data('changeset');
-      if (changeset.bbox) {
-        changeset.bounds = L.latLngBounds(
-          [changeset.bbox.minlat, changeset.bbox.minlon],
-          [changeset.bbox.maxlat, changeset.bbox.maxlon]);
-        changesets.push(changeset);
+      if (height < minSize) {
+        bottomLeft.y += ((minSize - height) / 2);
+        topRight.y -= ((minSize - height) / 2);
       }
+
+      changeset.bounds = L.latLngBounds(map.unproject(bottomLeft),
+                                        map.unproject(topRight));
     });
 
     changesets.sort(function (a, b) {
@@ -115,6 +126,16 @@ OSM.History = function(map) {
       rect.id = changeset.id;
       rect.addTo(group);
     }
+  }
+
+  function updateMap() {
+    changesets = $("[data-changeset]").map(function (index,element) {
+      return $(element).data('changeset');
+    }).get().filter(function (changeset) {
+      return changeset.bbox;
+    });
+
+    updateBounds();
 
     if (window.location.pathname !== '/history') {
       var bounds = group.getBounds();
@@ -134,6 +155,8 @@ OSM.History = function(map) {
       map.on("moveend", update);
     }
 
+    map.on("zoomend", updateBounds);
+
     update();
   };
 
index 4b8a80c5469b58c1ae219cff2816a6157e994904..a16f7d85a56d4c13b8422c05034745753ab42f5c 100644 (file)
@@ -1237,7 +1237,8 @@ tr.turn:hover {
     margin: $lineheight/2 0;
 
     p {
-      margin-left: 10px;
+      margin: 10px 6px 0 6px;
+      line-height: 1.5;
     }
   }
 
@@ -1323,11 +1324,11 @@ tr.turn:hover {
     #maxlat { margin-top: -1px; }
     #minlon {
       float: left;
-      margin-left: -1px;
+      /* no-r2 */ margin-left: -1px;
     }
     #maxlon {
       float: right;
-      margin-right: -1px;
+      /* no-r2 */ margin-right: -1px;
     }
     #minlat { margin-bottom: 0; }
   }
@@ -1402,9 +1403,9 @@ tr.turn:hover {
 
 /* Overrides for pages that use new layout conventions */
 
-.user-new,
-.user-create,
-.user-terms {
+.users-new,
+.users-create,
+.users-terms {
   .content-body .content-inner {
     padding: 0;
 
@@ -1415,10 +1416,10 @@ tr.turn:hover {
   }
 }
 
-.user-new,
-.user-create,
-.user-terms,
-.user-confirm {
+.users-new,
+.users-create,
+.users-terms,
+.users-confirm {
   .content-heading .content-inner {
     height: 200px;
   }
@@ -1594,7 +1595,7 @@ tr.turn:hover {
   margin-left: 70px;
 }
 
-.user-show {
+.users-show {
   // Silly exception; remove when user page is redesigned.
   .content-inner {
     max-width: none;
@@ -1745,7 +1746,7 @@ tr.turn:hover {
 
 /* Rules for the account confirmation page */
 
-.user-terms {
+.users-terms {
   .legale {
     border: 1px solid #ccc;
     padding: $lineheight;
@@ -2313,6 +2314,7 @@ a.button {
     font-size: 13px;
     background: #e8e8e8;
     padding: 2px 3px;
+    white-space: pre-wrap;
 
     code {
       padding: 0;
index f35493b26bd6da15b038f56b1cffe42d417fe337..1df6dd7d14cf41e1fad3ac04eb4512fe231eec13 100644 (file)
@@ -3,6 +3,8 @@ class ApplicationController < ActionController::Base
 
   protect_from_forgery :with => :exception
 
+  rescue_from CanCan::AccessDenied, :with => :deny_access
+
   before_action :fetch_body
   around_action :better_errors_allow_inline, :if => proc { Rails.env.development? }
 
@@ -17,16 +19,16 @@ class ApplicationController < ActionController::Base
         session.delete(:user)
         session_expires_automatically
 
-        redirect_to :controller => "user", :action => "suspended"
+        redirect_to :controller => "users", :action => "suspended"
 
       # don't allow access to any auth-requiring part of the site unless
       # the new CTs have been seen (and accept/decline chosen).
       elsif !current_user.terms_seen && flash[:skip_terms].nil?
-        flash[:notice] = t "user.terms.you need to accept or decline"
+        flash[:notice] = t "users.terms.you need to accept or decline"
         if params[:referer]
-          redirect_to :controller => "user", :action => "terms", :referer => params[:referer]
+          redirect_to :controller => "users", :action => "terms", :referer => params[:referer]
         else
-          redirect_to :controller => "user", :action => "terms", :referer => request.fullpath
+          redirect_to :controller => "users", :action => "terms", :referer => request.fullpath
         end
       end
     elsif session[:token]
@@ -41,7 +43,7 @@ class ApplicationController < ActionController::Base
   def require_user
     unless current_user
       if request.get?
-        redirect_to :controller => "user", :action => "login", :referer => request.fullpath
+        redirect_to :controller => "users", :action => "login", :referer => request.fullpath
       else
         head :forbidden
       end
@@ -386,11 +388,11 @@ class ApplicationController < ActionController::Base
   ##
   # render a "no such user" page
   def render_unknown_user(name)
-    @title = t "user.no_such_user.title"
+    @title = t "users.no_such_user.title"
     @not_found_user = name
 
     respond_to do |format|
-      format.html { render :template => "user/no_such_user", :status => :not_found }
+      format.html { render :template => "users/no_such_user", :status => :not_found }
       format.all { head :not_found }
     end
   end
@@ -466,6 +468,29 @@ class ApplicationController < ActionController::Base
     raise
   end
 
+  def current_ability
+    # Add in capabilities from the oauth token if it exists and is a valid access token
+    if Authenticator.new(self, [:token]).allow?
+      Ability.new(current_user).merge(Capability.new(current_token))
+    else
+      Ability.new(current_user)
+    end
+  end
+
+  def deny_access(_exception)
+    if current_token
+      set_locale
+      report_error t("oauth.permissions.missing"), :forbidden
+    elsif current_user
+      set_locale
+      report_error t("application.permission_denied"), :forbidden
+    elsif request.get?
+      redirect_to :controller => "users", :action => "login", :referer => request.fullpath
+    else
+      head :forbidden
+    end
+  end
+
   private
 
   # extract authorisation credentials from headers, returns user = nil if none
index 89b9c6ca3078aa4f8552918ae5714993dc8cbe23..6eb9675683f81df3089136e9fdfca2ba62e9ae57 100644 (file)
@@ -66,7 +66,7 @@ class BrowseController < ApplicationController
     @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")
-    if @changeset.user.data_public?
+    if @changeset.user.active? && @changeset.user.data_public?
       @next_by_user = @changeset.user.changesets.where("id > ?", @changeset.id).reorder(:id => :asc).first
       @prev_by_user = @changeset.user.changesets.where("id < ?", @changeset.id).reorder(:id => :desc).first
     end
index c03ed9056a0759277b1fda313132655299cb83f9..4ce205fd1513698dbfc9adeca3d5a48414a99ff0 100644 (file)
@@ -332,7 +332,7 @@ class ChangesetController < ApplicationController
 
     # Notify current subscribers of the new comment
     changeset.subscribers.visible.each do |user|
-      Notifier.changeset_comment_notification(comment, user).deliver_now if current_user != user
+      Notifier.changeset_comment_notification(comment, user).deliver_later if current_user != user
     end
 
     # Add the commenter to the subscribers if necessary
index 723fff17ec0e885c129087e003c343bfcf748bcd..70cb1654da8c9d0f7adf5b56197d482d81d54626 100644 (file)
@@ -3,11 +3,12 @@ class DiaryEntryController < ApplicationController
 
   before_action :authorize_web
   before_action :set_locale
-  before_action :require_user, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
+
+  authorize_resource
+
   before_action :lookup_user, :only => [:show, :comments]
   before_action :check_database_readable
   before_action :check_database_writable, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe]
-  before_action :require_administrator, :only => [:hide, :hidecomment]
   before_action :allow_thirdparty_images, :only => [:new, :edit, :index, :show, :comments]
 
   def new
@@ -65,7 +66,7 @@ class DiaryEntryController < ApplicationController
 
       # Notify current subscribers of the new comment
       @entry.subscribers.visible.each do |user|
-        Notifier.diary_comment_notification(@diary_comment, user).deliver_now if current_user != user
+        Notifier.diary_comment_notification(@diary_comment, user).deliver_later if current_user != user
       end
 
       # Add the commenter to the subscribers if necessary
@@ -215,6 +216,22 @@ class DiaryEntryController < ApplicationController
 
   private
 
+  # This is required because, being a default-deny system, cancancan
+  # _cannot_ tell you the reason you were denied access; and so
+  # the "nice" feedback presenting next steps can't be gleaned from
+  # the exception
+  ##
+  # for the hide actions, require that the user is a administrator, or fill out
+  # a helpful error message and return them to the user page.
+  def deny_access(exception)
+    if current_user && exception.action.in?([:hide, :hidecomment])
+      flash[:error] = t("users.filter.not_an_administrator")
+      redirect_to :action => "show"
+    else
+      super
+    end
+  end
+
   ##
   # return permitted diary entry parameters
   def entry_params
@@ -229,16 +246,6 @@ class DiaryEntryController < ApplicationController
     params.require(:diary_comment).permit(:body)
   end
 
-  ##
-  # require that the user is a administrator, or fill out a helpful error message
-  # and return them to the user page.
-  def require_administrator
-    unless current_user.administrator?
-      flash[:error] = t("user.filter.not_an_administrator")
-      redirect_to :action => "show"
-    end
-  end
-
   ##
   # decide on a location for the diary entry map
   def set_map_location
index 8d1acec759699d511058061152f5fcd966dad15c..0e4a7079e0e4c5e27608bf344767d529a4349e1f 100644 (file)
@@ -3,8 +3,8 @@ class IssueCommentsController < ApplicationController
 
   before_action :authorize_web
   before_action :set_locale
-  before_action :require_user
-  before_action :check_permission
+
+  authorize_resource
 
   def create
     @issue = Issue.find(params[:issue_id])
@@ -22,10 +22,12 @@ class IssueCommentsController < ApplicationController
     params.require(:issue_comment).permit(:body)
   end
 
-  def check_permission
-    unless current_user.administrator? || current_user.moderator?
+  def deny_access(_exception)
+    if current_user
       flash[:error] = t("application.require_moderator_or_admin.not_a_moderator_or_admin")
       redirect_to root_path
+    else
+      super
     end
   end
 
index ad38454f0650ba62ebd2dae40c1ab383c462c12a..8943f2d4aca695bd0ec2c6766586a70ffae95de1 100644 (file)
@@ -3,8 +3,9 @@ class IssuesController < ApplicationController
 
   before_action :authorize_web
   before_action :set_locale
-  before_action :require_user
-  before_action :check_permission
+
+  authorize_resource
+
   before_action :find_issue, :only => [:show, :resolve, :reopen, :ignore]
 
   def index
@@ -82,10 +83,12 @@ class IssuesController < ApplicationController
     @issue = Issue.find(params[:id])
   end
 
-  def check_permission
-    unless current_user.administrator? || current_user.moderator?
+  def deny_access(_exception)
+    if current_user
       flash[:error] = t("application.require_moderator_or_admin.not_a_moderator_or_admin")
       redirect_to root_path
+    else
+      super
     end
   end
 end
index 54850d403de9feb035ce5b5a91ec5d611c9f0cd8..c93c998f02655e60bee8ea202853005a0ee61d91 100644 (file)
@@ -29,7 +29,7 @@ class MessagesController < ApplicationController
       render :action => "new"
     elsif @message.save
       flash[:notice] = t ".message_sent"
-      Notifier.message_notification(@message).deliver_now
+      Notifier.message_notification(@message).deliver_later
       redirect_to :action => :inbox
     else
       render :action => "new"
@@ -54,7 +54,7 @@ class MessagesController < ApplicationController
       render :action => "new"
     else
       flash[:notice] = t ".wrong_user", :user => current_user.display_name
-      redirect_to :controller => "user", :action => "login", :referer => request.fullpath
+      redirect_to :controller => "users", :action => "login", :referer => request.fullpath
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
@@ -71,7 +71,7 @@ class MessagesController < ApplicationController
       @message.save
     else
       flash[:notice] = t ".wrong_user", :user => current_user.display_name
-      redirect_to :controller => "user", :action => "login", :referer => request.fullpath
+      redirect_to :controller => "users", :action => "login", :referer => request.fullpath
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
@@ -110,7 +110,7 @@ class MessagesController < ApplicationController
 
   # Destroy the message.
   def destroy
-    @message = Message.where("to_user_id = ? OR from_user_id = ?", current_user.id, current_user.id).find(params[:message_id])
+    @message = Message.where("to_user_id = ? OR from_user_id = ?", current_user.id, current_user.id).find(params[:id])
     @message.from_user_visible = false if @message.sender == current_user
     @message.to_user_visible = false if @message.recipient == current_user
     if @message.save && !request.xhr?
index 19ff725dc992aa924605fc841a8a215bc34f5bff..9cdc38446ca5df7335528d34aeed3bbe5bbae4ad 100644 (file)
@@ -255,12 +255,47 @@ class NotesController < ApplicationController
   ##
   # Return a list of notes matching a given string
   def search
-    # Check the arguments are sane
-    raise OSM::APIBadUserInput, "No query string was given" unless params[:q]
-
-    # Get any conditions that need to be applied
+    # Get the initial set of notes
     @notes = closed_condition(Note.all)
-    @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?)", params[:q])
+
+    # Add any user filter
+    if params[:display_name] || params[:user]
+      if params[:display_name]
+        @user = User.find_by(:display_name => params[:display_name])
+
+        raise OSM::APIBadUserInput, "User #{params[:display_name]} not known" unless @user
+      else
+        @user = User.find_by(:id => params[:user])
+
+        raise OSM::APIBadUserInput, "User #{params[:user]} not known" unless @user
+      end
+
+      @notes = @notes.joins(:comments).where(:note_comments => { :author_id => @user })
+    end
+
+    # Add any text filter
+    @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?)", params[:q]) if params[:q]
+
+    # Add any date filter
+    if params[:from]
+      begin
+        from = Time.parse(params[:from])
+      rescue ArgumentError
+        raise OSM::APIBadUserInput, "Date #{params[:from]} is in a wrong format"
+      end
+
+      begin
+        to = if params[:to]
+               Time.parse(params[:to])
+             else
+               Time.now
+             end
+      rescue ArgumentError
+        raise OSM::APIBadUserInput, "Date #{params[:to]} is in a wrong format"
+      end
+
+      @notes = @notes.where(:created_at => from..to)
+    end
 
     # Find the notes we want to return
     @notes = @notes.order("updated_at DESC").limit(result_limit).preload(:comments)
@@ -289,10 +324,10 @@ class NotesController < ApplicationController
         @notes = @notes.visible unless current_user&.moderator?
         @notes = @notes.order("updated_at DESC, id").distinct.offset((@page - 1) * @page_size).limit(@page_size).preload(:comments => :author).to_a
       else
-        @title = t "user.no_such_user.title"
+        @title = t "users.no_such_user.title"
         @not_found_user = params[:display_name]
 
-        render :template => "user/no_such_user", :status => :not_found
+        render :template => "users/no_such_user", :status => :not_found
       end
     end
   end
@@ -352,7 +387,7 @@ class NotesController < ApplicationController
     comment = note.comments.create!(attributes)
 
     note.comments.map(&:author).uniq.each do |user|
-      Notifier.note_comment_notification(comment, user).deliver_now if notify && user && user != current_user && user.visible?
+      Notifier.note_comment_notification(comment, user).deliver_later if notify && user && user != current_user && user.visible?
     end
   end
 end
index ef87a8699fe807884ec29d09d65a1064bf49a2fa..8087268193d9159932826415b33f9e31a05b131c 100644 (file)
@@ -3,7 +3,8 @@ class ReportsController < ApplicationController
 
   before_action :authorize_web
   before_action :set_locale
-  before_action :require_user
+
+  authorize_resource
 
   def new
     if required_new_report_params_present?
index efb77e2f52aad92574600d3d87082e3e1376bbe1..4b960e4e2b9682fd6e49036a25fff89093988bf0 100644 (file)
@@ -6,10 +6,11 @@ class SiteController < ApplicationController
   before_action :set_locale
   before_action :redirect_browse_params, :only => :index
   before_action :redirect_map_params, :only => [:index, :edit, :export]
-  before_action :require_user, :only => [:welcome]
   before_action :require_oauth, :only => [:index]
   before_action :update_totp, :only => [:index]
 
+  authorize_resource :class => false
+
   def index
     session[:location] ||= OSM.ip_location(request.env["REMOTE_ADDR"]) unless STATUS == :database_readonly || STATUS == :database_offline
   end
index 0aa2e8d523240c5f1eb3add8f6c978204bcab86f..915c847de4f221fc8a45662efa712d1ab79a5b3a 100644 (file)
@@ -2,8 +2,9 @@
 class UserPreferencesController < ApplicationController
   skip_before_action :verify_authenticity_token
   before_action :authorize
-  before_action :require_allow_read_prefs, :only => [:read_one, :read]
-  before_action :require_allow_write_prefs, :except => [:read_one, :read]
+
+  authorize_resource
+
   around_action :api_call_handle_error
 
   ##
similarity index 89%
rename from app/controllers/user_controller.rb
rename to app/controllers/users_controller.rb
index 78299dccf2abe5342c4f82f7bc76acf1aca52f66..016d7c87dd21c1501a453c1805b1a3130135786e 100644 (file)
@@ -1,4 +1,4 @@
-class UserController < ApplicationController
+class UsersController < ApplicationController
   layout "site", :except => [:api_details]
 
   skip_before_action :verify_authenticity_token, :only => [:api_read, :api_users, :api_details, :api_gpx_files, :auth_success]
@@ -27,7 +27,7 @@ class UserController < ApplicationController
     if request.xhr?
       render :partial => "terms"
     else
-      @title = t "user.terms.title"
+      @title = t "users.terms.title"
 
       if current_user&.terms_agreed?
         # Already agreed to terms, so just show settings
@@ -39,13 +39,13 @@ class UserController < ApplicationController
   end
 
   def save
-    @title = t "user.new.title"
+    @title = t "users.new.title"
 
     if params[:decline]
       if current_user
         current_user.terms_seen = true
 
-        flash[:notice] = t("user.new.terms declined", :url => t("user.new.terms declined url")).html_safe if current_user.save
+        flash[:notice] = t("users.new.terms declined", :url => t("users.new.terms declined url")).html_safe if current_user.save
 
         if params[:referer]
           redirect_to params[:referer]
@@ -53,7 +53,7 @@ class UserController < ApplicationController
           redirect_to :action => :account, :display_name => current_user.display_name
         end
       else
-        redirect_to t("user.terms.declined")
+        redirect_to t("users.terms.declined")
       end
     elsif current_user
       unless current_user.terms_agreed?
@@ -61,7 +61,7 @@ class UserController < ApplicationController
         current_user.terms_agreed = Time.now.getutc
         current_user.terms_seen = true
 
-        flash[:notice] = t "user.new.terms accepted" if current_user.save
+        flash[:notice] = t "users.new.terms accepted" if current_user.save
       end
 
       if params[:referer]
@@ -107,7 +107,7 @@ class UserController < ApplicationController
             successful_login(current_user)
           else
             session[:token] = current_user.tokens.create.token
-            Notifier.signup_confirm(current_user, current_user.tokens.create(:referer => referer)).deliver_now
+            Notifier.signup_confirm(current_user, current_user.tokens.create(:referer => referer)).deliver_later
             redirect_to :action => "confirm", :display_name => current_user.display_name
           end
         else
@@ -134,18 +134,18 @@ class UserController < ApplicationController
         current_user.errors.add(attribute, error)
       end
     end
-    @title = t "user.account.title"
+    @title = t "users.account.title"
   end
 
   def go_public
     current_user.data_public = true
     current_user.save
-    flash[:notice] = t "user.go_public.flash success"
+    flash[:notice] = t "users.go_public.flash success"
     redirect_to :action => "account", :display_name => current_user.display_name
   end
 
   def lost_password
-    @title = t "user.lost_password.title"
+    @title = t "users.lost_password.title"
 
     if params[:user] && params[:user][:email]
       user = User.visible.find_by(:email => params[:user][:email])
@@ -158,17 +158,17 @@ class UserController < ApplicationController
 
       if user
         token = user.tokens.create
-        Notifier.lost_password(user, token).deliver_now
-        flash[:notice] = t "user.lost_password.notice email on way"
+        Notifier.lost_password(user, token).deliver_later
+        flash[:notice] = t "users.lost_password.notice email on way"
         redirect_to :action => "login"
       else
-        flash.now[:error] = t "user.lost_password.notice email cannot find"
+        flash.now[:error] = t "users.lost_password.notice email cannot find"
       end
     end
   end
 
   def reset_password
-    @title = t "user.reset_password.title"
+    @title = t "users.reset_password.title"
 
     if params[:token]
       token = UserToken.find_by(:token => params[:token])
@@ -184,12 +184,12 @@ class UserController < ApplicationController
 
           if current_user.save
             token.destroy
-            flash[:notice] = t "user.reset_password.flash changed"
+            flash[:notice] = t "users.reset_password.flash changed"
             successful_login(current_user)
           end
         end
       else
-        flash[:error] = t "user.reset_password.flash token bad"
+        flash[:error] = t "users.reset_password.flash token bad"
         redirect_to :action => "lost_password"
       end
     else
@@ -198,7 +198,7 @@ class UserController < ApplicationController
   end
 
   def new
-    @title = t "user.new.title"
+    @title = t "users.new.title"
     @referer = params[:referer] || session[:referer]
 
     append_content_security_policy_directives(
@@ -271,7 +271,7 @@ class UserController < ApplicationController
   end
 
   def logout
-    @title = t "user.logout.title"
+    @title = t "users.logout.title"
 
     if params[:session] == session.id
       if session[:token]
@@ -293,10 +293,10 @@ class UserController < ApplicationController
     if request.post?
       token = UserToken.find_by(:token => params[:confirm_string])
       if token&.user&.active?
-        flash[:error] = t("user.confirm.already active")
+        flash[:error] = t("users.confirm.already active")
         redirect_to :action => "login"
       elsif !token || token.expired?
-        flash[:error] = t("user.confirm.unknown token")
+        flash[:error] = t("users.confirm.unknown token")
         redirect_to :action => "confirm"
       else
         user = token.user
@@ -315,7 +315,7 @@ class UserController < ApplicationController
         end
 
         if token.nil? || token.user != user
-          flash[:notice] = t("user.confirm.success")
+          flash[:notice] = t("users.confirm.success")
           redirect_to :action => :login, :referer => referer
         else
           token.destroy
@@ -337,10 +337,10 @@ class UserController < ApplicationController
     token = UserToken.find_by(:token => session[:token])
 
     if user.nil? || token.nil? || token.user != user
-      flash[:error] = t "user.confirm_resend.failure", :name => params[:display_name]
+      flash[:error] = t "users.confirm_resend.failure", :name => params[:display_name]
     else
-      Notifier.signup_confirm(user, user.tokens.create).deliver_now
-      flash[:notice] = t("user.confirm_resend.success", :email => user.email, :sender => SUPPORT_EMAIL).html_safe
+      Notifier.signup_confirm(user, user.tokens.create).deliver_later
+      flash[:notice] = t("users.confirm_resend.success", :email => user.email, :sender => SUPPORT_EMAIL).html_safe
     end
 
     redirect_to :action => "login"
@@ -357,9 +357,9 @@ class UserController < ApplicationController
         gravatar_enabled = gravatar_enable(current_user)
         if current_user.save
           flash[:notice] = if gravatar_enabled
-                             t("user.confirm_email.success") + " " + gravatar_status_message(current_user)
+                             t("users.confirm_email.success") + " " + gravatar_status_message(current_user)
                            else
-                             t("user.confirm_email.success")
+                             t("users.confirm_email.success")
                            end
         else
           flash[:errors] = current_user.errors
@@ -368,10 +368,10 @@ class UserController < ApplicationController
         session[:user] = current_user.id
         redirect_to :action => "account", :display_name => current_user.display_name
       elsif token
-        flash[:error] = t "user.confirm_email.failure"
+        flash[:error] = t "users.confirm_email.failure"
         redirect_to :action => "account", :display_name => token.user.display_name
       else
-        flash[:error] = t "user.confirm_email.unknown_token"
+        flash[:error] = t "users.confirm_email.unknown_token"
       end
     end
   end
@@ -429,12 +429,12 @@ class UserController < ApplicationController
         friend.befriender = current_user
         friend.befriendee = @new_friend
         if current_user.is_friends_with?(@new_friend)
-          flash[:warning] = t "user.make_friend.already_a_friend", :name => @new_friend.display_name
+          flash[:warning] = t "users.make_friend.already_a_friend", :name => @new_friend.display_name
         elsif friend.save
-          flash[:notice] = t "user.make_friend.success", :name => @new_friend.display_name
-          Notifier.friend_notification(friend).deliver_now
+          flash[:notice] = t "users.make_friend.success", :name => @new_friend.display_name
+          Notifier.friend_notification(friend).deliver_later
         else
-          friend.add_error(t("user.make_friend.failed", :name => @new_friend.display_name))
+          friend.add_error(t("users.make_friend.failed", :name => @new_friend.display_name))
         end
 
         if params[:referer]
@@ -455,9 +455,9 @@ class UserController < ApplicationController
       if request.post?
         if current_user.is_friends_with?(@friend)
           Friend.where(:user_id => current_user.id, :friend_user_id => @friend.id).delete_all
-          flash[:notice] = t "user.remove_friend.success", :name => @friend.display_name
+          flash[:notice] = t "users.remove_friend.success", :name => @friend.display_name
         else
-          flash[:error] = t "user.remove_friend.not_a_friend", :name => @friend.display_name
+          flash[:error] = t "users.remove_friend.not_a_friend", :name => @friend.display_name
         end
 
         if params[:referer]
@@ -562,9 +562,9 @@ class UserController < ApplicationController
         when "active", "confirmed" then
           successful_login(user, request.env["omniauth.params"]["referer"])
         when "suspended" then
-          failed_login t("user.login.account is suspended", :webmaster => "mailto:#{SUPPORT_EMAIL}").html_safe
+          failed_login t("users.login.account is suspended", :webmaster => "mailto:#{SUPPORT_EMAIL}").html_safe
         else
-          failed_login t("user.login.auth failure")
+          failed_login t("users.login.auth failure")
         end
       else
         redirect_to :action => "new", :nickname => name, :email => email,
@@ -576,7 +576,7 @@ class UserController < ApplicationController
   ##
   # omniauth failure callback
   def auth_failure
-    flash[:error] = t("user.auth_failure." + params[:message])
+    flash[:error] = t("users.auth_failure." + params[:message])
     redirect_to params[:origin] || login_url
   end
 
@@ -590,9 +590,9 @@ class UserController < ApplicationController
     elsif user = User.authenticate(:username => username, :password => password, :pending => true)
       unconfirmed_login(user)
     elsif User.authenticate(:username => username, :password => password, :suspended => true)
-      failed_login t("user.login.account is suspended", :webmaster => "mailto:#{SUPPORT_EMAIL}").html_safe, username
+      failed_login t("users.login.account is suspended", :webmaster => "mailto:#{SUPPORT_EMAIL}").html_safe, username
     else
-      failed_login t("user.login.auth failure"), username
+      failed_login t("users.login.auth failure"), username
     end
   end
 
@@ -727,15 +727,15 @@ class UserController < ApplicationController
       set_locale(true)
 
       if user.new_email.blank? || user.new_email == user.email
-        flash.now[:notice] = t "user.account.flash update success"
+        flash.now[:notice] = t "users.account.flash update success"
       else
         user.email = user.new_email
 
         if user.valid?
-          flash.now[:notice] = t "user.account.flash update success confirm needed"
+          flash.now[:notice] = t "users.account.flash update success confirm needed"
 
           begin
-            Notifier.email_confirm(user, user.tokens.create).deliver_now
+            Notifier.email_confirm(user, user.tokens.create).deliver_later
           rescue StandardError
             # Ignore errors sending email
           end
@@ -754,7 +754,7 @@ class UserController < ApplicationController
   # and return them to the user page.
   def require_administrator
     if current_user && !current_user.administrator?
-      flash[:error] = t("user.filter.not_an_administrator")
+      flash[:error] = t("users.filter.not_an_administrator")
 
       if params[:display_name]
         redirect_to user_path(:display_name => params[:display_name])
@@ -839,9 +839,9 @@ class UserController < ApplicationController
   # display a message about th current status of the gravatar setting
   def gravatar_status_message(user)
     if user.image_use_gravatar
-      t "user.account.gravatar.enabled"
+      t "users.account.gravatar.enabled"
     else
-      t "user.account.gravatar.disabled"
+      t "users.account.gravatar.disabled"
     end
   end
 end
index bc19bc8571ce6fe9ab9f22034f7c2b341a0639a6..9bcae4ad4d010ce0fe3de73bcb5b666b83e5db31 100644 (file)
@@ -1,7 +1,7 @@
 module ChangesetHelper
   def changeset_user_link(changeset)
     if changeset.user.status == "deleted"
-      t("user.no_such_user.deleted")
+      t("users.no_such_user.deleted")
     elsif changeset.user.data_public?
       link_to(changeset.user.display_name, user_path(changeset.user))
     else
index efe2346c9738bc14d605c9ede55edf4ded5d04be..89c8cc376a24b7eadaa2b042be51e845306a9b62 100644 (file)
@@ -16,9 +16,9 @@ module NoteHelper
     if author.nil?
       ""
     elsif author.status == "deleted"
-      t("user.no_such_user.deleted")
+      t("users.no_such_user.deleted")
     else
-      link_to h(author.display_name), link_options.merge(:controller => "user", :action => "show", :display_name => author.display_name)
+      link_to h(author.display_name), link_options.merge(:controller => "users", :action => "show", :display_name => author.display_name)
     end
   end
 end
index 065a562c4d282ad977ef51733b9f687a811bf988..1fc8e3ed2f1e0b6f82f6e325d0425c278a3d1e87 100644 (file)
@@ -45,15 +45,15 @@ module UserHelper
   # External authentication support
 
   def openid_logo
-    image_tag "openid_small.png", :alt => t("user.login.openid_logo_alt"), :class => "openid_logo"
+    image_tag "openid_small.png", :alt => t("users.login.openid_logo_alt"), :class => "openid_logo"
   end
 
   def auth_button(name, provider, options = {})
     link_to(
-      image_tag("#{name}.png", :alt => t("user.login.auth_providers.#{name}.alt")),
+      image_tag("#{name}.png", :alt => t("users.login.auth_providers.#{name}.alt")),
       auth_path(options.merge(:provider => provider)),
       :class => "auth_button",
-      :title => t("user.login.auth_providers.#{name}.title")
+      :title => t("users.login.auth_providers.#{name}.title")
     )
   end
 
index 0b7e9c6162c2c2365a558594daf40a7ac3572b05..b9430535ea3fa8702b5cbee8b3e77a7acb624c14 100644 (file)
@@ -9,21 +9,21 @@ module UserRolesHelper
     if current_user&.administrator?
       if user.has_role?(role)
         image = "roles/#{role}"
-        alt = t("user.show.role.revoke.#{role}")
-        title = t("user.show.role.revoke.#{role}")
+        alt = t("users.show.role.revoke.#{role}")
+        title = t("users.show.role.revoke.#{role}")
         url = revoke_role_path(:display_name => user.display_name, :role => role)
         confirm = t("user_role.revoke.are_you_sure", :name => user.display_name, :role => role)
       else
         image = "roles/blank_#{role}"
-        alt = t("user.show.role.grant.#{role}")
-        title = t("user.show.role.grant.#{role}")
+        alt = t("users.show.role.grant.#{role}")
+        title = t("users.show.role.grant.#{role}")
         url = grant_role_path(:display_name => user.display_name, :role => role)
         confirm = t("user_role.grant.are_you_sure", :name => user.display_name, :role => role)
       end
     elsif user.has_role?(role)
       image = "roles/#{role}"
-      alt = t("user.show.role.#{role}")
-      title = t("user.show.role.#{role}")
+      alt = t("users.show.role.#{role}")
+      title = t("users.show.role.#{role}")
     end
 
     if image
similarity index 95%
rename from app/models/notifier.rb
rename to app/mailers/notifier.rb
index 3cc1be1e66548ef2d98d0695db89ecf163829cc3..4b53c66f6825f1b38d5fdbde69653002762e9896 100644 (file)
@@ -8,7 +8,7 @@ class Notifier < ActionMailer::Base
 
   def signup_confirm(user, token)
     with_recipient_locale user do
-      @url = url_for(:controller => "user", :action => "confirm",
+      @url = url_for(:controller => "users", :action => "confirm",
                      :display_name => user.display_name,
                      :confirm_string => token.token)
 
@@ -20,7 +20,7 @@ class Notifier < ActionMailer::Base
   def email_confirm(user, token)
     with_recipient_locale user do
       @address = user.new_email
-      @url = url_for(:controller => "user", :action => "confirm_email",
+      @url = url_for(:controller => "users", :action => "confirm_email",
                      :confirm_string => token.token)
 
       mail :to => user.new_email,
@@ -30,7 +30,7 @@ class Notifier < ActionMailer::Base
 
   def lost_password(user, token)
     with_recipient_locale user do
-      @url = url_for(:controller => "user", :action => "reset_password",
+      @url = url_for(:controller => "users", :action => "reset_password",
                      :token => token.token)
 
       mail :to => user.email,
@@ -70,7 +70,7 @@ class Notifier < ActionMailer::Base
       @text = message.body
       @title = message.title
       @readurl = message_url(message)
-      @replyurl = reply_message_url(message)
+      @replyurl = message_reply_url(message)
       @author = @from_user
 
       attach_user_avatar(message.sender)
@@ -105,7 +105,7 @@ class Notifier < ActionMailer::Base
     with_recipient_locale friend.befriendee do
       @friend = friend
       @viewurl = user_url(@friend.befriender)
-      @friendurl = url_for(:controller => "user", :action => "make_friend",
+      @friendurl = url_for(:controller => "users", :action => "make_friend",
                            :display_name => @friend.befriender.display_name)
       @author = @friend.befriender.display_name
 
similarity index 89%
rename from lib/geo_record.rb
rename to app/models/concerns/geo_record.rb
index e02734ec909dc8064f78d2cf8e17455287939911..06049c2951b25876999cc7e3ee0fc070bacd97e6 100644 (file)
@@ -1,6 +1,8 @@
 require "delegate"
 
 module GeoRecord
+  extend ActiveSupport::Concern
+
   # Ensure that when coordinates are printed that they are always in decimal degrees,
   # and not e.g. 4.0e-05
   # Unfortunately you can't extend Numeric classes directly (e.g. `Coord < Float`).
@@ -19,9 +21,9 @@ module GeoRecord
   # the database.
   SCALE = 10000000
 
-  def self.included(base)
-    base.scope :bbox, ->(bbox) { base.where(OSM.sql_for_area(bbox)) }
-    base.before_save :update_tile
+  included do
+    scope :bbox, ->(bbox) { where(OSM.sql_for_area(bbox)) }
+    before_save :update_tile
   end
 
   # Is this node within -90 >= latitude >= 90 and -180 >= longitude >= 180
similarity index 78%
rename from lib/not_redactable.rb
rename to app/models/concerns/not_redactable.rb
index 6a57732963989841c89be951c60d941c52e1aed6..2d721530f133fb7f93b3c9c4d58dc4a11469b5de 100644 (file)
@@ -1,6 +1,6 @@
-require "osm"
-
 module NotRedactable
+  extend ActiveSupport::Concern
+
   def redacted?
     false
   end
similarity index 97%
rename from lib/object_metadata.rb
rename to app/models/concerns/object_metadata.rb
index c765df5264d6b749e59e178d847e618e84f40f6e..dcfde889ce83afdbc831185371cc4d7998123b5f 100644 (file)
@@ -1,4 +1,6 @@
 module ObjectMetadata
+  extend ActiveSupport::Concern
+
   def add_metadata_to_xml_node(el, osm, changeset_cache, user_display_name_cache)
     el["changeset"] = osm.changeset_id.to_s
     el["redacted"] = osm.redaction.id.to_s if osm.redacted?
index f8450d0a369625be13158760ae3ae5eb70ec5635..c9caa1b8544c67e53736d887a7c5e6db2d378f79 100644 (file)
@@ -33,7 +33,8 @@ class NoteComment < ActiveRecord::Base
   validates :visible, :inclusion => [true, false]
   validates :author, :associated => true
   validates :event, :inclusion => %w[opened closed reopened commented hidden]
-  validates :body, :format => /\A[^\x00-\x08\x0b-\x0c\x0e-\x1f\x7f\ufffe\uffff]*\z/
+  validates :body, :allow_blank => false, :length => { :maximum => 2000 },
+                   :format => /\A[^\x00-\x08\x0b-\x0c\x0e-\x1f\x7f\ufffe\uffff]*\z/
 
   # Return the comment text
   def body
index 202db12daa66479f379c4aeb84e49122279b1991..f55711a69bb75b060ae7a0ec61a120afbf852657 100644 (file)
@@ -384,7 +384,9 @@ class Relation < ActiveRecord::Base
         changed_members.collect { |type, _id, _role| type == "Relation" }
                        .inject(false) { |acc, elem| acc || elem }
 
-      update_members = if tags_changed || any_relations
+      # if the relation is being deleted tags_changed will be true and members empty
+      # so we need to use changed_members to create a correct bounding box
+      update_members = if visible && (tags_changed || any_relations)
                          # add all non-relation bounding boxes to the changeset
                          # FIXME: check for tag changes along with element deletions and
                          # make sure that the deleted element's bounding box is hit.
index 545b6d072afea5f4e7ea5001c08c310a899d50eb..81e930812c883310f7d8525d6dbdf83855743905 100644 (file)
@@ -63,7 +63,7 @@
 
   <% unless current_user %>
     <div class="notice">
-      <%= link_to(t(".join_discussion"), :controller => 'user', :action => 'login', :referer => request.fullpath) %>
+      <%= link_to(t(".join_discussion"), :controller => 'users', :action => 'login', :referer => request.fullpath) %>
     </div>
   <% end %>
 
index f6518daf204b2d5acc8b97c0bfe1332aa02ca930..e8b64b705777a75c77c3fc5cbac914c3d4081c02 100644 (file)
@@ -10,7 +10,7 @@
   <form action="#">
     <input type="hidden" name="lon">
     <input type="hidden" name="lat">
-    <textarea class="comment" name="text" cols="40" rows="10" placeholder="<%= t('javascripts.notes.new.advice') %>"></textarea>
+    <textarea class="comment" name="text" cols="40" rows="10" maxlength="2000" placeholder="<%= t('javascripts.notes.new.advice') %>"></textarea>
     <div class="buttons clearfix">
       <input type="submit" name="add" value="<%= t('javascripts.notes.new.add') %>" disabled="1">
     </div>
index 53ea0759e9f79866bbbfc97dfe416e0b0a1d0e8d..a677a7c14e72684bbb6c776961bd6236d57900f0 100644 (file)
@@ -42,7 +42,7 @@
 
   <% if @note.status == "open" %>
     <form action="#">
-      <textarea class="comment" name="text" cols="40" rows="5"></textarea>
+      <textarea class="comment" name="text" cols="40" rows="5" maxlength="2000"></textarea>
       <div class="buttons clearfix">
         <% if current_user and current_user.moderator? -%>
           <input type="submit" name="hide" value="<%= t('javascripts.notes.show.hide') %>" class="deemphasize" data-note-id="<%= @note.id %>" data-method="DELETE" data-url="<%= note_url(@note, 'json') %>">
index 61faea97f44034956fd52a4a8d1b6277235b30c4..7aa65d2c36318948de2a95cdcb4afd5bcc691e45 100644 (file)
@@ -1 +1 @@
-xml.a(user.display_name, :href => url_for(:controller => "user", :action => "view", :display_name => user.display_name))
+xml.a(user.display_name, :href => url_for(:controller => "users", :action => "view", :display_name => user.display_name))
index 754070e529c8661e6ce73df034cf8d301178ce66..02bebc5bc0d9f277106cbebb54551cf81daecd3c 100644 (file)
@@ -30,7 +30,7 @@
       <div class="diary-subscribe-buttons"><%= link_to t('javascripts.changesets.show.subscribe'), diary_entry_subscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => :button %></div>
     <% end %>
   <% else %>
-    <h3 id="newcomment"><%= raw t(".login_to_leave_a_comment", :login_link => link_to(t(".login"), :controller => 'user', :action => 'login', :referer => request.fullpath)) %></h3>
+    <h3 id="newcomment"><%= raw t(".login_to_leave_a_comment", :login_link => link_to(t(".login"), :controller => 'users', :action => 'login', :referer => request.fullpath)) %></h3>
   <% end %>
 </div>
 
index cd3dfd46883e7d10b6f48516642d930c6c1eacaa..946f95febf22f23aee9ba1391a70c2ab247be514 100644 (file)
@@ -54,7 +54,7 @@
       <li id="compact-secondary-nav" class="dropdown">
         <a class="dropdown-toggle" data-toggle="dropdown" href="#"><%= t 'layouts.more' %> <b class="caret"></b></a>
         <ul class="dropdown-menu">
-          <% if current_user and ( current_user.administrator? or current_user.moderator? ) %>
+          <% if can? :index, Issue %>
             <li class="<%= current_page_class(issues_path) %>">
               <%= link_to issues_path(:status => 'open') do %>
                 <%= open_issues_count %>
           <li>
             <%= link_to inbox_messages_path do %>
               <span class='count-number'><%= number_with_delimiter(current_user.new_messages.size) %></span>
-              <%= t('user.show.my messages') %>
+              <%= t('users.show.my messages') %>
             <% end %>
           </li>
           <li>
-            <%= link_to t('user.show.my profile'), user_path(current_user) %>
+            <%= link_to t('users.show.my profile'), user_path(current_user) %>
           </li>
           <li>
-            <%= link_to t('user.show.my settings'), :controller => 'user', :action => 'account', :display_name => current_user.display_name %>
+            <%= link_to t('users.show.my settings'), :controller => 'users', :action => 'account', :display_name => current_user.display_name %>
           </li>
           <li class="divider"></li>
           <li>
index 1e4cd8934532c2f56a8ed28373bef2db39a575fa..6ed41a0e0bf984eb8296dbf575597d92791dad44 100644 (file)
@@ -2,7 +2,7 @@
   <td class="inbox-sender"><%= link_to h(message_summary.sender.display_name), user_path(message_summary.sender) %></td>
   <td class="inbox-subject"><%= link_to h(message_summary.title), message_path(message_summary) %></td>
   <td class="inbox-sent"><%= l message_summary.sent_on, :format => :friendly %></td>
-  <td class="inbox-mark-unread"><%= button_to t('.unread_button'), mark_message_path(message_summary, :mark => 'unread'), { :remote => true } %></td>
-  <td class="inbox-mark-read"><%= button_to t('.read_button'), mark_message_path(message_summary, :mark => 'read'), { :remote => true } %></td>
-  <td class="inbox-destroy"><%= button_to t('.destroy_button'), destroy_message_path(message_summary, :referer => request.fullpath), { :remote => true } %></td>
+  <td class="inbox-mark-unread"><%= button_to t('.unread_button'), message_mark_path(message_summary, :mark => 'unread'), { :remote => true } %></td>
+  <td class="inbox-mark-read"><%= button_to t('.read_button'), message_mark_path(message_summary, :mark => 'read'), { :remote => true } %></td>
+  <td class="inbox-destroy"><%= button_to t('.destroy_button'), message_path(message_summary, :referer => request.fullpath), { :method => :delete, :remote => true } %></td>
 </tr>
index a9346fb5ee9343879dbcf51ab641f5dfe0fd39c1..028ab135b9ac79d9b931326404796ebefe7c31f7 100644 (file)
@@ -2,5 +2,5 @@
   <td class="inbox-sender"><%= link_to h(sent_message_summary.recipient.display_name), user_path(sent_message_summary.recipient) %></td>
   <td class="inbox-subject"><%= link_to h(sent_message_summary.title), message_path(sent_message_summary) %></td>
   <td class="inbox-sent"><%= l sent_message_summary.sent_on, :format => :friendly %></td>
-  <td class="inbox-destroy"><%= button_to t('.destroy_button'), destroy_message_path(sent_message_summary, :referer => request.fullpath), { :remote => true } %></td>
+  <td class="inbox-destroy"><%= button_to t('.destroy_button'), message_path(sent_message_summary, :referer => request.fullpath), { :method => :delete, :remote => true } %></td>
 </tr>
index 934cfb99a74499a27fa43372fffea2bc5674613d..e3634e232807a9600e6157d41a017e5ffed93784 100644 (file)
@@ -14,9 +14,9 @@
   <div class="richtext"><%= @message.body.to_html %></div>
 
   <div class='message-buttons buttons'>
-    <%= button_to t('.reply_button'), reply_message_path(@message), :class => 'reply-button' %>
-    <%= button_to t('.unread_button'), mark_message_path(@message, :mark => 'unread'), :class => 'mark-unread-button' %>
-    <%= button_to t('.destroy_button'), destroy_message_path(@message), :class => 'destroy-button' %>
+    <%= button_to t('.reply_button'), message_reply_path(@message), :class => 'reply-button' %>
+    <%= button_to t('.unread_button'), message_mark_path(@message, :mark => 'unread'), :class => 'mark-unread-button' %>
+    <%= button_to t('.destroy_button'), message_path(@message), :method => 'delete', :class => 'destroy-button' %>
 
 <% else %>
 
index 8ec72f3ac17cfd44a76ef8dc4ce88cf34efb8091..36b454188f09a88b9626319e42e68887823e3d0c 100644 (file)
@@ -7,10 +7,10 @@
   <b><%= t '.user' %></b>
   <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %>
 </p>
-<p class="richtext">
+<div class="richtext">
   <b><%= t '.description' %></b>
   <%= @redaction.description.to_html %>
-</p>
+</div>
 
 <% if current_user and current_user.moderator? %>
 <div class="buttons">
index 1b85d201cdcda0e8aa004a2cbefce3753e12f43b..25504948ff0e4bf0e537f702016a834a449533aa 100644 (file)
@@ -56,6 +56,7 @@
 <p><%= t ".legal_babble.contributors_intro_html", :locale => @locale %></p>
 <ul id="contributors">
   <li><%= t ".legal_babble.contributors_at_html", :locale => @locale %></li>
+  <li><%= t ".legal_babble.contributors_au_html", :locale => @locale %></li>
   <li><%= t ".legal_babble.contributors_ca_html", :locale => @locale %></li>
   <li><%= t ".legal_babble.contributors_fi_html", :locale => @locale %></li>
   <li><%= t ".legal_babble.contributors_fr_html", :locale => @locale %></li>
diff --git a/app/views/user/blocked.html.erb b/app/views/user/blocked.html.erb
deleted file mode 100644 (file)
index 93b4972..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<% content_for :heading do %>
-  <h1><%= t 'user.new.title' %></h1>
-  <div class='header-illustration new-user-main'></div>
-  <div class='header-illustration new-user-arm'></div>
-<% end %>
-
-<div class="message">
-  <h1><%= t 'user.new.no_auto_account_create' %></h1>
-  <h2><%= raw t 'user.new.contact_webmaster', :webmaster => "mailto:#{SUPPORT_EMAIL}" %></h2>
-</div>
similarity index 68%
rename from app/views/user/_contact.html.erb
rename to app/views/users/_contact.html.erb
index 123f511d2473287d8cd200ee0a2215e716b2ae93..ab56ce3e80a310f144611a47307d61e5bb6eb999 100644 (file)
       <% if @user.home_lon and @user.home_lat and contact.home_lon and contact.home_lat %>
         <% distance = @user.distance(contact) %>
         <% if distance < 1 %>
-          (<%= t 'user.show.m away', :count => (distance * 1000).round %>)
+          (<%= t 'users.show.m away', :count => (distance * 1000).round %>)
         <% else %>
-          (<%= t 'user.show.km away', :count => distance.round %>)
+          (<%= t 'users.show.km away', :count => distance.round %>)
         <% end %>
       <% end %>
     </p>
     <p>
       <% changeset = contact.changesets.first %>
       <% if changeset %>
-        <%= t('user.show.latest edit', :ago => t('user.show.ago', :time_in_words_ago => time_ago_in_words(changeset.created_at))) %>
+        <%= t('users.show.latest edit', :ago => t('users.show.ago', :time_in_words_ago => time_ago_in_words(changeset.created_at))) %>
         <% comment = changeset.tags['comment'].to_s != '' ? changeset.tags['comment'] : t('browse.no_comment') %>
         "<%= link_to(comment,
                             {:controller => 'browse', :action => 'changeset', :id => changeset.id},
     </p>
 
     <ul class='secondary-actions clearfix deemphasize'>
-      <li><%= link_to t('user.show.send message'), new_message_path(contact) %></li>
+      <li><%= link_to t('users.show.send message'), new_message_path(contact) %></li>
       <li>
         <% if current_user.is_friends_with?(contact) %>
-          <%= link_to t('user.show.remove as friend'), remove_friend_path(:display_name => contact.display_name, :referer => request.fullpath), :method => :post %>
+          <%= link_to t('users.show.remove as friend'), remove_friend_path(:display_name => contact.display_name, :referer => request.fullpath), :method => :post %>
         <% else %>
-          <%= link_to t('user.show.add as friend'), make_friend_path(:display_name => contact.display_name, :referer => request.fullpath), :method => :post %>
+          <%= link_to t('users.show.add as friend'), make_friend_path(:display_name => contact.display_name, :referer => request.fullpath), :method => :post %>
       <% end %>
       </li>
     </ul>
similarity index 89%
rename from app/views/user/_user.html.erb
rename to app/views/users/_user.html.erb
index da9ae75c921b5b50c7c09df849e63649bb521252..b9b7bc96345b259bece5f30784112788b11de970 100644 (file)
@@ -7,13 +7,13 @@
   <td>
     <p>
       <% if user.creation_ip %>
-        <%= raw t 'user.index.summary',
+        <%= raw t 'users.index.summary',
             :name => link_to(h(user.display_name), user_path(user)),
             :ip_address => link_to(user.creation_ip, :ip => user.creation_ip),
             :date => l(user.creation_time, :format => :friendly)
         %>
       <% else %>
-        <%= raw t 'user.index.summary_no_ip',
+        <%= raw t 'users.index.summary_no_ip',
             :name => link_to(h(user.display_name), user_path(user)),
             :date => l(user.creation_time, :format => :friendly)
         %>
similarity index 94%
rename from app/views/user/account.html.erb
rename to app/views/users/account.html.erb
index 352adf8873adc759bbca9105301ae29f71b6c292..7638b7a770ed9162be1c78b0c4e7cf5f7e30faf2 100644 (file)
@@ -6,7 +6,7 @@
   <h1><%= t '.my settings' %></h1>
   <ul class='secondary-actions clearfix'>
     <li><%= link_to t('.return to profile'), user_path(current_user) %></li>
-    <li><%= link_to t('user.show.oauth settings'), :controller => 'oauth_clients', :action => 'index' %></li>
+    <li><%= link_to t('users.show.oauth settings'), :controller => 'oauth_clients', :action => 'index' %></li>
   </ul>
 <% end %>
 
@@ -14,7 +14,7 @@
 <%= form_for current_user, :url => { :action => :account }, :method => :post, :html => { :multipart => true, :id => 'accountForm', :class => 'standard-form', :autocomplete => :off } do |f| %>
   <fieldset>
     <div class="form-row">
-      <label class="standard-label"><%= t 'user.new.display name' %></label>
+      <label class="standard-label"><%= t 'users.new.display name' %></label>
       <%= f.text_field :display_name %>
     </div>
   </fieldset>
 
   <fieldset>
     <div class="form-row">
-        <label class="standard-label"><%= t 'user.new.password' %></label>
+        <label class="standard-label"><%= t 'users.new.password' %></label>
       <%= f.password_field :pass_crypt, {:value => '', :autocomplete => :off} %>
     </div>
 
     <div class="form-row">
-      <label class="standard-label"><%= t 'user.new.confirm password' %></label>
+      <label class="standard-label"><%= t 'users.new.confirm password' %></label>
       <%= f.password_field :pass_crypt_confirmation, {:value => '', :autocomplete => :off} %>
     </div>
   </fieldset>
@@ -79,7 +79,7 @@
           <% end %>
         <% else %>
           <%= t '.contributor terms.not yet agreed' %>
-          <%= link_to t('.contributor terms.review link text'), :controller => 'user', :action => 'terms' %>
+          <%= link_to t('.contributor terms.review link text'), :controller => 'users', :action => 'terms' %>
         <% end %>
       </span>
     </div>
diff --git a/app/views/users/blocked.html.erb b/app/views/users/blocked.html.erb
new file mode 100644 (file)
index 0000000..d5be31e
--- /dev/null
@@ -0,0 +1,10 @@
+<% content_for :heading do %>
+  <h1><%= t 'users.new.title' %></h1>
+  <div class='header-illustration new-user-main'></div>
+  <div class='header-illustration new-user-arm'></div>
+<% end %>
+
+<div class="message">
+  <h1><%= t 'users.new.no_auto_account_create' %></h1>
+  <h2><%= raw t 'users.new.contact_webmaster', :webmaster => "mailto:#{SUPPORT_EMAIL}" %></h2>
+</div>
similarity index 94%
rename from app/views/user/login.html.erb
rename to app/views/users/login.html.erb
index 21705e358644634d6d3a30d2ac9c23821b5ef2ff..0944d7809868d5f0d1324df6dee01d3b96d5fd74 100644 (file)
@@ -28,7 +28,7 @@
           <%= password_field_tag "password", "", :tabindex => 2 %>
         </div>
         <span class="form-help deemphasize">
-          <%= link_to t('.lost password link'), :controller => 'user', :action => 'lost_password' %>
+          <%= link_to t('.lost password link'), :controller => 'users', :action => 'lost_password' %>
         </span>
       </fieldset>
 
@@ -69,7 +69,7 @@
         <div id='login_openid_url' class='form-row'>
           <label for='openid_url' class="standard-label"><%= raw t '.openid', :logo => openid_logo %></label>
           <%= text_field_tag("openid_url", "", { :tabindex => 3, :class => "openid_url" }) %>
-          <span class="minorNote">(<a href="<%= t 'user.account.openid.link' %>" target="_new"><%= t 'user.account.openid.link text' %></a>)</span>
+          <span class="minorNote">(<a href="<%= t 'users.account.openid.link' %>" target="_new"><%= t 'users.account.openid.link text' %></a>)</span>
         </div>
 
         <div class='form-row'>
similarity index 97%
rename from app/views/user/show.html.erb
rename to app/views/users/show.html.erb
index 30c72b14021c189d5adac3e32d423547b1d4db81..7aa3abd2782b958ee8761ca7edf25f7d1d44e052 100644 (file)
@@ -25,7 +25,7 @@
             <%= link_to t('.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => current_user.display_name %>
           </li>
           <li>
-            <%= link_to t('.my settings'), :controller => 'user', :action => 'account', :display_name => current_user.display_name %>
+            <%= link_to t('.my settings'), :controller => 'users', :action => 'account', :display_name => current_user.display_name %>
           </li>
 
           <% if current_user.blocks.exists? %>
   <% if current_user and @user.id == current_user.id %>
     <% if @user.home_lat.nil? or @user.home_lon.nil? %>
       <div id="map" class="content_map">
-        <p id="no_home_location"><%= raw(t '.if set location', :settings_link => (link_to t('.settings_link_text'), :controller => 'user', :action => 'account', :display_name => current_user.display_name)) %></p>
+        <p id="no_home_location"><%= raw(t '.if set location', :settings_link => (link_to t('.settings_link_text'), :controller => 'users', :action => 'account', :display_name => current_user.display_name)) %></p>
       </div>
     <% else %>
       <% content_for :head do %>
index 4300321439f12f76ac040bf8b09b2c9886f534c0..9e15487ae4877fb80d9d1e0177958dbaee7efead 100644 (file)
@@ -99,4 +99,7 @@ Rails.application.configure do
 
   # Enable autoloading of dependencies.
   config.enable_dependency_loading = true
+
+  # Use delayed job to queue jobs in production.
+  config.active_job.queue_adapter = :delayed_job
 end
index 482b1fb4c750b86bcea97c0e0e1a80548139fc45..38975deef664b54cb6332be608fb142fa7c3fe8a 100644 (file)
@@ -41,6 +41,12 @@ Rails.application.configure do
   # Print deprecation notices to the stderr.
   config.active_support.deprecation = :stderr
 
+  # Export translations automatically
+  config.middleware.use I18n::JS::Middleware
+
   # Raises error for missing translations
   config.action_view.raise_on_missing_translations = true
+
+  # Use the test adapter for ActiveJob during testing
+  config.active_job.queue_adapter = :test
 end
index 7fbb5c115002480f2f969303f7ca0b3fefbc9be5..4f951b30ce70b9dd8b49b0a2a083d31c47ebe405 100644 (file)
@@ -1,6 +1,6 @@
 require "r2"
 
-class R2ScssProcessor < Sprockets::ScssProcessor
+class R2ScssProcessor < SassC::Rails::ScssTemplate
   def self.call(input)
     output = super(input)
     data = R2.r2(output[:data])
index cc65997338ff664adc8de4f3de7cc48cf0c7f593..16eac7f5eceee69a32eb711de3a0015568383e73 100644 (file)
@@ -1273,7 +1273,7 @@ af:
       allow_write_api: wysig die kaart.
     not_found:
       sorry: Jammer, die %{type} blyk onverkrygbaar te wees.
-  user:
+  users:
     login:
       title: Meld aan
       heading: Meld aan
index edf188454677558b1bb928e1e72697326f9d4a88..f1da9028cba401bffbafaf74ae2f6b477d3fd88b 100644 (file)
@@ -793,6 +793,9 @@ aln:
             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_au_html: |-
+          <strong> Australi </ strong>: Përmban të dhëna të bazuara periferi
+             në Zyra Australiane e Statistikave të dhënave.
         contributors_ca_html: |-
           <strong> Kanada </ strong>: Përmban të dhëna nga
              GeoBase ®, GeoGratis (© Departamenti i Natyrore
@@ -1099,7 +1102,7 @@ aln:
       flash: Përditësuar më të dhënat e klientit me sukses
     destroy:
       flash: Shkatërruar kërkesë e klientit regjistrimit
-  user:
+  users:
     login:
       title: Kyçu
       heading: Kycu
index e25c8d8f081dcdfccd28c5af3d0f2a9ada735af8..c0149910652894b2361499196d868c5c9521c1d3 100644 (file)
@@ -42,40 +42,40 @@ ar:
     models:
       acl: لائحة التحكم بالوصول
       changeset: حزمة التغييرات
-      changeset_tag: سمة حزمة التغييرات
-      country: البلد/الدولة
+      changeset_tag: وسم مجموعة التغييرات
+      country: البلد
       diary_comment: تعليق يومية
       diary_entry: مدخلة يومية
       friend: صديق
       language: اللغة
       message: الرسالة
       node: عقدة
-      node_tag: سمة عقدة
+      node_tag: وسم عقدة
       notifier: المخطر
       old_node: عقدة قديمة
-      old_node_tag: سمة عقدة قديمة
+      old_node_tag: وسم عقدة قديمة
       old_relation: علاقة قديمة
       old_relation_member: عضو علاقة قديم
-      old_relation_tag: سمة علاقة قديمة
-      old_way: طريق قديم
+      old_relation_tag: وسم علاقة قديمة
+      old_way: طريقةط قديمة
       old_way_node: عقدة طريق قديمة
-      old_way_tag: سمة طريق قديمة
+      old_way_tag: وسم طريق قديم
       relation: علاقة
       relation_member: عضو علاقة
-      relation_tag: سمة علاقة
+      relation_tag: وسم علاقة
       session: جلسة
       trace: أثر
       tracepoint: نقطة أثر
       tracetag: سمة الأثر
       user: المستخدم
       user_preference: تفضيل المستخدم
-      user_token: نموذج المستخدم
-      way: طريق
+      user_token: رمز المستخدم
+      way: طريقة
       way_node: عقدة طريق
       way_tag: سمة طريق
     attributes:
       diary_comment:
-        body: نص الرسالة
+        body: الجسم
       diary_entry:
         user: المستخدم
         title: الموضوع
@@ -97,7 +97,7 @@ ar:
       message:
         sender: المرسل
         title: الموضوع
-        body: نص الرسالة
+        body: الجسم
         recipient: المستلم
       user:
         email: البريد الإلكتروني
@@ -112,11 +112,11 @@ ar:
       name: Potlatch 1
       description: Potlatch 1 (محرّر ضمن المتصفح)
     id:
-      name: Ù\85عرÙ\91Ù\81
-      description: iD (محرِّر عبر المتصفِّح)
+      name: معرف
+      description: معرف (محرر عبر المتصفِّح)
     potlatch2:
       name: Potlatch 2
-      description: Potlatch 2 (محرّر ضمن المتصفح)
+      description: Potlatch 2 (محرر ضمن المتصفح)
     remote:
       name: تحكم عن بعد
       description: تحكم عن بعد (JOSM أو Merkaartor)
@@ -130,12 +130,12 @@ ar:
     edited_by_html: تم التعديل قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
     closed_by_html: تم الإغلاق قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
     version: الإصدار
-    in_changeset: التغييرات
+    in_changeset: مجموعة التغييرات
     anonymous: مجهول
     no_comment: (لا تعليق)
     part_of: جزء من
-    download_xml: Ø­Ù\85Ù\91ل XML
-    view_history: السجل
+    download_xml: ØªÙ\86زÙ\8aل XML
+    view_history: Ø¹Ø±Ø¶ Ø§Ù\84سجÙ\84
     view_details: شاهد التفاصيل
     location: 'الموقع:'
     changeset:
@@ -175,14 +175,14 @@ ar:
       history_title: 'تاريخ الصلة: %{name}'
       members: الأعضاء
     relation_member:
-      entry_role: '%{type} %{name} كــ %{role}'
+      entry_role: '%{type} %{name} كــ%{role}'
       type:
         node: عقدة
         way: طريق
         relation: علاقة
     containing_relation:
       entry: العلاقة %{relation_name}
-      entry_role: العلاقة %{relation_name} (كــ %{relation_role})
+      entry_role: العلاقة %{relation_name} (كــ%{relation_role})
     not_found:
       sorry: 'عفوًا، تعذر العثور على %{type} #%{id}.'
       type:
@@ -215,11 +215,11 @@ ar:
     tag_details:
       tags: الوسوم
       wiki_link:
-        key: صفحة وصف الويكي لعلامة %{key}
-        tag: صفحة وصف الويكي لعلامة %{key}=%{value}
-      wikidata_link: ØµÙ\81حة %{page} Ø¹Ù\84Ù\89 Ù\88Ù\8aÙ\83Ù\8a Ø¯Ø§ØªØ§
-      wikipedia_link: الـ%{page} مقالة على ويكيبيديا
-      telephone_link: اتصل بـ %{phone_number}
+        key: صفحة وصف الويكي للوسم %{key}
+        tag: صفحة وصف الويكي للوسم %{key}=%{value}
+      wikidata_link: Ø§Ù\84عÙ\86صر %{page} Ø¹Ù\84Ù\89 Ù\88Ù\8aÙ\83Ù\8a Ø¨Ù\8aاÙ\86ات
+      wikipedia_link: مقالة %{page} على ويكيبيديا
+      telephone_link: اتصل بـ%{phone_number}
     note:
       title: 'ملاحظة: %{id}'
       new_note: ملاحظة جديدة
@@ -233,15 +233,16 @@ ar:
       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>
+      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>
-      report: أبلغ هذه الملاحظة
+      report: أبلغ عن هذه الملاحظة
     query:
-      title: إشارات الاستفهام
+      title: ميزات الاستفهام
       introduction: اضغط على الخريطة لمعرفة النقاط القريبة
       nearby: نقاط قريبة
       enclosing: نقاط مرافقة
@@ -255,8 +256,8 @@ ar:
       no_edits: (لا تعديلات)
       view_changeset_details: اعرض تفاصيل حزمة التغييرات
     changesets:
-      id: Ø±Ù\82Ù\85
-      saved_at: حُفظ في
+      id: Ø§Ù\84Ù\85عرÙ\81
+      saved_at: حُفِظ في
       user: المستخدم
       comment: التعليق
       area: منطقة
@@ -270,13 +271,13 @@ ar:
       empty_user: لم يُعثَر على أي حزم تغييرات لهذا المستخدم.
       no_more: لم يُعثَر على حزم تغييرات أخرى.
       no_more_area: لم يُعثَر على حزم تغييرات أخرى في هذه المنطقة.
-      no_more_user: ' يُعثَر على حزم تغييرات أخرى لهذا المستخدم.'
+      no_more_user: لم يُعثَر على حزم تغييرات أخرى لهذا المستخدم.
       load_more: حمِّل المزيد؟
     timeout:
-      sorry: Ø¹Ø°Ø±Ø§Ù\8bØ\8c Ù\84Ù\82د Ø¥Ø³ØªÙ\85رت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب.
+      sorry: Ø¹Ø°Ø±Ø§Ù\8bØ\8c Ù\84Ù\82د Ø§Ø³ØªØºØ±Ù\82ت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب.
     rss:
       title_all: مناقشة مجموعة تغيير خريطة الشارع المفتوحة
-      title_particular: 'مناقشة #%{changeset_id} مجموعة تغيير خريطة الشارع المفتوحة'
+      title_particular: مناقشة مجموعة تغيير خريطة الشارع المفتوحة %{changeset_id}
       comment: 'تعليق جديد على مجموعة التغيير #%{changeset_id} بواسطة %{author}'
       commented_at_html: تم التحديث قبل %{when}
       commented_at_by_html: تم التحديث قبل %{when} بواسطة %{user}
@@ -288,19 +289,19 @@ ar:
     index:
       title: يوميات المستخدمين
       title_friends: يوميات الأصدقاء
-      title_nearby: يوميات/مفكرات المستخدمين في المقبرة
+      title_nearby: يوميات المستخدمين القريبين
       user_title: يومية %{user}
       in_language_title: مدخلات اليومية باللغة %{language}
       new: مدخلة يومية جديدة
       new_title: تأليف إدخال جديد في مذكرات المستخدم الخاصة بي
-      no_entries: لا يوجد مدخلات يومية
-      recent_entries: Ø¥Ø¯Ø®Ø§Ù\84ات Ù\8aÙ\88Ù\85Ù\8aات Ø§Ù\84حدÙ\8aثة
+      no_entries: لا توجد مدخلات يومية
+      recent_entries: إدخالات يوميات حديثة
       older_entries: المدخلات الأقدم
       newer_entries: المدخلات الأحدث
     edit:
-      title: Ø¹Ø¯Ù\91Ù\84 Ù\85دخÙ\84Ø© Ù\8aÙ\88Ù\85Ù\8aØ©
+      title: عدل مدخلة يومية
       subject: 'الموضوع:'
-      body: 'نص الرسالة:'
+      body: 'النص:'
       language: 'اللغة:'
       location: 'الموقع:'
       latitude: 'خط العرض:'
@@ -316,26 +317,26 @@ ar:
       login: تسجيل الدخول
       save_button: احفظ
     no_such_entry:
-      title: Ù\85دخÙ\84Ø© Ù\8aÙ\88Ù\85Ù\8aØ© ØºÙ\8aر Ù\85Ù\88جÙ\88دة
-      heading: 'لا يوجد مدخلة بالمعرّف: %{id}'
-      body: عذرًا، لا يوجد مدخلة يومية أو تعليق بالمعرّف %{id}. يرجى تدقيق التهجئة،
-        أو ربما يكون الرابط الذي تم النقر عليه خاطئ.
+      title: Ù\84ا ØªÙ\88جد Ù\85Ø«Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\8aÙ\88Ù\85Ù\8aة
+      heading: 'لا توجد مدخلة بالمعرف: %{id}'
+      body: عذرًا، لا توجد مدخلة يومية أو تعليق بالمعرف %{id}؛ يُرجَى تدقيق التهجئة،
+        أو ربما يكون الرابط الذي نقرت عليه خاطئا.
     diary_entry:
-      posted_by: أُرسل بواسطة %{link_user} في %{created} باللغة %{language_link}
-      comment_link: Ø¹Ù\84Ù\91Ù\82 Ø¹Ù\84Ù\89 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85دخÙ\84Ø©
-      reply_link: Ø±Ø¯ Ø¨رسالة
+      posted_by: نُشِر بواسطة %{link_user} في %{created} باللغة %{language_link}
+      comment_link: علق على هذه المدخلة
+      reply_link: Ø±Ø¯ Ø¹Ù\84Ù\89 Ù\87Ø°Ù\87 Ø§Ù\84رسالة
       comment_count:
         zero: لا تعليق
         one: '%{count} تعليق'
-        other: '%{count} تعليق'
-      edit_link: Ø¹Ø¯Ù\91Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85دخÙ\84Ø©
+        other: '%{count} تعليقات'
+      edit_link: عدل هذه المدخلة
       hide_link: اخفِ هذه المدخلة
-      confirm: Ø£Ù\83Ù\91د
-      report: أببلغ عن هذه المذكرة
+      confirm: ØªØ£Ù\83Ù\8aد
+      report: أبلغ عن هذه المدخلة
     diary_comment:
-      comment_from: تعليق من %{link_user}  في %{comment_created_at}
+      comment_from: تعليق من %{link_user} في %{comment_created_at}
       hide_link: اخفِ هذا التعليق
-      confirm: Ø£Ù\83Ù\91د
+      confirm: ØªØ£Ù\83Ù\8aد
       report: أبلغ عن هذا التعليق
     location:
       location: 'الموقع:'
@@ -343,18 +344,16 @@ ar:
       edit: تعديل
     feed:
       user:
-        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم %{user}
-        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة بواسطة المستخدم
-          %{user}
+        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم ل%{user}
+        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة من %{user}
       language:
-        title: مدخلات يومية خريطة الشارع المفتوحة باللغة %{language_name}
-        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة باللغة
-          %{language_name}
+        title: مدخلات يومية خريطة الشارع المفتوحة ب%{language_name}
+        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة ب%{language_name}
       all:
         title: مدخلات اليومية في خريطة الشارع المفتوحة
         description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة
     comments:
-      has_commented_on: '%{display_name} Ø¹Ù\84Ù\91Ù\82 Ø¹Ù\84Ù\89 Ù\85دخÙ\84ات Ø§Ù\84Ù\8aÙ\88Ù\85Ù\8aØ© Ø§Ù\84تاÙ\84Ù\8aØ©'
+      has_commented_on: '%{display_name} علق على مدخلات اليومية التالية'
       post: إرسال
       when: متى
       comment: التعليق
@@ -377,7 +376,7 @@ ar:
         aerialway:
           cable_car: عربة قطار هوائي
           chair_lift: كرسي تلفريك
-          drag_lift: اسحبها لليسار
+          drag_lift: اسحب لليسار
           gondola: تلفريك
           platter: مصعد تزلج
           pylon: نقطة تعليق
@@ -415,7 +414,7 @@ ar:
           car_sharing: مشاركة سيارات
           car_wash: غسيل سيارات
           casino: نادي قمار
-          charging_station: Ù\85حطة ØªØ¹Ø¨Ø¦Ø©
+          charging_station: Ù\85حطة Ø´Ø­Ù\86
           childcare: رعاية الأطفال
           cinema: سينما
           clinic: عيادة
@@ -447,7 +446,7 @@ ar:
           monastery: دير
           motorcycle_parking: مرآب دراجات نارية
           nightclub: نادي ليلي
-          nursing_home: دار رعاية مسنين/معاقين
+          nursing_home: دار رعاية
           office: مكتب
           parking: موقف سيارات
           parking_entrance: مدخل مرآب
@@ -467,9 +466,9 @@ ar:
           sauna: حمّام بخاري حار
           school: مدرسة
           shelter: ملجأ
-          shop: متجر/دكان/حانوت
+          shop: متجر
           shower: غسيل بالدش
-          social_centre: Ù\85رÙ\83ز Ø¥جتماعي
+          social_centre: Ù\85رÙ\83ز Ø§جتماعي
           social_club: نادي اجتماعي
           social_facility: مرفق اجتماعي
           studio: ستوديو
@@ -482,11 +481,11 @@ ar:
           university: جامعة
           vending_machine: آلة بيع
           veterinary: جراحة بيطرية
-          village_hall: Ù\85بÙ\86Ù\89/دار Ø§Ù\84قرية
+          village_hall: Ù\82اعة قرية
           waste_basket: سلة نفايات
           waste_disposal: التخلص من النفايات
           water_point: موقع مياه
-          youth_centre: مركز نشاطات للشباب
+          youth_centre: مركز شباب
         boundary:
           administrative: حدود إدارية
           census: حدود تعدادية
@@ -504,7 +503,7 @@ ar:
         craft:
           brewery: مصنع الجعة
           carpenter: نجار
-          electrician: اختصاصي كهرباء
+          electrician: كهربائي
           gardener: بستاني
           painter: رسام
           photographer: مصور
@@ -532,7 +531,7 @@ ar:
           emergency_access_point: نقطة دخول طوارئ
           footway: ممر للمشاة
           ford: مخاضة
-          give_way: Ø§Ø´Ø§Ø±Ø© ØªÙ\85Ù\87Ù\84
+          give_way: Ø¥Ø´Ø§Ø±Ø© Ø¥Ù\81ساح Ø§Ù\84طرÙ\8aÙ\82
           living_street: شارع سكني
           milestone: معلم
           motorway: طريق سريع
@@ -544,10 +543,10 @@ ar:
           platform: منصة
           primary: طريق أولي
           primary_link: طريق أولي
-          proposed: طريق تحت الإنشاء
+          proposed: طريق مقترح
           raceway: حلبة سباق
           residential: طريق سكني
-          rest_area: Ù\85Ù\86Ø·Ù\82Ø© Ø¥ستراحة
+          rest_area: Ù\85Ù\86Ø·Ù\82Ø© Ø§ستراحة
           road: طريق
           secondary: طريق ثانوي
           secondary_link: طريق ثانوي
@@ -565,12 +564,12 @@ ar:
           trunk: طريق رئيسي
           trunk_link: طريق رئيسي
           turning_loop: جولة
-          unclassified: Ø·Ø±Ù\8aÙ\82 ØºÙ\8aر Ù\85صÙ\86Ù\91Ù\81
+          unclassified: طريق غير مصنف
           "yes": طريق
         historic:
           archaeological_site: موقع أثري
           battlefield: ساحة معركة
-          boundary_stone: Ø­Ø¬Ø±/صخرة ØªØ¹Ù\84Ù\8aÙ\85 حدود
+          boundary_stone: ØµØ®Ø±Ø© حدود
           building: مبنى تاريخي
           bunker: برج دفاعي
           castle: قلعة
@@ -584,14 +583,14 @@ ar:
           manor: عزبة
           memorial: نصب تذكاري
           mine: منجم
-          mine_shaft: منجم
+          mine_shaft: Ù\81تحة Ù\85Ù\86جÙ\85
           monument: أثر
           roman_road: طريق روماني
           ruins: أطلال
           stone: حجر
           tomb: قبر
           tower: برج
-          wayside_cross: ØµÙ\84Ù\8aب ØªØ°Ù\83ارÙ\8a
+          wayside_cross: ØµÙ\84Ù\8aب Ø¬Ø§Ù\86ب Ø·Ø±Ù\8aÙ\82
           wayside_shrine: مزار جانب طريق
           wreck: حطام
           "yes": موقع تاريخي
@@ -624,10 +623,10 @@ ar:
           reservoir: خزان
           reservoir_watershed: خزان مستجمعات المياه
           residential: منطقة سكنية
-          retail: بيع بالمفرق
+          retail: بيع بالتجزئة
           road: منطقة الطريق
           village_green: أرض خضراء
-          vineyard: كرم عنب
+          vineyard: حقل عنب
           "yes": استخدام الأرض
         leisure:
           beach_resort: شاطئ منتجع
@@ -653,13 +652,13 @@ ar:
           sauna: حمّام بخاري حار
           slipway: مزلقة
           sports_centre: مركز رياضي
-          stadium: مدرج ألعاب رياضية
-          swimming_pool: بركة سباحة
+          stadium: ستاد
+          swimming_pool: مسبح
           track: مضمار سباق
           water_park: منتزه ألعاب مائية
           "yes": وقت الفراغ
         man_made:
-          adit: مدخل الى منجم
+          adit: مدخل منجم
           beacon: منارة
           beehive: خلية نحل
           breakwater: مكسر أمواج
@@ -669,15 +668,15 @@ ar:
           crane: رافعة
           dolphin: مرسى
           dyke: حاجز
-          embankment: Ø³Ø§Ù\8aÙ\84Ù\87
+          embankment: Ø³Ø¯
           flagpole: سارية علم
           gasometer: مقياس غاز
           groyne: مصد أمواج
           kiln: تنور
           lighthouse: منارة
-          mast: Ø­Ø§Ù\81ظة Ø§Ù\86تÙ\8aÙ\86ا
-          mine: Ù\84غم
-          mineshaft: Ù\85Ù\86جÙ\85 Ø£Ù\84غام
+          mast: Ø³Ø§Ø±Ù\8aØ©
+          mine: Ù\85Ù\86جم
+          mineshaft: Ù\81تحة Ù\85Ù\86جم
           monitoring_station: محطة مراقبة
           petroleum_well: بئر بترول
           pier: رصيف بحري
@@ -704,7 +703,7 @@ ar:
         natural:
           bay: خليج
           beach: شاطئ
-          cape: Ø±Ø£Ø³ (أرض Ø¯Ø§Ø®Ù\84Ø© Ù\81Ù\8a Ø§Ù\84بحر(
+          cape: Ø®Ù\84Ù\8aج
           cave_entrance: مدخل كهف
           cliff: جرف
           crater: فوهة بركان
@@ -713,7 +712,7 @@ ar:
           fjord: مضيق بحري
           forest: غابة
           geyser: نافورة ماء حار
-          glacier: نهر/بحر جليدي
+          glacier: نهر جليدي
           grassland: أرض عشبية
           heath: أرض بور
           hill: تلة
@@ -724,7 +723,7 @@ ar:
           mud: وحل
           peak: ذروة
           point: نقطة
-          reef: Ø³Ù\84سÙ\84Ø© ØµØ®Ù\88ر Ù\82رب Ø³Ø·Ø­ Ø§Ù\84Ù\85اء
+          reef: Ø´Ø¹Ø§Ø¨
           ridge: أرض مرتفعة
           rock: صخرة
           saddle: سرج
@@ -754,7 +753,7 @@ ar:
           it: مكتب تقنية معلومات
           lawyer: محامي
           ngo: مكتب منظمة غير حكومية
-          telecommunication: Ù\85Ù\83تب Ø´Ø±Ù\83Ø© Ø¥تصالات
+          telecommunication: Ù\85Ù\83تب Ø§تصالات
           travel_agent: وكيل سفريات
           "yes": مكتب
         place:
@@ -777,7 +776,7 @@ ar:
           quarter: حارة
           region: المنطقة
           sea: بحر
-          square: مربع
+          square: ميدان
           state: ولاية
           subdivision: التقسيم الفرعي
           suburb: ضاحية
@@ -794,8 +793,8 @@ ar:
           junction: تقاطع سكك حديدية
           level_crossing: تقاطع سكك حديدية
           light_rail: قطار خفيف
-          miniature: مصغرة السكك الحديدية
-          monorail: قطار ذات سكة حديد واحدة
+          miniature: سكة حديدية مصغرة
+          monorail: قطار ذو سكة حديد واحدة
           narrow_gauge: سكة حديد ضيقة
           platform: رصيف محطة قطار
           preserved: سكة حديدية تراثية
@@ -816,7 +815,7 @@ ar:
           beauty: صالون تجميل
           beverages: متجر مشروبات
           bicycle: متجر دراجات
-          bookmaker: Ù\85Ø­Ù\84 Ù\82Ù\85ار
+          bookmaker: Ù\86اشر
           books: متجر كتب
           boutique: دكان
           butcher: جزار
@@ -834,7 +833,7 @@ ar:
           cosmetics: بائع مستحضرات تجميل
           deli: دكان أطعمة شهية
           department_store: متجر متعدد الأقسام
-          discount: Ù\85Ø­Ù\84 Ø±Ø®ØµØ©
+          discount: Ù\85Ø­Ù\84 Ø¹Ù\86اصر Ø®ØµÙ\85
           doityourself: براعة منزلية
           dry_cleaning: تنظيف جاف
           electronics: متجر إلكترونيات
@@ -852,7 +851,7 @@ ar:
           gift: متجر هدايا
           greengrocer: محل خضروات
           grocery: بقالة
-          hairdresser: مزين/مصفف شعر
+          hairdresser: حلاق
           hardware: متجر عتاد
           hifi: متجر هاي فاي
           houseware: متجر أدوات منزلية
@@ -892,7 +891,7 @@ ar:
           vacant: متجر شاغر
           variety_store: متجر شامل
           video: متجر فيديو
-          wine: Ù\85Ø­Ù\84 Ù\84بÙ\8aع Ø§Ù\84نبيذ
+          wine: Ù\85تجر نبيذ
           "yes": متجر
         tourism:
           alpine_hut: كوخ جبلي
@@ -911,7 +910,7 @@ ar:
           information: معلومات
           motel: نُزل
           museum: متحف
-          picnic_site: Ù\85Ù\88Ù\82ع Ø¨Ù\8aÙ\83 Ù\86Ù\8aÙ\83
+          picnic_site: Ù\85Ù\88Ù\82ع ØªÙ\86زÙ\87
           theme_park: حديقة ملاهي
           viewpoint: موقع كاشف
           zoo: حديقة حيوانات
@@ -920,7 +919,7 @@ ar:
           culvert: مجرى مائي
           "yes": نفق
         waterway:
-          artificial: Ù\85جرÙ\89 Ù\85اء Ø¥صطناعي
+          artificial: Ù\85جرÙ\89 Ù\85اء Ø§صطناعي
           boatyard: حوض سفن
           canal: قناة
           dam: سدّ
@@ -936,7 +935,7 @@ ar:
           stream: جدول
           wadi: وادي
           waterfall: شلال
-          weir: هدار (سدّ منخفض)
+          weir: سياج
           "yes": معبر مائي
       admin_levels:
         level2: حدود قطرية
@@ -948,8 +947,8 @@ ar:
         level10: حدود الضاحية
     description:
       title:
-        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
-          Nominatim</a>
+        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">Nominatim
+          خريطة الشارع المفتوحة</a>
         geonames: موقع من <a href="http://www.geonames.org/">GeoNames</a>
       types:
         cities: مدن
@@ -969,16 +968,17 @@ ar:
       search: البحث
       search_guidance: 'بحث عن مشاكل:'
       user_not_found: المستخدم غير موجود
-      issues_not_found: لم يتم العثور على مشاكل
+      issues_not_found: لم يتم العثور على مشاكل كهذه
       status: الحالة
       reports: بلاغات
       last_updated: آخر تحديث
-      last_updated_time_html: <abbr title='%{title}'>%{time} ago</abbr>
-      last_updated_time_user_html: <abbr title='%{title}'>%{time} ago</abbr> by %{user}
+      last_updated_time_html: منذ <abbr title='%{title}'>%{time}</abbr>
+      last_updated_time_user_html: منذ <abbr title='%{title}'>%{time} </abbr> بواسطة
+        %{user}
       link_to_reports: عرض البلاغات
       reports_count:
-        one: 1 Report
-        other: '%{count} Reports'
+        one: 1 بلاغ
+        other: '%{count} بلاغات'
       reported_item: شيء تم الابلاغ عنه
       states:
         ignored: تم تجاهله
@@ -987,19 +987,19 @@ ar:
     update:
       new_report: لقد تم تسجيل بلاغك بنجاح
       successful_update: لقد تم تحديث بلاغك بنجاح
-      provide_details: يرجى تقديم التفاصيل المطلوبة
+      provide_details: يُرجَى تقديم التفاصيل المطلوبة
     show:
       title: '%{status} المشكلة #%{issue_id}'
       reports:
-        zero: No reports
-        one: 1 report
-        other: '%{count} reports'
-      report_created_at: Ø§ول بلاغ تم في %{datetime}
+        zero: لا توجد بلاغات
+        one: 1 بلاغ
+        other: '%{count} بلاغات'
+      report_created_at: Ø£ول بلاغ تم في %{datetime}
       last_resolved_at: آخر حل تم في %{datetime}
       last_updated_at: آخر تحديث تم في %{datetime} بواسطة %{displayname}
       resolve: حل
       ignore: تجاهل
-      reopen: Ø§عادة فتح
+      reopen: Ø¥عادة فتح
       reports_of_this_issue: بلاغات هذه المشكلة
       read_reports: اقرأ البلاغات
       new_reports: بلاغات جديدة
@@ -1007,39 +1007,39 @@ ar:
       no_other_issues: لا مشاكل أخرى ضد هذا المستخدم.
       comments_on_this_issue: التعليقات على هذه المشكلة
     resolve:
-      resolved: تم تعيين حالة المشكلة إلى 'تم حله'
+      resolved: تم تعيين حالة المشكلة إلى 'محلولة'
     ignore:
-      ignored: تم تعيين حالة المشكلة إلى 'تم تجاهله'
+      ignored: تم تعيين حالة المشكلة إلى 'تم تجاهلها'
     reopen:
-      reopened: ØªÙ\85 ØªØ¹Ù\8aÙ\8aÙ\86 Ø­Ø§Ù\84Ø© Ø§Ù\84Ù\85Ø´Ù\83Ù\84Ø© Ø¥Ù\84Ù\89 'Ù\81تح'
+      reopened: ØªÙ\85 ØªØ¹Ù\8aÙ\8aÙ\86 Ø­Ø§Ù\84Ø© Ø§Ù\84Ù\85Ø´Ù\83Ù\84Ø© Ø¥Ù\84Ù\89 'Ù\85Ù\81تÙ\88حة'
     comments:
       created_at: في %{datetime}
-      reassign_param: إعادة تعيين المشكلة ؟
+      reassign_param: إعادة تعيين المشكلة؟
     reports:
       updated_at: في %{datetime}
-      reported_by_html: تم الابلاغ عنه ك %{category} بواسطة %{user}
+      reported_by_html: تم الابلاغ عنه ك%{category} بواسطة %{user}
     helper:
       reportable_title:
-        diary_comment: '%{entry_title}, تعليق #%{comment_id}'
+        diary_comment: '%{entry_title}، تعليق #%{comment_id}'
         note: 'ملاحظة #%{note_id}'
   issue_comments:
     create:
-      comment_created: ØªÙ\85 Ø§نشاء تعليقك بنجاح
+      comment_created: ØªÙ\85 Ø¥نشاء تعليقك بنجاح
   reports:
     new:
       title_html: بلاغ %{link}
-      missing_params: Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø§نشاء بلاغ جديد
-      details: يرجى تقديم بعض التفاصيل حول المشكلة (مطلوب).
-      select: 'حدد سبب بلاغك:'
+      missing_params: Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¥نشاء بلاغ جديد
+      details: يُرجَى تقديم بعض التفاصيل حول المشكلة (مطلوب).
+      select: 'حدد سببا لبلاغك:'
       disclaimer:
-        intro: 'قبل إرسال تقريرك إلى مشرف الموقع ، يرجى التأكد مما يلي:'
+        intro: 'قبل إرسال تقريرك إلى مشرف الموقع، يُرجَى التأكد مما يلي:'
         not_just_mistake: أنك متأكد من أن المشكلة ليست مجرد خطأ
         unable_to_fix: أنت غير قادر على إصلاح المشكلة بنفسك أو بمساعدة زملائك أعضاء
           المجتمع
         resolve_with_user: لقد حاولت بالفعل حل المشكلة مع المستخدم المعني
       categories:
         diary_entry:
-          spam_label: هذه المذكرة تحتوي على بريد مزعج
+          spam_label: هذه المذكرة هي/تحتوي على بريد مزعج
           offensive_label: هذه المذكرة مسيئة
           threat_label: هذا المذكرة تحتوي على تهديد
           other_label: أخرى
@@ -1049,9 +1049,9 @@ ar:
           threat_label: مذكرة التعليق هذه تحتوي على تهديد
           other_label: أخرى
         user:
-          spam_label: ' ملف المستخدم هذا يحتوي على بريد مزعج'
-          offensive_label: ' ملف المستخدم هذا مسيء'
-          threat_label: ' ملف المستخدم هذا يحتوي على تهديد'
+          spam_label: ملف المستخدم هذا يكون/يحتوي على بريد مزعج
+          offensive_label: ملف المستخدم هذا مسيء
+          threat_label: ملف المستخدم هذا يحتوي على تهديد
           vandal_label: هذا المستخدم مخرب
           other_label: أخرى
         note:
@@ -1061,17 +1061,17 @@ ar:
           other_label: أخرى
     create:
       successful_report: لقد تم تسجيل بلاغك بنجاح
-      provide_details: يرجى تقديم التفاصيل المطلوبة
+      provide_details: يُرجَى تقديم التفاصيل المطلوبة
   layouts:
     logo:
       alt_text: شعار خريطة الشارع المفتوحة
     home: اذهب إلى الصفحة الرئيسية
     logout: سجل خروج
     log_in: تسجيل الدخول
-    log_in_tooltip: Ø³Ø¬Ù\91Ù\84 Ø§Ù\84دخÙ\88Ù\84 Ù\85ع حساب موجود
+    log_in_tooltip: ØªØ³Ø¬Ù\8aÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84حساب موجود
     sign_up: أنشئ حسابًا
     start_mapping: ابدأ التخطيط
-    sign_up_tooltip: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ù\8bا Ù\83Ù\8a ØªØ³ØªØ·Ù\8aع Ø§Ù\84Ù\85ساÙ\87Ù\85Ø©
+    sign_up_tooltip: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ù\8bا Ù\84Ù\84تعدÙ\8aÙ\84
     edit: تعديل
     history: تاريخ
     export: صدِّر
@@ -1082,15 +1082,15 @@ ar:
     gps_traces_tooltip: عالج آثار جي بي إس
     user_diaries: يوميات المستخدمين
     user_diaries_tooltip: اعرض يوميات المستخدمين
-    edit_with: Ø­Ø±Ø± Ø¨Ø¥ستعمال %{editor}
+    edit_with: Ø­Ø±Ø± Ø¨Ø§ستعمال %{editor}
     tag_line: ويكي خريطة العالم الحرة
-    intro_header: مرحبا بكم في !OpenStreetMap
-    intro_text: Ø¥Ù\86 OpenStreetMap Ù\87Ù\8a Ø®Ø±Ù\8aطة Ø§Ù\84عاÙ\84Ù\85, Ø£Ù\86شئت Ø¨Ù\88اسطة Ø£Ø´Ø®Ø§Øµ Ù\85Ø«Ù\84Ù\83 Ù\88حرة Ø§Ù\84استخداÙ\85
-      برخصة مفتوحة.
+    intro_header: مرحبا بكم في خريطة الشارع المفتوحة!
+    intro_text: Ø®Ø±Ù\8aطة Ø§Ù\84شارع Ø§Ù\84Ù\85Ù\81تÙ\88حة Ù\87Ù\8a Ø®Ø±Ù\8aطة Ø§Ù\84عاÙ\84Ù\85Ø\8c Ø£Ù\8fÙ\86Ø´Ù\90ئت Ø¨Ù\88اسطة Ø£Ø´Ø®Ø§Øµ Ù\85Ø«Ù\84Ù\83 Ù\88حرة
+      Ø§Ù\84استخداÙ\85 Ø¨Ø±Ø®ØµØ© Ù\85Ù\81تÙ\88حة.
     intro_2_create_account: أنشئ حساب مستخدم
-    partners_html: الضيافة مدعومة من %{ucl}, %{ic} و %{bytemark}, و %{partners} آخرون.
+    hosting_partners_html: يتم دعم الاستضافة بواسطة %{ucl} و%{bytemark} و%{partners}
+      آخرين.
     partners_ucl: UCL
-    partners_ic: كلية امبراطورية لندن
     partners_bytemark: استضافة Bytemark
     partners_partners: الشركاء
     osm_offline: حاليًا قاعدة بيانات خريطة الشارع المفتوحة مغلقة بينما يتم الانتهاء
@@ -1115,8 +1115,7 @@ ar:
     diary_comment_notification:
       subject: '[خريطة الشارع المفتوحة] %{user} علق على مدخلتك في اليومية'
       hi: مرحبًا %{to_user}،
-      header: '%{from_user} علق على مدخلتك في اليومية في خريطة الشارع المفتوحة بالعنوان
-        %{subject}:'
+      header: '%{from_user} علق على مدخلة يومية خريطة الشارع المفتوحة بالعنوان %{subject}:'
       footer: يمكنك أيضًا قراءة التعليق على %{readurl} ويمكنك التعليق على %{commenturl}
         أو الرد على %{replyurl}
     message_notification:
@@ -1134,22 +1133,22 @@ ar:
       greeting: تحياتي،
       your_gpx_file: يبدو أنه ملف جي بي إكس الخاص بك
       with_description: مع الوصف
-      and_the_tags: 'والسمات التالية:'
-      and_no_tags: ولا يوجد سمات.
+      and_the_tags: 'والوسوم التالية:'
+      and_no_tags: ولا توجد وسوم.
       failure:
         subject: '[خريطة الشارع المفتوحة] فشل استيراد جي بي إكس'
-        failed_to_import: 'فشل الاستيراد. الخطأ هو:'
-        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبها
-        more_info_2: 'Ù\88Ù\87Ù\85 Ù\85Ù\88جÙ\88دÙ\8aÙ\86 على:'
+        failed_to_import: 'فشل الاستيراد، الخطأ هو:'
+        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبه
+        more_info_2: 'Ù\88Ù\87Ù\8a Ù\85Ù\88جÙ\88دة على:'
       success:
         subject: '[خريطة الشارع المفتوحة] نجاح استيراد جي بي إكس'
         loaded_successfully: تم تحميل بنجاح %{trace_points} نقطة من أصل %{possible_points}
           نقطة ممكنة.
     signup_confirm:
-      subject: '[خرائط اوبن ستريت] مرحباً بك في خرائط اوبن ستريت'
+      subject: '[خريطة الشارع المفتوحة] مرحبا بك في خريطة الشارع المفتوحة'
       greeting: مرحبا هناك!
       created: شخص ما (نأمل أن تكون أنت) أنشأ حسابا في %{site_url}.
-      confirm: 'Ù\82بÙ\84 Ø£Ù\86 ØªÙ\81عÙ\84 Ø£Ù\8a Ø´Ù\8aØ¡ Ø¢Ø®Ø±Ø\8c Ù\88Ù\86Ø­Ù\86 Ø¨Ø­Ø§Ø¬Ø© Ù\84Ù\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 Ù\87ذا Ø§Ù\84Ø·Ù\84ب Ø¬Ø§Ø¡ Ù\85Ù\86Ù\83Ø\8c
+      confirm: 'Ù\82بÙ\84 Ø£Ù\86 ØªÙ\81عÙ\84 Ø£Ù\8a Ø´Ù\8aØ¡ Ø¢Ø®Ø±Ø\8c Ù\86Ø­Ù\86 Ø¨Ø­Ø§Ø¬Ø© Ù\84Ù\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 Ù\87ذا Ø§Ù\84Ø·Ù\84ب Ø¬Ø§Ø¡ Ù\85Ù\86Ù\83Ø\9b
         لذلك إذا كان كذلك، الرجاء الضغط على الرابط أدناه لتأكيد حسابك:'
       welcome: بعد تأكيد حسابك، سوف نقدم لك بعض المعلومات الإضافية للبدء.
     email_confirm:
@@ -1158,68 +1157,69 @@ ar:
       greeting: تحياتي،
       hopefully_you: شخص ما (نأمل أن تكون أنت) يرغب في تغيير عنوان بريده الإلكتروني
         في %{server_url} إلى %{new_address}.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لتأكيد التغيير.
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لتأكيد التغيير.
     email_confirm_html:
       greeting: مرحبًا،
       hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على %{server_url}
-        to %{new_address}.
-      click_the_link: إذا كان هذا هو أنت، رجاءًا انقر فوق الرابط أدناه لتأكيد التغيير.
+        إلى %{new_address}.
+      click_the_link: إذا كان هذا أنت، رجاءً انقر فوق الرابط أدناه لتأكيد التغيير.
     lost_password:
       subject: '[خريطة الشارع المفتوحة] طلب إعادة تعيين كلمة المرور'
     lost_password_plain:
       greeting: تحياتي،
-      hopefully_you: Ø´Ø®Øµ Ù\85ا (ربÙ\85ا Ø£Ù\86ت) Ø·Ù\84ب Ø¥Ø¹Ø§Ø¯Ø© ØªØ¹Ù\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© Ø§Ù\84Ù\85رÙ\88ر Ù\84حساب openstreetmap.org
-        على عنوان البريد الإلكتروني هذا.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+      hopefully_you: Ø·Ø§Ù\84ب Ø´Ø®Øµ Ù\85ا (ربÙ\85ا Ø£Ù\86ت) Ø¨Ø¥Ø¹Ø§Ø¯Ø© ØªØ¹Ù\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© Ø§Ù\84Ù\85رÙ\88ر Ø¹Ù\84Ù\89 حساب openstreetmap.org
+        لعنوان البريد الإلكتروني هذا.
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
         كلمة المرور.
     lost_password_html:
       greeting: تحياتي،
-      hopefully_you: Ø´Ø®Øµ Ù\85ا (ربÙ\85ا Ø£Ù\86ت) Ø·Ù\84ب Ø¥Ø¹Ø§Ø¯Ø© ØªØ¹Ù\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© Ø§Ù\84Ù\85رÙ\88ر Ù\84حساب openstreetmap.org  Ø¹Ù\84Ù\89
-        عنوان البريد الإلكتروني هذا.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+      hopefully_you: Ø·Ø§Ù\84ب Ø´Ø®Øµ Ù\85ا (ربÙ\85ا Ø£Ù\86ت) Ø¨Ø¥Ø¹Ø§Ø¯Ø© ØªØ¹Ù\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© Ø§Ù\84Ù\85رÙ\88ر Ø¹Ù\84Ù\89 Ø­Ø³Ø§Ø¨ openstreetmap.org
+        لعنوان البريد الإلكتروني هذا.
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
         كلمة المرور.
     note_comment_notification:
       anonymous: مستخدم مجهول
-      greeting: أهلا,
+      greeting: مرحبا،
       commented:
-        subject_own: '[OpenStreetMap] علق %{commenter} على واحدة من ملاحظاتك'
+        subject_own: '[OpenStreetMap] قدعلق %{commenter} على إحدى ملاحظاتك'
         subject_other: '[OpenStreetMap] علق %{commenter} على ملاحظة تههتم بها'
-        your_note: علق %{commenter} على واحدة من ملاحظات خريطتك بالقرب من %{place}.
-        commented_note: علق %{commenter} على ملاحظة الخريطة التي علقت عليها. كانت
+        your_note: علق %{commenter} على إحدى ملاحظات خريطتك بالقرب من %{place}.
+        commented_note: علق %{commenter} على ملاحظة الخريطة التي علقت عليها، كانت
           الملاحظة بالقرب من %{place}.
       closed:
         subject_own: '[OpenStreetMap] حل %{commenter} إحدى ملاحظاتك'
         subject_other: '[OpenStreetMap] حل %{commenter} ملاحظة تهتم بها'
-        your_note: Ø­Ù\84 %{commenter} Ø¥Ø­Ø¯Ù\89 Ù\85Ù\84احظات Ø§Ù\84خرÙ\8aطة بالقرب من %{place}.
-        commented_note: حل %{commenter} ملاحظة الخريطة التي علقت عليها.كانت الملاحظة
-          بالقرب من %{place}.
+        your_note: Ø­Ù\84 %{commenter} Ø¥Ø­Ø¯Ù\89 Ù\85Ù\84احظات Ø®Ø±Ù\8aطتÙ\83 بالقرب من %{place}.
+        commented_note: حل %{commenter} ملاحظة الخريطة التي علقت عليها، الملاحظة بالقرب
+          من %{place}.
       reopened:
-        subject_own: نشط [OpenStreetMap] %{commenter} إحدى ملاحظاتك
-        subject_other: نشط [OpenStreetMap] %{commenter} ملاحظة كنت مهتما بها
-        your_note: نشط %{commenter} إحدى ملاحظات الخريطة بالقرب من %{place}.
-        commented_note: نشط %{commenter} ملاحظة الخريطة التي علقت عليها.كانت الملاحظة
-          بالقرب من %{place}.
+        subject_own: لقد أعاد [OpenStreetMap] %{commenter} تنشيط إحدى ملاحظاتك
+        subject_other: لقد أعاد [OpenStreetMap] %{commenter} تنشيط ملاحظة كنت مهتما
+          بها
+        your_note: لقد أعاد %{commenter} تنشيط إحدى ملاحظات الخريطة بالقرب من %{place}.
+        commented_note: لقد أعاد %{commenter} تنشيط ملاحظة الخريطة التي علقت عليها،
+          الملاحظة بالقرب من %{place}.
       details: يمكن العثور على مزيد من التفاصيل حول هذه الملاحظة في %{url}.
     changeset_comment_notification:
       hi: أهلا %{to_user}،
-      greeting: مرحبا ،
+      greeting: مرحبا،
       commented:
-        subject_own: '[OpenStreetMap] علق %{commenter} على على إحدى تغييراتك'
-        subject_other: '[OpenStreetMap] علق %{commenter} على ملاحظة تهتم بها'
-        your_changeset: '%{commenter} Ø¹Ù\84Ù\82 Ø¹Ù\84Ù\89 Ø£Ø­Ø¯ Ø§Ù\84تغÙ\8aÙ\8aرات في %{time}'
-        commented_changeset: '%{commenter} ترك تعليقاً على الخريطة التي تشاهدها بواسطة
-          %{changeset_author} في %{time}'
+        subject_own: '[OpenStreetMap] علق %{commenter} على على إحدى مجموعات تغييراتك'
+        subject_other: '[OpenStreetMap] علق %{commenter} على مجموعة تغييرات تهتم بها'
+        your_changeset: '%{commenter} Ø¹Ù\84Ù\82 Ø¹Ù\84Ù\89 Ø¥Ø­Ø¯Ù\89 Ù\85جÙ\85Ù\88عات ØªØºÙ\8aÙ\8aراتÙ\83 في %{time}'
+        commented_changeset: '%{commenter} ترك تعليقاً على مجموعة تغييرات الخريطة
+          التي تشاهدها بواسطة %{changeset_author} في %{time}'
         partial_changeset_with_comment: مع تعليق '%{changeset_comment}'
         partial_changeset_without_comment: بدون تعليق
-      details: Ù\8aÙ\85Ù\83Ù\86 Ø§Ù\84عثÙ\88ر Ø¹Ù\84Ù\89 Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84تÙ\81اصÙ\8aÙ\84 Ø­Ù\88Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\84احظة في %{url}.
-      unsubscribe: لإلغاء الاشتراك من التحديثات لهذه التغييرات ، تفضل بزيارة %{url}
-        وانقر على "إلغاء الاشتراك".
+      details: Ù\8aÙ\85Ù\83Ù\86 Ø§Ù\84عثÙ\88ر Ø¹Ù\84Ù\89 Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84تÙ\81اصÙ\8aÙ\84 Ø­Ù\88Ù\84 Ù\85جÙ\85Ù\88عة Ø§Ù\84تغÙ\8aÙ\8aرات في %{url}.
+      unsubscribe: لإلغاء الاشتراك من التحديثات لهذه التغييرات؛ قم بزيارة %{url} وانقر
+        على "إلغاء الاشتراك".
   messages:
     inbox:
       title: الوارد
       my_inbox: الوارد
       outbox: الصادر
-      messages: لديك %{new_messages} و %{old_messages}
+      messages: لديك %{new_messages} و%{old_messages}
       new_messages:
         one: '%{count} رسالة جديدة'
         other: '%{count} رسائل جديدة'
@@ -1229,11 +1229,11 @@ ar:
       from: من
       subject: الموضوع
       date: التاريخ
-      no_messages_yet: لا يوجد لديك رسائل بعد. لماذا لا تقوم بالاتصال مع بعض %{people_mapping_nearby_link}؟
+      no_messages_yet: ليست لديك رسائل بعد، لماذا لا تقوم بالاتصال ببعض %{people_mapping_nearby_link}؟
       people_mapping_nearby: مخططون في جواري
     message_summary:
-      unread_button: Ø¹Ù\84Ù\91م كغير مقروءة
-      read_button: Ø¹Ù\84Ù\91م كمقروءة
+      unread_button: Ø§Ù\84تعÙ\84Ù\8aم كغير مقروءة
+      read_button: Ø§Ù\84تعÙ\84Ù\8aم كمقروءة
       reply_button: رد
       destroy_button: حذف
     new:
@@ -1245,48 +1245,47 @@ ar:
       back_to_inbox: العودة إلى صندوق الوارد
     create:
       message_sent: تم إرسال الرسالة
-      limit_exceeded: لقد أرسلت الكثير من الرسائل مؤخرًا. الرجاء الانتظار بعض الوقت
+      limit_exceeded: لقد أرسلت الكثير من الرسائل مؤخرًا؛ الرجاء الانتظار بعض الوقت
         قبل أن تحاول إرسال المزيد.
     no_such_message:
       title: "\uFEFFلا توجد مثل هذه الرسالة"
       heading: "\uFEFFلا توجد مثل هذه الرسالة"
-      body: عذرًا لا يوجد أي رسالة بهذا المعرف.
+      body: عذرًا لا توجد رسالة بذلك المعرف.
     outbox:
       title: صندوق الصادر
-      my_inbox: رابطي %{inbox_link}
-      inbox: صندوق البريد الوارد
-      outbox: الصادر
+      my_inbox: '%{inbox_link} الخاص بي'
+      inbox: صندوق الوارد
+      outbox: ØµÙ\86دÙ\88Ù\82 Ø§Ù\84صادر
       messages:
         one: لديك %{count} رسالة مبعوثة
-        other: لديك %{count} رسالة مبعوثة
+        other: لديك %{count} رسائل مبعوثة
       to: إلى
       subject: الموضوع
       date: التاريخ
-      no_sent_messages: لا يوجد لديك رسائل مرسلة بعد. لماذا لا تقم بالاتصال مع بعض
-        %{people_mapping_nearby_link}؟
+      no_sent_messages: ليست لديك رسائل مرسلة بعد، لماذا لا تقوم بالاتصال ببعض %{people_mapping_nearby_link}؟
       people_mapping_nearby: مخططون في جواري
     reply:
-      wrong_user: "\uFEFFأنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت الرد
-        عليها لم تكن مرسلة لذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد."
+      wrong_user: "\uFEFFأنت مسجل للدخول باسم '%{user}' ولكن الرسالة التي طلبت الرد
+        عليها لم تكن مرسلة لذلك المستخدم؛ يُرجَى تسجيل الدخول كمستخدم صحيح للرد."
     show:
       title: اقرأ الرسالة
       from: من
       subject: الموضوع
       date: التاريخ
       reply_button: رد
-      unread_button: Ø¹Ù\84Ù\91م كغير مقروءة
+      unread_button: Ø§Ù\84تعÙ\84Ù\8aم كغير مقروءة
       destroy_button: احذف
       back: رجوع
       to: إلى
-      wrong_user: "\uFEFFأنت مسجل دخول باسم '%{user}' ولكن الرسالة التي طلبت قراءتها
-        لم تكن من أو إلى ذلك المستخدم. يرجى تسجيل الدخول كمستخدم صحيح للرد."
+      wrong_user: "\uFEFFأنت مسجل للدخول باسم '%{user}' ولكن الرسالة التي طلبت قراءتها
+        لم تكن من أو إلى ذلك المستخدم؛ يُرجَى تسجيل الدخول كمستخدم صحيح للرد."
     sent_message_summary:
       destroy_button: حذف
     mark:
-      as_read: Ø¹Ù\8fÙ\84Ù\91Ù\85ت Ø§Ù\84رساÙ\84Ø© مقروءة
-      as_unread: عُلّمت الرسالة كغير مقروءة
+      as_read: Ø¹Ù\8fÙ\84Ù\90Ù\91Ù\85ت Ø§Ù\84رساÙ\84Ø© Ù\83مقروءة
+      as_unread: Ø¹Ù\8fÙ\84Ù\90Ù\91Ù\85ت Ø§Ù\84رساÙ\84Ø© Ù\83غÙ\8aر Ù\85Ù\82رÙ\88ءة
     destroy:
-      destroyed: حُذفت الرسالة
+      destroyed: Ø­Ù\8fØ°Ù\90Ù\81ت Ø§Ù\84رساÙ\84Ø©
   site:
     about:
       next: التالي
@@ -1297,20 +1296,18 @@ ar:
         من ذلك بكثير، في جميع أنحاء العالم.
       local_knowledge_title: المعرفة المحلية
       local_knowledge_html: |-
-        OpenStreetMap يؤكد على المعرفة المحلية. يستخدم المساهمون
-        الصور الجوية وأجهزة GPS والخرائط الميدانية ذات التقنية المنخفضة للتحقق من ذلك OSM
+        خريطة الشارع المفتوحة يؤكد على المعرفة المحلية، يستخدم المساهمون
+        الصور الجوية وأجهزة GPS والخرائط الميدانية ذات التقنية المنخفضة للتحقق من ذلك خريطة الشارع المفتوحة
         دقيقة وحديثة.
       community_driven_title: نابعة من المجتمع المحلي
-      community_driven_html: |-
-        مجتمع OpenStreetMap متنوع, عاطفي, ويزيد كل يوم.
-        يشمل المساهمون لدينا رسامي خرائط متحمسون, ومحترفي GIS, ومهندسين
-        تشغيل خوادم OSM ، والمساعدات الإنسانية للمناطق المتضررة من الكوارث ،
-        و أكثر من ذلك بكثير.
-        لمعرفة المزيد عن المجتمع ، انظر
-        <a href='https://blog.openstreetmap.org'></a>
-        <a href='%{diary_path}'></a>
-        <a href='https://blogs.openstreetmap.org/'></a>
-        و موقع <a href='https://www.osmfoundation.org/'></a>
+      community_driven_html: "مجتمع خريطة الشارع المفتوحة متنوع ومتحمس وينمو كل يوم،
+        \nيشمل المساهمون لدينا مصممي خرائط متحمسون، ومهنيي نظم المعلومات الجغرافية،
+        والمهندسون \nالذين يديرون خوادم خريطة الشارع المفتوحة، والمساعدات الإنسانية
+        للمناطق المتضررة من الكوارث،\nوغيرها الكثير،\nلمعرفة المزيد حول المجتمع; راجع
+        \n<a href='https://blog.openstreetmap.org'>مدونة خريطة الشارع المفتوحة</a>،\nو<a
+        href='%{diary_path}'> يوميات المستخدم</a>،\nو<a href='https://blogs.openstreetmap.org/'>مدونات
+        المجتمع</a>،\nوموقع the <a href='https://www.osmfoundation.org/'>مؤسسة خريطة
+        الشارع المفتوحة</a>."
       open_data_title: البيانات المفتوحة
       open_data_html: "خريطة الشارع المفتوحة <i>بيانات مفتوحة</i>: أنت حر في استخدامها
         لأي غرض\nطالما أنك تقوم بإحالة خريطة الشارع المفتوحة والمساهمين فيها، إذا
@@ -1332,67 +1329,66 @@ ar:
         english_link: النص الإنجليزي الأصلي
       native:
         title: حول هذه الصفحة
-        text: أنت تشاهد النسخة الإنجليزية لصفحة حقوق النشر. يمكنك الرجوع إلى %{native_link}٪
+        text: أنت تشاهد النسخة الإنجليزية لصفحة حقوق النشر، يمكنك الرجوع إلى %{native_link}٪
           {native_link} من هذه الصفحة أو يمكنك التوقف عن القراءة حول حقوق الطبع والنشر
-          و %{mapping_link}
+          و%{mapping_link}
         native_link: النسخة العربية
         mapping_link: ابدأ التخطيط
       legal_babble:
         title_html: حقوق النشر والترخيص
         intro_1_html: |-
-          OpenStreetMap <sup> <a href="#trademarks"> & reg؛ </a> </ sup> هو <i> بيانات مفتوحة </ i> ، مرخص بموجب <a
-          href = "https://opendatacommons.org/licenses/odbl/"> فتح البيانات
-          ترخيص Open Database License </a> (ODbL) بواسطة <a
-          href = "https://osmfoundation.org/"> مؤسسة OpenStreetMap </a> (OSMF).
-        intro_2_html: أنت حر في نسخ وتوزيع ونقل وتكييف بياناتنا، طالما كنت تأئتمن
-          خريطة الشارع المفتوحة والمساهمين فيها. إذا عدلت أو بنيت على البيانات المتوفرة
-          لدينا، فلا يحق لك توزيع النتيجة إلا تحت نفس الترخيص.<a href="http://opendatacommons.org/licenses/odbl/1.0/">
-          الكود القانوني الكامل</A> يشرح حقوقك ومسؤولياتك.
+          OpenStreetMap<sup><a href="#trademarks">&reg;</a></sup>  عبارة عن <i> بيانات مفتوحة</i>، ومرخصة تحت <a
+          href="https://opendatacommons.org/licenses/odbl/">رخصة قاعدة بيانات حرة</a> (ODbL)
+          بواسطة <a href="https://osmfoundation.org/">مؤسسة خريطة الشارع المفتوحة</a> (OSMF).
+        intro_2_html: "أنت حر في نسخ، وتوزيع، ونقل وتطويع بياناتنا، \nطالما أنك تقيد
+          خريطة الشارع المفتوحة\nوالمساهمين فيها، إذا عدلت أو بنيت على بياناتنا، \nفلا
+          يحق لك توزيع النتيجة إلا تحت نفس الترخيص، و\n<a href=\"https://opendatacommons.org/licenses/odbl/1.0/\">الكود
+          القانوني</a> الكامل يشرح حقوقك ومسؤولياتك."
         intro_3_html: |-
-          رسم الخرائط على الخريطة الخاص بنا ، ووثائقنا ،
-          مرخصة بموجب <a href="https://creativecommons.org/licenses/by-sa/2.0/"> Creative
-          الترخيص Attribution-ShareAlike 2.0 </a> (CC BY-SA).
-        credit_title_html: كيفية ائتمان OpenStreetMap
+          يتم  ترخيص رسم الخرائط في بلاط خرائطنا، ووثائقنا
+          بموجب ترخيص <a href="https://creativecommons.org/licenses/by-sa/2.0/">رخصة المشاع الإبداعي: النسبة-الترخيص بالمثل 2.0</a> (CC BY-SA).
+        credit_title_html: كيفية النسبة لخريطة الشارع المفتوحة
         credit_1_html: |-
           نطلب منك استخدام الائتمان &ldquo;&copy; OpenStreetMap
           contributors&rdquo;.
-        credit_2_html: |-
-          يجب أيضًا أن توضح أن البيانات متوفرة تحت Open
-          ترخيص قاعدة البيانات ، وإذا كان استخدام خريطتنا الخريطة ، فإن رسم الخرائط هو
-          مرخص كـ CC BY-SA. يمكنك القيام بذلك عن طريق ربط ل
-          <a href="https://www.openstreetmap.org/copyright"> صفحة حقوق الطبع والنشر هذه </a>.
-          بدلا من ذلك ، وكشرط إذا كنت تقوم بتوزيع OSM في
-          نموذج البيانات ، يمكنك تسمية والارتباط مباشرة إلى الترخيص (التراخيص). في وسائل الإعلام
-          حيث الروابط غير ممكنة (مثل الأعمال المطبوعة) ، فإننا نقترح عليك
-          توجيه القراء إلى openstreetmap.org (ربما عن طريق التوسع
-          "OpenStreetMap" إلى هذا العنوان الكامل) ، إلى opendatacommons.org ، و
-          إذا كان مناسبًا ، إلى creativecommons.org.
-        credit_3_html: 'للحصول على الخريطة الإلكترونية للتصفح، يجب أن يظهر الائتمان
+        credit_2_html: "يجب أيضا أن توضح أن البيانات متوفرة بموجب ترخيص\nقاعدة البيانات
+          المفتوحة، وفي حالة استخدام بلاط خرائطنا، يتم \nترخيص رسم الخرائط كـCC BY-SA،
+          يمكنك القيام بذلك عن طريق الربط بـ\n<a href=\"https://www.openstreetmap.org/copyright\">صفحة
+          حقوق الطبع والنشر هذه</a>.\nبدلا من ذلك، وكشرط إذا كنت تقوم بتوزيع خريطة
+          الشارع المفتوحة في \nنموذج بيانات، فيمكنك التسمية والربط مباشرةً إلى الترخيص(التراخيص).
+          في وسائل الإعلام\nحيث الروابط غير ممكنة (مثل الأعمال المطبوعة)، نقترح عليك
+          \nتوجيه القراء إلى openstreetmap.org (ربما عن طريق توسيع \n'OpenStreetMap'
+          إلى هذا العنوان الكامل)، وإلى opendatacommons.org، \nوإذا كان ذلك مناسبا،
+          إلى creativecommons.org."
+        credit_3_html: 'للحصول على الخريطة الإلكترونية للتصفح; يجب أن يظهر الائتمان
           في زاوية من الخريطة، مثلا:'
         attribution_example:
-          alt: مثال على كيفية إسناد OpenStreetMap على صفحة ويب
+          alt: مثال على كيفية إسناد خريطة الشارع المفتوحة على صفحة ويب
           title: مثال الإسناد
         more_title_html: معرفة المزيد
         more_1_html: |-
           اقرأ المزيد حول استخدام بياناتنا ، وكيفية اعتمادنا ، على <a
           href = "https://osmfoundation.org/Licence"> صفحة ترخيص OSMF </a>
-        more_2_html: |-
-          Ø¹Ù\84Ù\89 Ø§Ù\84رغÙ\85 Ù\85Ù\86 Ø£Ù\86 OpenStreetMap Ø¹Ø¨Ø§Ø±Ø© Ø¹Ù\86 Ø¨Ù\8aاÙ\86ات Ù\85Ù\81تÙ\88حة Ø\8c Ø¥Ù\84ا Ø£Ù\86Ù\86ا Ù\84ا Ù\86ستطÙ\8aع ØªÙ\88Ù\81Ù\8aر
-          خريطة API مجانية للجهات الخارجية.
-          Ø±Ø§Ø¬Ø¹ <a href="https://operations.osmfoundation.org/policies/api/"> Ø³Ù\8aاسة Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ù\88اجÙ\87Ø© Ø¨Ø±Ù\85جة Ø§Ù\84تطبÙ\8aÙ\82ات </a> Ø\8c
-          <a href="https://operations.osmfoundation.org/policies/tiles/"> سياسة استخدام الخريطة </a>
-          و <a href="https://operations.osmfoundation.org/policies/nominatim/"> سياسة استخدام Nominatim </a>.
+        more_2_html: "على الرغم من أن خريطة الشارع المفتوحة عبارة عن بيانات مفتوحة،
+          Ø¥Ù\84ا Ø£Ù\86Ù\87 Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\86ا ØªÙ\88Ù\81Ù\8aر \nÙ\88اجÙ\87Ø© Ø¨Ø±Ù\85جة ØªØ·Ø¨Ù\8aÙ\82ات Ø®Ø±Ù\8aطة Ø­Ø±Ø© Ù\84Ù\84أطراÙ\81 Ø§Ù\84ثاÙ\84ثةØ\8c
+          \nراجع <a href=\"https://operations.osmfoundation.org/policies/api/\">سياسة
+          Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ù\88اجÙ\87Ø© Ø¨Ø±Ù\85جة Ø§Ù\84تطبÙ\8aÙ\82ات</a>Ø\8c\nÙ\88<a href=\"https://operations.osmfoundation.org/policies/tiles/\">سÙ\8aاسة
+          استخدام البلاط</a>،\nو<a href=\"https://operations.osmfoundation.org/policies/nominatim/\">سياسة
+          الاستخدام حسب الاسم</a> لدينا."
         contributors_title_html: المساهمين
-        contributors_intro_html: |-
-          مساهمينا هم الآلاف من الأفراد. نحن تشمل أيضا
-          بيانات مرخصة بشكل علني من وكالات الخرائط الوطنية
-          ومصادر أخرى ، من بينها:
+        contributors_intro_html: "مساهمونا هم آلاف الأفراد، نوفر أيضا \nبيانات مرخصة
+          بشكلٍ مفتوح من وكالات الخرائط الوطنية \nوغيرها من المصادر، من بينها:"
         contributors_at_html: |-
           <strong> النمسا </ strong>: يحتوي على بيانات من
           <a href="https://data.wien.gv.at/"> Stadt Wien </a> (under
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de"> CC BY </a>) ،
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm"> Land Vorarlberg </a> and
           Land Tirol (ضمن <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/"> CC BY AT مع التعديلات </a>).
+        contributors_au_html: |-
+          <strong>أستراليا</strong>: تحتوي على البيانات المستمدة من
+          <a href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA Australia Limited</a>
+          المرخصة بواسطة كومنولث أستراليا تحت
+          <a href="https://creativecommons.org/licenses/by/4.0/">رخصة المشاع الإبداعي: النسبة-الترخيص بالمثل 4.0</a>.
         contributors_ca_html: |-
           <strong> كندا </ strong>: يحتوي على بيانات من
           GeoBase & reg ؛، GeoGratis (& copy؛ Department of Natural
@@ -1454,7 +1450,7 @@ ar:
           ، فيرجى الاطلاع على <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">
           سياسة العلامات التجارية </a>.
     index:
-      js_1: Ø£Ù\86ت Ø¥Ù\85ا ØªØ³ØªØ®Ø¯Ù\85 Ù\85تصÙ\81Ø­ لا يدعم جافا سكريبت، أو أنك عطلت استعمال جافا سكريبت.
+      js_1: Ø¥Ù\85ا Ø£Ù\86Ù\83 ØªØ³ØªØ®Ø¯Ù\85 Ù\85تصÙ\81حا لا يدعم جافا سكريبت، أو أنك عطلت استعمال جافا سكريبت.
       js_2: خريطة الشارع المفتوحة تستخدم جافا سكريبت لخريطتها المنزلقة.
       permalink: وصلة دائمة
       shortlink: وصلة قصيرة
@@ -1464,20 +1460,20 @@ ar:
       remote_failed: فشل التعديل - تأكد من تحميل JOSM أو Merkaartor وتمكين خيار التحكم
         عن بعد
     edit:
-      not_public: لم تقم بتعيين تعديلاتك لتظهر بشكل علني.
-      not_public_description: أنت لم تعد قادر على تعديل الخريطة إلا إذا قمت بذلك.
-        يمكنك تعيين تعديلاتك لتظهر بشكل علني من حسابك %{user_page}.
+      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: Ù\84دÙ\8aÙ\83 ØªØºÙ\8aÙ\8aرات ØºÙ\8aر Ù\85Ø­Ù\81Ù\88ظة. (Ù\84Ù\84Ø­Ù\81ظ Ù\81Ù\8a PotlatchØ\8c يجب إلغاء
-        الطريق أو النقطة الحاليين إن كان التعديل في الوضع المباشر، أو انقر فوق حفظ
-        إن كان لديك زر الحفظ.)
+      potlatch_unsaved_changes: Ù\84دÙ\8aÙ\83 ØªØºÙ\8aÙ\8aرات ØºÙ\8aر Ù\85Ø­Ù\81Ù\88ظة. (Ù\84Ù\84Ø­Ù\81ظ Ù\81Ù\8a PotlatchØ\9b يجب إلغاء
+        الطريق أو النقطة الحاليين إن كان التعديل في الوضع الحي، أو انقر فوق حفظ إن
+        كان لديك زر الحفظ.)
       potlatch2_not_configured: لم يتم تكوين Potlatch 2 - يُرجَى الاطلاع على  http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-        for more information
+        للمزيد من المعلومات
       potlatch2_unsaved_changes: لديك تغييرات غير محفوظة. (للحفظ في Potlatch 2; يجب
         النقر فوق حفظ.)
       id_not_configured: لم يتم تكوين المعرف
@@ -1488,22 +1484,21 @@ ar:
       area_to_export: المنطقة المطلوب تصديرها
       manually_select: اختر يدويًا منطقة أخرى
       format_to_export: الهيئة المطلوب تصديرها
-      osm_xml_data: معطيات خريطة الطريق المفتوح بنسق إكس أم أل
+      osm_xml_data: بيانات خريطة الشارع المفتوحة بصيغة XML
       map_image: صورة الخريطة (عرض الطبقة الإفتراضية)
       embeddable_html: HTML مضمن
       licence: الرخصة
       export_details: بيانات خريطة الشارع المفتوحة مرخصة تحت <a href="https://opendatacommons.org/licenses/odbl/1.0/">رخصة
         قاعدة بيانات حرة</a>.
       too_large:
-        advice: 'إذا فشل التصدير أعلاه، فكّر من فضلك باستخدام أحد المصادر الموضَّحة
+        advice: 'إذا Ù\81Ø´Ù\84 Ø§Ù\84تصدÙ\8aر Ø£Ø¹Ù\84اÙ\87Ø\8c Ù\81Ù\83Ù\90Ù\91ر Ù\85Ù\86 Ù\81ضÙ\84Ù\83 Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ø£Ø­Ø¯ Ø§Ù\84Ù\85صادر Ø§Ù\84Ù\85Ù\88ضÙ\8eÙ\91حة
           أدناه:'
-        body: 'Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\86Ø·Ù\82Ø© Ù\83بÙ\8aرة Ø¬Ø¯Ù\8bا Ù\84Ù\84تصدÙ\8aر Ø¹Ù\84Ù\89 Ù\87Ù\8aئة Ø¨Ù\8aاÙ\86ات Ø¥Ù\83س Ø¥Ù\85 Ø¥Ù\84 Ù\84خرÙ\8aطة Ø§Ù\84شارع
-          Ø§Ù\84Ù\85Ù\81تÙ\88حة. Ù\8aرجÙ\89 ØªÙ\83بÙ\8aر Ø§Ù\84خرÙ\8aطة Ø£Ù\88 Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ù\85Ù\86Ø·Ù\82Ø© Ø£ØµØºØ± Ø£Ù\88 Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ø£Ø­Ø¯ Ø§Ù\84Ù\85صادر
-          Ø§Ù\84تاÙ\84Ù\8aØ© Ù\84تÙ\86زÙ\8aÙ\84 Ø§Ù\84بÙ\8aاÙ\86ات Ø§Ù\84ضخÙ\85Ø©:'
+        body: 'Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\86Ø·Ù\82Ø© Ù\83بÙ\8aرة Ø¬Ø¯Ù\8bا Ù\84Ù\84تصدÙ\8aر Ø¨ØµÙ\8aغة XML Ù\84خرÙ\8aطة Ø§Ù\84شارع Ø§Ù\84Ù\85Ù\81تÙ\88حةØ\9b Ù\8aÙ\8fرجÙ\8eÙ\89
+          ØªÙ\83بÙ\8aر Ø§Ù\84خرÙ\8aطة Ø£Ù\88 Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ù\85Ù\86Ø·Ù\82Ø© Ø£ØµØºØ± Ø£Ù\88 Ø§Ø³ØªØ®Ø¯Ø§Ù\85 Ø£Ø­Ø¯ Ø§Ù\84Ù\85صادر Ø§Ù\84تاÙ\84Ù\8aØ© Ù\84تÙ\86زÙ\8aÙ\84
+          البيانات الضخمة:'
         planet:
-          title: كوكب OSM
+          title: كوكب خريطة الشارع المفتوحة
           description: نسخ محدثة بشكل دوري من قاعدة بيانات خرائط الشوارع المفتوحة
-            OpenStreetMap
         overpass:
           title: تجاوز API
           description: تحميل مربع الإحاطة من مرآة قاعدة بيانات خريطة الشارع المفتوحة
@@ -1517,7 +1512,7 @@ ar:
           title: مصادر أخرى
           description: مصادر إضافية مدرجة في الويكي خريطة الشارع المفتوحة
       options: خيارات
-      format: الهيئة
+      format: الصيغة
       scale: القياس
       max: الأقصى
       image_size: حجم الصورة
@@ -1525,37 +1520,37 @@ ar:
       add_marker: أضف علامة على الخريطة
       latitude: 'خط العرض:'
       longitude: 'خط الطول:'
-      output: Ø§Ù\84خرج
+      output: Ø§Ù\84إخراج
       paste_html: ألصق HTML لتضمينه في موقع ما
       export_button: صدِّر
     fixthemap:
       title: الإبلاغ عن مشكلة / إصلاح الخريطة
       how_to_help:
-        title: كيف نساعدك ؟
+        title: كيف تساعد
         join_the_community:
-          title: Ø§Ù\86ضÙ\85 Ù\84Ù\87ذا Ø§Ù\84Ù\85جتÙ\85ع
+          title: انضم للمجتمع
           explanation_html: إذا كنت قد لاحظت وجود مشكلة في بيانات الخرائط لدينا، على
             سبيل المثال طريق مفقود أو عنوانك، فإن أفضل طريقة للمضي قدما هو الانضمام
             إلى مجتمع خريطة الشارع المفتوحة وإضافة أو إصلاح البيانات بنفسك.
         add_a_note:
           instructions_html: |-
-            انقر فقط على <a class='icon note'> </a> أو على الرمز نفسه على عرض الخريطة.
-            سيضيف هذا علامة إلى الخريطة ، والتي يمكنك نقلها
-            عن طريق السحب. أضف رسالتك ، ثم انقر على "حفظ" ، وسيتحرى مصممو الخرائط الآخرين.
+            انقر فقط على <a class='icon note'> </a> أو على الرمز نفسه على عرض الخريطة،
+            سيضيف هذا علامة إلى الخريطة، والتي يمكنك نقلها
+            عن طريق السحب، أضف رسالتك، ثم انقر على "حفظ"، وسيتحرى مصممو الخرائط الآخرين.
       other_concerns:
         title: اهتمامات أخرى
-        explanation_html: |-
-          إذا كانت لديك مخاوف بشأن كيفية استخدام البيانات الخاصة بنا أو حول المحتويات ، فيرجى الرجوع إلى موقعنا
-          <a href='/copyright'> صفحة حقوق الطبع والنشر </a> لمزيد من المعلومات القانونية ، أو اتصل بالشكل المناسب
-          <a href='https://wiki.osmfoundation.org/wiki/Working_Groups'> مجموعة عمل OSMF </a>.
+        explanation_html: "إذا كانت لديك مخاوف بشأن كيفية استخدام بياناتنا أو حول
+          محتوياتها، فالرجاء الرجوع إلى \n<a href='/copyright'>صفحة حقوق الطبع والنشر
+          لدينا</a> لمزيد من المعلومات القانونية، أو الاتصال\n<a href='https://wiki.osmfoundation.org/wiki/Working_Groups'>بمجموعة
+          عمل مؤسسة خريطة الشارع المفتوحة</a>."
     help:
       title: الحصول على مساعدة
-      introduction: |-
-        يحتوي OpenStreetMap على العديد من الموارد للتعلم حول المشروع ، وطرح الأسئلة والإجابة عليها ،
-        والمشاركة في مناقشة وتوثيق مواضيع الخرائط.
+      introduction: "يحتوي خريطة الشارع المفتوحة على العديد من الموارد للتعلم حول
+        المشروع، وطرح الأسئلة والإجابة عليها، \nومناقشة مواضيع التخطيط وتوثيقها بشكل
+        تعاوني."
       welcome:
         url: أهلا بك.
-        title: مرحبا بك في خرائط الشوارع " المفتوحة المصدر"
+        title: مرحبا بك في خريطة الشارع المفتوحة
         description: ابدأ مع هذا الدليل السريع تغطية أساسيات خريطة الشارع المفتوحة.
       beginners_guide:
         url: http://wiki.openstreetmap.org/wiki/Ar:Beginners%27_guide
@@ -1583,7 +1578,7 @@ ar:
       wiki:
         url: http://wiki.openstreetmap.org/
         title: wiki.openstreetmap.org
-        description: تصفح ويكي لوثائق OSM المتعمقة.
+        description: تصفح ويكي لوثائق خريطة الشارع المفتوحة المتعمقة.
     sidebar:
       search_results: نتائج البحث
       close: أغلق
@@ -1622,7 +1617,7 @@ ar:
           - عربة أسلاك
           - تلفريك
           runway:
-          - مدرج مطار للإقلاع/الهبوط
+          - مدرج مطار
           - مدرج مطار لمناورات الطائرات
           apron:
           - ساحة مطار
@@ -1643,7 +1638,7 @@ ar:
           lake:
           - بحيرة
           - خزان
-          farm: أرض زراعية
+          farm: مزرعة
           brownfield: موقع مخلفات
           cemetery: مقبرة
           allotments: حصص سكنية
@@ -1661,14 +1656,14 @@ ar:
           - ذروة
           tunnel: غطاء متقطع = نفق
           bridge: غطاء أسود = جسر
-          private: استخدام خصوصي
-          destination: استخدام إلى الوجهة
+          private: وصول خصوصي
+          destination: وجهة الوصول
           construction: الطرق تحت الإنشاء
           bicycle_shop: متجر دراجات
           bicycle_parking: مرآب دراجات
           toilets: مرحاض
     richtext_area:
-      edit: Ø­Ø±Ù\91ر
+      edit: ØªØ¹Ø¯Ù\8aÙ\84
       preview: شاهد
     markdown_help:
       title_html: تم التحليل بواسطة <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
@@ -1683,9 +1678,9 @@ ar:
       text: النص
       image: الصورة
       alt: النص البديل
-      url: الرابط
+      url: المسار
     welcome:
-      title: أهلاً بك.
+      title: مرحبا!
       introduction_html: مرحبًا بك في OpenStreetMap ، خريطة مجانية ومعدلة للعالم.
         الآن بعد أن سجلت ، أنت جاهز للبدء في رسم الخرائط. وإليك دليل سريع مع الأشياء
         الأكثر أهمية تحتاج إلى معرفتها.
@@ -1705,11 +1700,11 @@ ar:
           يلي بعض الكلمات الرئيسية التي سوف تأتي في متناول اليدين.
         editor_html: <strong>محرر</strong> هو برنامج أو موقع يمكنك استخدامه لتعديل
           الخريطة.
-        node_html: <strong>عقدة</strong> هي نقطة على الخريطة، مثل مطعم واحد أو شجرة
+        node_html: <strong>عقدة</strong> هي نقطة على الخريطة، مثل مطعم واحد أو شجرة
           واحدة.
-        way_html: <strong>طريق</strong> هو خط أو منطقة، مثل طريق أو تيار أو بحيرة
+        way_html: <strong>طريق</strong> هو خط أو منطقة، مثل طريق أو تيار أو بحيرة
           أو بناء.
-        tag_html: <strong>وسم</strong> هو قليل من البيانات حول عقدة أو طريقة، مثل
+        tag_html: <strong>وسم</strong> هو قليل من البيانات حول عقدة أو طريقة، مثل
           اسم أحد المطاعم أو الحد الأقصى للسرعة على الطريق.
       rules:
         title: قواعد!
@@ -1720,7 +1715,7 @@ ar:
           <a href='https://wiki.openstreetmap.org/wiki/Import/Guidelines'> الواردات </a> و
           <a href='https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct'> التعديلات التلقائية </a>.
       questions:
-        title: هل هناك أسئلة ؟
+        title: هل هناك أسئلة؟
         paragraph_1_html: "تحتوي خريطة الشارع المفتوحة على العديد من الموارد للتعلم
           حول المشروع، وطرح \nالأسئلة والإجابة عليها، ومناقشة مواضيع التخطيط وتوثيقها
           بشكل تعاوني،\n<a href='%{help_url}'>احصل على المساعدة هنا</a>."
@@ -1730,9 +1725,9 @@ ar:
         paragraph_1_html: إذا كنت تريد إصلاح مجرد شيء صغير وليس لديك الوقت للتسجيل
           ومعرفة كيفية التحرير، فإنه من السهل أن تضيف ملاحظة.
         paragraph_2_html: |-
-          ما عليك سوى الانتقال إلى <a href='%{map_url}'> الخريطة </a> والنقر على رمز الملاحظة:
-          <span class = 'icon note'> </ span>. سيضيف هذا علامة إلى الخريطة ، والتي يمكنك نقلها
-          Ø¹Ù\86 Ø·Ø±Ù\8aÙ\82 Ø§Ù\84سحب. Ø£Ø¶Ù\81 Ø±Ø³Ø§Ù\84تÙ\83 Ø\8c Ø«Ù\85 Ø§Ù\86Ù\82ر Ø¹Ù\84Ù\89 "Ø­Ù\81ظ" ، وسيتحرى مصممو الخرائط الآخرين.
+          ما عليك سوى الانتقال إلى <a href='%{map_url}'>الخريطة </a> والنقر على أيقونة الملاحظة:
+          <span class='icon note'></span>، سيضيف هذا علامة إلى الخريطة، والتي يمكنك نقلها
+          Ø¨Ø§Ù\84سحبØ\8c Ø£Ø¶Ù\81 Ø±Ø³Ø§Ù\84تÙ\83Ø\8c Ø«Ù\85 Ø§Ù\86Ù\82ر Ø¹Ù\84Ù\89 "Ø­Ù\81ظ"، وسيتحرى مصممو الخرائط الآخرين.
   traces:
     visibility:
       private: خصوصي (يظهر كمجهول الهوية ونقاط غير مرتبة)
@@ -1871,7 +1866,7 @@ ar:
       allow_read_prefs: يقرأ تفضيلات المستخدم.
       allow_write_prefs: عدّل تفضيلات المستخدم.
       allow_write_diary: إنشاء مدخلات يومية، تعليقات وإضافة أصدقاء.
-      allow_write_api: يعدّل الخريطة.
+      allow_write_api: تعديل الخريطة.
       allow_read_gpx: قراءة آثار جي بي أس الخاصة بك.
       allow_write_gpx: ارفع آثار جي بي أس.
       allow_write_notes: تعديل الملاحظات.
@@ -1890,13 +1885,13 @@ ar:
       missing: لم تسمح بالوصول إلى التطبيق لهذا المرفق
   oauth_clients:
     new:
-      title: Ø³Ø¬Ù\91Ù\90Ù\84 ØªØ·Ø¨Ù\8aÙ\82 جديد
+      title: Ø³Ø¬Ù\90Ù\91Ù\84 Ø·Ù\84با جديد
       submit: سجِّل
     edit:
-      title: Ø¹Ø¯Ù\91Ù\84 ØªØ·Ø¨Ù\8aÙ\82ك
+      title: Ø¹Ø¯Ù\84 Ø·Ù\84بك
       submit: تعديل
     show:
-      title: ØªÙ\81اصÙ\8aÙ\84 OAuth Ù\84Ù\84تطبÙ\8aÙ\82 %{app_name}
+      title: ØªÙ\81اصÙ\8aÙ\84 OAuth Ù\84Ù\80%{app_name}
       key: 'مفتاح المستهلك:'
       secret: 'سر المستهلك:'
       url: 'رابط طلب النموذج:'
@@ -1948,29 +1943,29 @@ ar:
     update:
       flash: تم تحديث معلومات العميل بنجاح
     destroy:
-      flash: Ø¯Ù\85Ù\91ر ØªØ³Ø¬Ù\8aÙ\84 Ø§Ù\84تطبÙ\8aÙ\82
-  user:
+      flash: Ø¯Ù\8fÙ\85Ù\90Ù\91ر ØªØ³Ø¬Ù\8aÙ\84 ØªØ·Ø¨Ù\8aÙ\82 Ø§Ù\84عÙ\85Ù\8aÙ\84
+  users:
     login:
       title: تسجيل الدخول
       heading: تسجيل الدخول
       email or username: 'عنوان البريد الإلكتروني أو اسم المستخدم:'
       password: 'كلمة السر:'
-      openid: '%{logo} OpenID:'
+      openid: '%{logo} معرف مفتوح:'
       remember: 'تذكرني:'
       lost password link: أنسيت كلمة المرور؟
       login_button: تسجيل الدخول
       register now: سجل حسابًا الآن
       with username: 'هل لديك بالفعل حساب خريطة الشارع المفتوحة؟ الرجاء الدخول باسم
         المستخدم وكلمة المرور الخاصين بك:'
-      with external: 'بدÙ\84ا Ù\85Ù\86 Ø°Ù\84Ù\83Ø\8c Ø§Ø³ØªØ®Ø¯Ù\85 Ø·Ø±Ù\81ا Ø¢Ø®Ø± Ù\84لدخول:'
-      new to osm: Ø¬Ø¯Ù\8aد Ù\84خرÙ\8aطة Ø§Ù\84شارع Ø§Ù\84Ù\85Ù\81تÙ\88حة ؟
+      with external: 'بدÙ\84ا Ù\85Ù\86 Ø°Ù\84Ù\83Ø\8c Ø§Ø³ØªØ®Ø¯Ù\85 Ø·Ø±Ù\81ا Ø«Ø§Ù\84ثا Ù\84تسجÙ\8aÙ\84 Ø§لدخول:'
+      new to osm: Ø¬Ø¯Ù\8aد Ù\81Ù\8a Ø®Ø±Ù\8aطة Ø§Ù\84شارع Ø§Ù\84Ù\85Ù\81تÙ\88حة؟
       to make changes: لإجراء تغييرات على بيانات خريطة الشارع المفتوحة; يجب أن يكون
         لديك حساب.
-      create account minute: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ø§Ù\91. ØªØ­ØªØ§Ø¬ Ù\81Ù\82Ø· Ø¥Ù\84Ù\89 Ø¯Ù\82Ù\8aÙ\82Ø©.
-      no account: ليس لديك حسابا ؟
-      account not active: عذراً، حسابك غير نشط حتى الآن.<br />يُرجى إستخدام الرابط
-        Ø§Ù\84Ø°Ù\8a Ø§Ù\8fرسÙ\90Ù\84Ù\8e Ø¥Ù\84Ù\8aÙ\83 Ù\81Ù\89 Ø±Ø³Ø§Ù\84Ø© ØªØ£Ù\83Ù\8aد Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aØ\8c Ù\83Ù\85ا <a href="%{reconfirm}">Ù\8aÙ\8fÙ\85Ù\83Ù\86Ù\83
-        Ø·Ù\84ب Ø±Ø³Ø§Ù\84Ø© ØªØ£Ù\83Ù\8aد Ø¬Ø¯Ù\8aدة Ù\81Ù\89 Ø­Ø§Ù\84Ø© Ø¹Ø¯Ù\85 Ø¥ستلام الاولى</a>.
+      create account minute: Ø§Ù\86شئ Ø­Ø³Ø§Ø¨Ø§Ø\8c Ø¥Ù\86Ù\87ا ØªØ³ØªØºØ±Ù\82 Ø¯Ù\82Ù\8aÙ\82Ø© Ù\88احدة Ù\81Ù\82Ø·.
+      no account: ليس لديك حسابا؟
+      account not active: Ø¹Ø°Ø±Ø§Ù\8bØ\8c Ø­Ø³Ø§Ø¨Ù\83 ØºÙ\8aر Ù\86شط Ø­ØªÙ\89 Ø§Ù\84Ø¢Ù\86.<br />Ù\8aÙ\8fرجÙ\8eÙ\89 Ø¥Ø³ØªØ®Ø¯Ø§Ù\85 Ø§Ù\84رابط
+        الذي اُرسِلَ إليك فى رسالة تأكيد البريد الإلكتروني، كما <a href="%{reconfirm}">يمكنك
+        Ø·Ù\84ب Ø±Ø³Ø§Ù\84Ø© ØªØ£Ù\83Ù\8aد Ø¬Ø¯Ù\8aدة Ù\81Ù\89 Ø­Ø§Ù\84Ø© Ø¹Ø¯Ù\85 Ø§ستلام الاولى</a>.
       account is suspended: عذرا، تم تعليق حسابك بسبب نشاط مشبوه.<br />يُرجَى الاتصال
         ب<a href="%{webmaster}">webmaster</a> إذا كنت ترغب في مناقشة هذا.
       auth failure: آسف، لا يمكن الدخول بتلك التفاصيل.
@@ -1978,12 +1973,12 @@ ar:
       auth_providers:
         openid:
           title: تسجيل الدخول بOpenID
-          alt: تسجيل الدخول باستخدام OpenID URL
+          alt: تسجيل الدخول باستخدام مسار OpenID
         google:
-          title: قم بتسجيل الدخول عن طريق جوجل
+          title: تسجيل الدخول باستخدام جوجل
           alt: تسجيل الدخول ب Google OpenID
         facebook:
-          title: قم بتسجيل الدخول باستخدام الفيس بوك
+          title: تسجيل الدخول باستخدام فيس بوك
           alt: تسجيل الدخول بحساب فيسبوك
         windowslive:
           title: تسجيل الدخول عبر ويندوز لايف
@@ -1996,13 +1991,13 @@ ar:
           alt: سجل الدخول باستخدام حساب ويكيبيديا
         yahoo:
           title: تسجيل الدخول بياهو
-          alt: تسجيل الدخول ب Yahoo OpenID
+          alt: تسجيل الدخول بـYahoo OpenID
         wordpress:
           title: تسجيل الدخول بووردبريس
-          alt: تسجيل الدخول ب Wordpress OpenID
+          alt: تسجيل الدخول بـWordpress OpenID
         aol:
           title: تسجيل الدخول بإيه أو إل
-          alt: تسجيل الدخول ب AOL OpenID
+          alt: تسجيل الدخول بـAOL OpenID
     logout:
       title: تسجيل الخروج
       heading: الخروج من خريطة الشارع المفتوحة
@@ -2012,19 +2007,19 @@ ar:
       heading: أنسيت كلمة المرور؟
       email address: 'عنوان البريد الإلكتروني:'
       new password button: أعد ضبط كلمة السر
-      help_text: أدخل عنوان البريد الإلكتروني الذي استخدمته للتسجيل ، وسوف نرسل عليه
-        رابط يمكنك استخدامه لإعادة تعيين كلمة المرور.
+      help_text: أدخل عنوان البريد الإلكتروني الذي استخدمته للتسجيل، وسوف نرسل عليه
+        رابطا يمكنك استخدامه لإعادة تعيين كلمة المرور.
       notice email on way: نأسف لأنك أضعتها :-( ولكن هناك رسالة إلكترونية في طريقها
         إليك ستمكنك من إعادة تعيينها قريبًا.
-      notice email cannot find: تعذّر إيجاد عنوان البريد الإلكتروني، نحن آسفون.
+      notice email cannot find: معذرةً، تعذر إيجاد عنوان البريد الإلكتروني.
     reset_password:
       title: إعادة ضبط كلمة السر
       heading: إعادة تعيين كلمة المرور %{user}
       password: 'كلمة السر:'
-      confirm password: 'Ø£Ù\83Ù\91د Ù\83Ù\84Ù\85Ø© Ø§Ù\84Ù\85رÙ\88ر:'
+      confirm password: 'تأÙ\83Ù\8aد Ù\83Ù\84Ù\85Ø© Ø§Ù\84سر:'
       reset: أعد ضبط كلمة السر
-      flash changed: كلمة المرور الخاصة بك قد تغيرت.
-      flash token bad: لم نجد هذا النموذج، تحقق من الرابط ربما؟
+      flash changed: كلمة مرورك قد تغيرت.
+      flash token bad: لم نجد هذا النموذج، تحقق من المسار ربما؟
     new:
       title: أنشئ حسابا
       no_auto_account_create: للأسف نحن غير قادرين في الوقت الحالي على إنشاء حساب
@@ -2035,65 +2030,68 @@ ar:
         header: حًرَّة وقابلة للتحرير
         html: |-
           <p>على عكس الخرائط الأخرى تماما، يتم إنشاء خريطة الشارع المفتوحة من قبل الناس مثلك، وهي حرة ويمكن لأي أحد الإصلاح والتحديث والتنزيل والاستخدام.</p>
-           <P> أنشىء حسابا لبدء المساهمة.سنقوم بإرسال بريد إلكتروني لتأكيد حسابك.</p>
+          <P> أنشىء حسابا لبدء المساهمة.سنقوم بإرسال بريد إلكتروني لتأكيد حسابك.</p>
       license_agreement: عند تأكيد حسابك ستحتاج إلى الموافقة على <a href="HTTPS://www.osmfoundation.org/wiki/License/Contributor_Terms">شروط
         المساهم</a>.
       email address: 'عنوان البريد الإلكتروني:'
       confirm email address: 'تأكيد عنوان البريد الإلكتروني:'
-      not displayed publicly: Ù\84ا Ù\8aعرض Ø¹Ù\84Ù\86Ù\8bا (اÙ\86ظر <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy"
-        title="ويكي سياسة الخصوصية المتضمنة قسم عن عناوين البريد الإلكتروني">سياسة
-        الخصوصية</a>)
-      display name: 'اسم المستخدم:'
-      display name description: اسم المستخدم الخاص بك الظاهر علنًا. يمكنك تغيير هذه
-        التفضيلات في وقت لاحق.
+      not displayed publicly: Ù\84ا Ù\8aتÙ\85 Ø¹Ø±Ø¶ Ø¹Ù\86Ù\88اÙ\86Ù\83 Ø¨Ø´Ù\83Ù\84 Ø¹Ø§Ù\85Ø\8c Ø±Ø§Ø¬Ø¹ <a href="https://wiki.osmfoundation.org/wiki/Privacy_Policy"
+        title="سياسة خصوصية OSMF بما في ذلك القسم عن عناوين البريد الإلكتروني ">سياسة
+        الخصوصية</a> لمزيد من المعلومات
+      display name: 'اسم العرض:'
+      display name description: اسم المستخدم الخاص بك الظاهر علنًا، يمكنك تغيير هذا
+        في التفضيلات في وقت لاحق.
       external auth: 'مصادقة طرف ثالث:'
       password: 'كلمة السر:'
       confirm password: 'تأكيد كلمة المرور:'
-      use external auth: 'بدÙ\84ا Ù\85Ù\86 Ø°Ù\84Ù\83Ø\8c Ø§Ø³ØªØ®Ø¯Ù\85 Ø·Ø±Ù\81ا Ø¢Ø®Ø± Ù\84لدخول:'
+      use external auth: 'بدÙ\84ا Ù\85Ù\86 Ø°Ù\84Ù\83Ø\8c Ø§Ø³ØªØ®Ø¯Ù\85 Ø·Ø±Ù\81ا Ø«Ø§Ù\84ثا Ù\84تسجÙ\8aÙ\84 Ø§لدخول:'
       auth no password: مع مصادقة طرف ثالث كلمة السر غير مطلوبة، ولكن بعض الأدوات
         إضافية أو الخادم قد لا تزال تحتاج إلى واحدة.
       continue: أنشئ حسابا
       terms accepted: نشكرك على قبول شروط المساهم الجديدة!
-      terms declined: نحن نأسف أن كنت قد قررت عدم قبول شروط المساهمة الجديدة. لمزيد
-        من المعلومات، يرجى الاطلاع على <a href="%{url}">صفحة الويكي هذه</a>.
+      terms declined: نحن نأسف أن كنت قد قررت عدم قبول شروط المساهمة الجديدة، لمزيد
+        من المعلومات; يُرجَى الاطلاع على <a href="%{url}">صفحة الويكي هذه</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: 'شروط المساهم:'
       heading: 'شروط المساهم:'
-      read and accept: يرجى قراءة الاتفاقية أدناه والضغط على زر الموافقة لتأكيد قبول
-        شروط هذا الاتفاق على مشاركاتك الموجودة حاليًا والمستقبلية.
+      read and accept: تُرجَى قراءة الاتفاقية أدناه والضغط على زر الموافقة لتأكيد
+        قبول شروط هذا الاتفاق على مشاركاتك الموجودة والمستقبلية.
       consider_pd: وبالإضافة إلى الاتفاقية أعلاه، أريد أن تكون مساهماتي ملكية عامة.
       consider_pd_why: ما هذا؟
-      guidance: 'معلومات للمساعدة في فهم هذه المصطلحات: <a href="%{summary}"> ملخص
-        قابل للقراءة بالإنسان </a> وبعض <a href="%{translations}"> ترجمة غير رسمية
-        </a>'
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
+      guidance: 'معلومات للمساعدة في فهم هذه المصطلحات: <a href="%{summary}">ملخص
+        قابل للقراءة بواسطة الإنسان </a> وبعض <a href="%{translations}">ترجمات غير
+        رسمية</a>'
       agree: أوافق
-      decline: انخفاض
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+      decline: أرفض
       you need to accept or decline: الرجاء القراءة ومن ثم قبول أو رفض شروط المساهمة
         الجديدة للمتابعة.
-      legale_select: 'اÙ\84رجاء Ø§Ø®ØªÙ\8aار Ø¨Ù\84د Ø§Ù\84Ø¥Ù\82اÙ\85Ø©:'
+      legale_select: 'بلد الإقامة:'
       legale_names:
         france: فرنسا
         italy: إيطاليا
         rest_of_world: بقية العالم
     no_such_user:
-      title: Ù\85ستخدÙ\85 ØºÙ\8aر Ù\85Ù\88جÙ\88د
+      title: Ù\84ا Ù\8aÙ\88جد Ù\85ستخدÙ\85 Ù\83Ù\87ذا
       heading: المستخدم %{user} غير موجود
-      body: عذرًا، لا يوجد مستخدم بالاسم %{user}. يرجى تدقيق الاسم، أو ربما يكون الرابط
-        الذي تم النقر عليه خاطئ.
+      body: عذرًا، لا يوجد مستخدم بالاسم %{user}; يُرجَى تدقيق الاسم، أو ربما يكون
+        Ø§Ù\84رابط Ø§Ù\84Ø°Ù\8a ØªÙ\85 Ø§Ù\84Ù\86Ù\82ر Ø¹Ù\84Ù\8aÙ\87 Ø®Ø§Ø·Ø¦.
       deleted: تم حذفه
     show:
       my diary: اليوميات
       new diary entry: مدخلة يومية جديدة
-      my edits: Ø§Ù\84Ù\85Ù\8fساÙ\87Ù\85ات
+      my edits: ØªØ¹Ø¯Ù\8aÙ\84اتÙ\8a
       my traces: آثاري
       my notes: ملاحظاتي
       my messages: رسائلي
       my profile: ملفي الشخصي
-      my settings: Ø§Ù\84إعدادات
+      my settings: Ø¥Ø¹Ø¯Ø§Ø¯Ø§ØªÙ\8a
       my comments: تعليقاتي
       oauth settings: "\uFEFFإعدادات oauth"
-      blocks on me: Ø§Ù\84عرÙ\82Ù\84ات Ø¹Ù\84ي
-      blocks by me: Ø§Ù\84عرÙ\82Ù\84ات بواسطتي
+      blocks on me: Ø¹Ù\85Ù\84Ù\8aات Ù\85Ù\86عي
+      blocks by me: Ø¹Ù\85Ù\84Ù\8aات Ø§Ù\84Ù\85Ù\86ع بواسطتي
       send message: إرسل رسالة
       diary: يومية
       edits: مساهمات
@@ -2102,57 +2100,58 @@ ar:
       remove as friend: إلغاء الصداقة
       add as friend: أضف كصديق
       mapper since: 'مُخطط منذ:'
-      ago: (%{time_in_words_ago})
+      ago: منذ %{time_in_words_ago}
       ct status: 'شروط المساهم:'
       ct undecided: متردد
       ct declined: مرفوض
-      ct accepted: مقبول %{ago} سابقاً
+      ct accepted: مقبول منذ %{ago}
       latest edit: 'آخر تغيير %{ago}:'
       email address: 'عنوان البريد الإلكتروني:'
-      created from: 'Ø£Ù\8fÙ\86Ø´Ù\89Ø¡ من:'
+      created from: 'Ø£Ù\8fÙ\86Ø´Ù\90ئ من:'
       status: 'الحالة:'
       spam score: 'نتيجة السخام:'
       description: الوصف
-      user location: الموقع
-      if set location: عين موقعك على صفحة %{settings_link} لرؤية المستخدمون القريبون
+      user location: موقع المستخدم
+      if set location: قم بتعيين موقعك على صفحة %{settings_link} لرؤية المستخدمون
+        القريبين
       settings_link_text: إعدادات
       my friends: أصدقائي
       no friends: لم تقم بإضافة أي أصدقاء بعد.
       km away: على بعد %{count}كم
       m away: على بعد %{count}متر
-      nearby users: 'مستخدمين أيضًا بالجوار:'
+      nearby users: مستخدمون آخرون قريبون
       no nearby users: لا يوجد بعد المزيد من المستخدمين أفصحوا عن تخطيطهم بالجوار.
       role:
         administrator: هذا المستخدم إداري
-        moderator: Ù\87ذا Ø§Ù\84Ù\85ستخدÙ\85 Ù\88سÙ\8aØ·
+        moderator: Ù\87ذا Ø§Ù\84Ù\85ستخدÙ\85 Ù\85شرÙ\81
         grant:
           administrator: منح وصول إداري
-          moderator: Ù\85Ù\86Ø­ Ù\88صÙ\88Ù\84 Ù\88سÙ\8aØ·
+          moderator: Ù\85Ù\86Ø­ Ù\88صÙ\88Ù\84 Ù\85شرÙ\81
         revoke:
-          administrator: Ø§Ø¨Ø·ل وصول إداري
-          moderator: Ø§Ø¨Ø·Ù\84 Ù\88صÙ\88Ù\84 Ù\88سÙ\8aØ·
-      block_history: Ø§Ù\84عرÙ\82Ù\84ات المفعلة
-      moderator_history: ' العرقلات المعطاة'
+          administrator: Ø¥Ø¨Ø·Ø§ل وصول إداري
+          moderator: Ø¥Ø¨Ø·Ø§Ù\84 Ù\88صÙ\88Ù\84 Ù\85شرÙ\81
+      block_history: Ø¹Ù\85Ù\84Ù\8aات Ø§Ù\84Ù\85Ù\86ع المفعلة
+      moderator_history: عمليات المنع المعطاة
       comments: التعليقات
       create_block: امنع هذا المستخدم
-      activate_user: نشّط هذا المستخدم
-      deactivate_user: Ø§Ø­Ø°Ù\81 هذا المستخدم
+      activate_user: Ù\86Ø´Ù\90Ù\91Ø· Ù\87ذا Ø§Ù\84Ù\85ستخدÙ\85
+      deactivate_user: ØªØ¹Ø·Ù\8aÙ\84 هذا المستخدم
       confirm_user: تأكيد هذا المستخدم
       hide_user: اخفِ هذا المستخدم
       unhide_user: أظهر هذا المستخدم
       delete_user: احذف هذا المستخدم
-      confirm: Ø£Ù\83Ù\91د
-      friends_changesets: تصفح كل حزم التغييرات من قبل الأصدقاء
-      friends_diaries: تصفح جميع مدخلات مدونات الأصدقاء
-      nearby_changesets: ØªØµÙ\81Ø­ Ù\83Ù\84 Ø­Ø²Ù\85 Ø§Ù\84تغÙ\8aÙ\8aرات Ù\85Ù\86 Ù\82بÙ\84 Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\82رÙ\8aبÙ\88ن
-      nearby_diaries: ØªØµÙ\81Ø­ Ø¬Ù\85Ù\8aع Ù\85دخÙ\84ات Ù\85دÙ\88Ù\86ات Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ù\81Ù\8a Ø§Ù\84Ù\82رÙ\8aبÙ\88ن
-      report: أبلغ عن هذه المستخدم
+      confirm: ØªØ£Ù\83Ù\8aد
+      friends_changesets: مجموعات تغييرات الأصدقاء
+      friends_diaries: مدخلات مدونات الأصدقاء
+      nearby_changesets: Ø­Ø²Ù\85 ØªØºÙ\8aÙ\8aرات Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\82رÙ\8aبÙ\8aن
+      nearby_diaries: Ø¥Ø¯Ø®Ø§Ù\84ات Ù\8aÙ\88Ù\85Ù\8aات Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\82رÙ\8aبÙ\8aن
+      report: أبلغ عن هذا المستخدم
     popup:
       your location: مكانك
       nearby mapper: مخطط بالجوار
       friend: صديق
     account:
-      title: Ø¹Ø¯Ù\91Ù\84 Ø§Ù\84حساب
+      title: عدل الحساب
       my settings: إعداداتي
       current email address: 'عنوان البريد الإلكرتروني الحالي:'
       new email address: 'عنوان البريد الإلكتروني الجديد:'
@@ -2160,36 +2159,38 @@ ar:
       external auth: 'مصادقة خارجية:'
       openid:
         link: http://wiki.openstreetmap.org/wiki/OpenID
-        link text: ما هذا ؟
+        link text: ما هذا؟
       public editing:
         heading: 'تعديل عام:'
-        enabled: Ù\85Ù\81عÙ\91Ù\84. غير مجهول ويمكنك تعديل البيانات.
+        enabled: Ù\85Ù\81عÙ\8eÙ\91Ù\84Ø\8c غير مجهول ويمكنك تعديل البيانات.
         enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
         enabled link text: ما هذا؟
         disabled: مُعطل ولا يمكن تعديل البيانات، جميع التعديلات السابقة مجهولة الهوية.
         disabled link text: لماذا لا أستطيع التعديل؟
       public editing note:
         heading: تعديل عام
-        text: حاليًا تعديلاتك تظهر بشكل مجهول ولا يمكن للناس إرسال رسائل لك أو رؤية
-          موقعك. لإظهار ما قمت بتعديله وللسماح للناس بالاتصال بك من خلال الموقع، انقر
-          Ø¹Ù\84Ù\89 Ø§Ù\84زر Ø£Ø¯Ù\86اÙ\87. <b>Ù\85Ù\86Ø° Ø§Ù\84تغÙ\8aÙ\8aر Ø¥Ù\84Ù\89 Ø§Ù\84Ø£Ù\8a Ø¨Ù\8a Ø£Ù\8a 0.6Ø\8c Ù\81Ù\82Ø· Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84عÙ\84Ù\86Ù\8aÙ\8aÙ\86
-          يمكنه تحرير بيانات الخريطة</b>. (<a href="http://wiki.openstreetmap.org/wiki/Anonymous_edits">لمعرفة
-          السبب</a>). <ul><li>عنوانك البريدي لن يكشف به علنّا.</li><li>هذا الإجراء
-          Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¹Ù\83سÙ\87 Ù\88جÙ\85Ù\8aع Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84جدÙ\8aد Ø¹Ù\84Ù\86Ù\8aÙ\8aÙ\86 Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\8a.</li></ul>
+        text: في الوقت الحالي، تعديلاتك مجهولة الهوية ولا يمكن للأشخاص إرسال رسائل
+          إليك أو الاطلاع على موقعك، لإظهار ما قمت بتحريره والسماح للأشخاص بالاتصال
+          Ø¨Ù\83 Ø¹Ø¨Ø± Ù\85Ù\88Ù\82ع Ø§Ù\84Ù\88Ù\8aب; Ø§Ù\86Ù\82ر Ù\81Ù\88Ù\82 Ø§Ù\84زر Ø£Ø¯Ù\86اÙ\87<b>Ù\85Ù\86Ø° ØªØºÙ\8aÙ\8aر Ù\88اجÙ\87Ø© Ø¨Ø±Ù\85جة Ø§Ù\84تطبÙ\8aÙ\82ات
+          0.6، لا يمكن سوى للمستخدمين العموميين تعديل بيانات الخريطة</b>. (<a href="https://wiki.openstreetmap.org/wiki/Anonymous_edits">اكتشف
+          السبب</a>).<ul><li>لن يتم الكشف عن عنوان بريدك الإلكتروني من خلال جعله عاما.</li><li>لا
+          Ù\8aÙ\85Ù\83Ù\86 Ø¹Ù\83س Ù\87ذا Ø§Ù\84إجراء Ù\88أصبح Ø¬Ù\85Ù\8aع Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84جدد Ø¹Ø§Ù\85Ù\8aÙ\86 Ø§Ù\81تراضÙ\8aا.</li></ul>
       contributor terms:
         heading: 'شروط المساهم:'
-        agreed: لقد وافقتَ على شروط المساهم الجديدة.
+        agreed: لقد وافقت على شروط المساهم الجديدة.
         not yet agreed: لم توافق بعد على شروط المساهم الجديدة.
-        review link text: يرجى اتباع هذا الرابط في الوقت الذي يناسبك لمراجعة وقبول
+        review link text: يُرجَى اتباع هذا الرابط في الوقت الذي يناسبك لمراجعة وقبول
           شروط المساهمة الجديدة.
-        agreed_with_pd: وقد أعلنتَ أيضًا أنك تعتبر تعديلاتك ملكية عامة.
+        agreed_with_pd: وقد أعلنت أيضًا أنك تعتبر تعديلاتك ملكية عامة.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: ما هذا؟
       profile description: 'وصف الملف الشخصي:'
-      preferred languages: 'اÙ\84Ù\84غات Ø§Ù\84Ù\85Ù\81ضÙ\91Ù\84Ø©:'
+      preferred languages: 'اللغات المفضلة:'
       preferred editor: 'المحرر المفضل:'
       image: "\uFEFFالصورة:"
       gravatar:
         gravatar: استخدام Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: ما هذا؟
         disabled: تم تعطيل Gravatar .
         enabled: تم تمكين عرض Gravatar الخاص بك.
@@ -2202,12 +2203,12 @@ ar:
       no home location: لم تدخل موقع منزلك.
       latitude: 'خط العرض:'
       longitude: 'خط الطول:'
-      update home location on click: Ø­Ø¯Ù\91ث موقع المنزل عندما أنقر على الخريطة؟
+      update home location on click: ØªØ­Ø¯Ù\8aث موقع المنزل عندما أنقر على الخريطة؟
       save changes button: احفظ التغييرات
       make edits public button: اجعل جميع تعديلاتي عامة
       return to profile: العودة إلى الملف الشخصي
-      flash update success confirm needed: تم تحديث معلومات المستخدم بنجاح. تحقق من
-        بريدك الإلكتروني لمذكرة تأكيد العنوان الإلكتروني الجديد.
+      flash update success confirm needed: تم تحديث معلومات المستخدم بنجاح، تحقق من
+        بريدك الإلكتروني لملاحظة تأكيد العنوان الإلكتروني الجديد.
       flash update success: تم تحديث معلومات المستخدم بنجاح.
     confirm:
       heading: تحقق من بريدك الإلكتروني
@@ -2215,54 +2216,54 @@ ar:
       introduction_2: أكد حسابك عن طريق النقر على الرابط في البريد الإلكتروني وستكون
         قادرا على البدء في رسم الخرائط.
       press confirm button: اضغط على زر التأكيد أدناه لتنشيط حسابك.
-      button: Ø£Ù\83Ù\91د
+      button: ØªØ£Ù\83Ù\8aد
       success: تم تأكيد حسابك، شكرًا للاشتراك!
       already active: هذا الحساب سبق أن تم تأكيده.
       unknown token: رمز التأكيد انتهت صلاحيته أو غير موجود.
-      reconfirm_html: إذا كنت في حاجة لإعادة إرسال تأكيد البريد الإلكتروني، email
-        <a href="%{reconfirm}">انقر هنا</a>.
+      reconfirm_html: إذا كنت في حاجة لإعادة إرسال تأكيد البريد الإلكتروني، <a href="%{reconfirm}">انقر
+        هنا</a>.
     confirm_resend:
       success: لقد أرسلنا رسالة تأكيد جديدة إلى %{email} وبمجرد تأكيد حسابك ستتمكن
-        من رسم الخرائط. <br /> <br /> إذا كنت تستخدم نظامًا مضادًا للبريد العشوائي
-        يرسل طلبات تأكيد ، فيرجى تأكد من أنك القائمة البيضاء %{sender} لأننا غير قادرين
-        على الرد على أي طلبات تأكيد.
+        من رسم الخرائط.<br /><br />إذا كنت تستخدم نظاما مضادا للبريد العشوائي يرسل
+        طلبات تأكيد، فيُرجَى التأكد من أنك وضعت في القائمة البيضاء %{sender} لأننا
+        ØºÙ\8aر Ù\82ادرÙ\8aÙ\86 Ø¹Ù\84Ù\89 Ø§Ù\84رد Ø¹Ù\84Ù\89 Ø£Ù\8a Ø·Ù\84بات ØªØ£Ù\83Ù\8aد.
       failure: المستخدم %{name} غير موجود.
     confirm_email:
-      heading: أكّد تغيير عنوان البريد الإلكتروني
+      heading: أكد تغيير عنوان البريد الإلكتروني
       press confirm button: اضغط على زر تأكيد أدناه لتأكيد عنوان بريدك الإلكتروني
         الجديد.
-      button: Ø£Ù\83Ù\91د
-      success: تم تأكيد عنوان بريدك الإلكتروني، شكرًا للاشتراك!
-      failure: عنوان بريد إلكتروني تم تفعيله مسبقًا بهذا النموذج.
+      button: ØªØ£Ù\83Ù\8aد
+      success: تم تأكيد عنوان بريدك الإلكتروني!
+      failure: عنوان بريد إلكتروني تم تفعيله مسبقًا بهذا الرمز.
       unknown_token: رمز التأكيد انتهت صلاحيته أو غير موجود.
     set_home:
-      flash success: موقع المنزل حُفظ بنجاح
+      flash success: موقع المنزل حُفِظ بنجاح
     go_public:
       flash success: جميع تعديلاتك الآن عامة، ومسموح لك بالتعديل الآن.
     make_friend:
       heading: إضافة %{user} كصديق؟
       button: أضف كصديق
       success: '%{name} الآن صديقك.'
-      failed: عفوًا، تعذر إضافة %{name} كصديق.
-      already_a_friend: حاليًا أنت و %{name} أصدقاء.
+      failed: عفوًا، تعذرت إضافة %{name} كصديق.
+      already_a_friend: حاليًا أنت و%{name} أصدقاء.
     remove_friend:
-      heading: ØºÙ\8aر ØµØ¯Ù\8aÙ\82 %{user}؟
-      button: Ø§لغاء الصداقة
-      success: تم إزالة %{name} من قائمة أصدقائك.
-      not_a_friend: '%{name} ليس من أحد أصدقائك.'
+      heading: Ø¥Ù\84غاء ØµØ¯Ø§Ù\82Ø© %{user}؟
+      button: Ø¥لغاء الصداقة
+      success: تمت إزالة %{name} من قائمة أصدقائك.
+      not_a_friend: '%{name} ليس أحد أصدقائك.'
     filter:
-      not_an_administrator: عليك أن تكون إداري لتنفيذ هذا الإجراء.
+      not_an_administrator: عليك أن تكون إداريا لتنفيذ هذا الإجراء.
     index:
       title: المستخدمون
       heading: المستخدمون
       showing:
-        one: صفحة%{page} (%{first_item} %{items})
-        other: صفحة %{page} (%{first_item}-%{last_item} %{items})
+        one: صفحة %{page} (%{first_item} من %{items})
+        other: صفحة %{page} (%{first_item}-%{last_item} من %{items})
       summary: '%{name} تم إنشاؤها من %{ip_address} في %{date}'
-      summary_no_ip: '%{name} تم إنشاؤها في %{date}'
+      summary_no_ip: '%{name} تم إنشاؤه في %{date}'
       confirm: تأكيد المستخدمين المحددين
       hide: إخفاء المستخدمين المحددين
-      empty: لا سجلات مطابقة تم العثور عليها!
+      empty: لم يتم العثور على مستخدمين متطابقين
     suspended:
       title: حساب معلق
       heading: حساب معلق
@@ -2278,12 +2279,13 @@ ar:
       unknown_signature_algorithm: خوارزمية توقيع غير معروفة
       invalid_scope: نطاق غير صالح
     auth_association:
-      heading: لم يرتبط اسم المستخدم الخاص بك بحساب خريطة الشارع المفتوحة حتى الآن.
-      option_1: إذا كنت جديدا في خريطة الشارع المفتوح، الرجاء إنشاء حساب جديد باستخدام
-        النموذج أدناه.
-      option_2: إذا كان لديك بالفعل حساب، يمكنك الدخول إلى حسابك باستخدام اسم المستخدم
-        وكلمة المرور الخاصة بك ومن ثم ربط الحساب باسم المستخدم الخاص بك في إعدادات
-        المستخدم.
+      heading: لم يرتبط معرفك بحساب خريطة الشارع المفتوحة حتى الآن.
+      option_1: |-
+        إذا كنت جديدا في خريطة الشارع المفتوح، الرجاء إنشاء حساب جديد
+        باستخدام النموذج أدناه.
+      option_2: "إذا كان لديك حساب بالفعل، فيمكنك تسجيل الدخول إلى حسابك \nباستخدام
+        اسم المستخدم وكلمة المرور الخاصة بك، ثم ربط الحساب \nبمعرفك في إعدادات المستخدم
+        الخاصة بك."
   user_role:
     filter:
       not_an_administrator: يحق فقط للإداريين القيام بتغيير دور المستخدم، وأنت لست
@@ -2546,17 +2548,17 @@ ar:
         offramp_right: اسلك الطريق المنحدر على اليمين
         offramp_right_with_exit: اسلك المخرج %{exit} على اليسار
         offramp_right_with_exit_name: اسلك المخرج %{exit} على اليمين إلى %{name}
-        offramp_right_with_exit_directions: اسلك المخرج%{exit} على اليمين نحو%{directions}
-        offramp_right_with_exit_name_directions: اسلك المخرج%{exit} على اليسار باتجاه%{name}
-          ، نحو%{directions}
+        offramp_right_with_exit_directions: اسلك المخرج %{exit} على اليمين نحو %{directions}
+        offramp_right_with_exit_name_directions: اسلك المخرج %{exit} على اليسار باتجاه
+          %{name}، نحو %{directions}
         offramp_right_with_name: خذ الطريق المنحدرة إلى اليمين باتجاه %{name}
-        offramp_right_with_directions: اسلك الطريق المنحدر نحو اليمين نحو%{directions}
-        offramp_right_with_name_directions: اسلك الطريق المنحدر إلى اليمين في%{name}
-          ، نحو%{directions}
+        offramp_right_with_directions: اسلك الطريق المنحدر نحو اليمين نحو %{directions}
+        offramp_right_with_name_directions: اسلك الطريق المنحدر إلى اليمين في %{name}،
+          نحو %{directions}
         onramp_right_without_exit: اتجه يمينا على منحدر إلى %{name}
         onramp_right_with_directions: اتجه إلى اليمين باتجاه المنحدر نحو %{directions}
-        onramp_right_with_name_directions: الاتجاه يمينًا على المنحدر نحو%{name} ،
-          نحو%{directions}
+        onramp_right_with_name_directions: الاتجاه يمينًا على المنحدر نحو %{name}،
+          نحو %{directions}
         onramp_right_without_directions: استدر يمينًا على المنحدر
         onramp_right: استدر يمينًا على المنحدر
         endofroad_right_without_exit: في نهاية الطريق انعطف يمينا إلى %{name}
@@ -2565,7 +2567,7 @@ ar:
         turn_right_without_exit: انعطف يمينا إلى %{name}
         sharp_right_without_exit: إلى أقصى اليمين في%{name}
         uturn_without_exit: انعطف على طول %{name}
-        sharp_left_without_exit: إلى أقصى اليسار نحو%{name}
+        sharp_left_without_exit: إلى أقصى اليسار نحو %{name}
         turn_left_without_exit: انعطف يسارا إلى %{name}
         offramp_left: اسلك الطريق المنحدر على اليسار
         offramp_left_with_exit: اسلك المخرج %{exit} على اليسار
@@ -2619,7 +2621,7 @@ ar:
       relation: علاقة
       nothing_found: لم يتم إيجاد ميزات
       error: 'خطأ في الاتصال %{server}: %{error}'
-      timeout: مهلة الاتصال %{server}
+      timeout: Ù\86Ù\81ذت Ù\85Ù\87Ù\84Ø© Ø§Ù\84اتصاÙ\84 %{server}
     context:
       directions_from: الاتجاهات من هنا
       directions_to: الاتجاهات إلى هنا
@@ -2635,8 +2637,8 @@ ar:
       title: تحرير التنقيح
     index:
       empty: لا يوجد تنقيح لإظهاره.
-      heading: قائمة التنقيح
-      title: قائمة التنقيح
+      heading: قائمة التنقيحات
+      title: قائمة التنقيحات
     new:
       description: الوصف
       heading: أدخل معلومات عن التنقيح الجديد
index d639c0a1fcf04a6c896e13e7b4f2f1a51aaec1e6..57cb37b091a179b7b0542c87f8589460ce510a9e 100644 (file)
@@ -75,7 +75,7 @@ arz:
         pass_crypt: كلمه المرور
   browse:
     changeset:
-      title: حزمه التغييرات
+      title: 'حزمه التغييرات: %{id}'
       changesetxml: حزمه التغييرات إكس إم إل
       osmchangexml: osmChange XML
       feed:
@@ -101,10 +101,10 @@ arz:
       load_data: تحميل البيانات
       loading: تحميل...
     tag_details:
-      tags: 'الوسوم:'
+      tags: الوسوم
   changeset:
     changeset_paging_nav:
-      showing_page: Ø¥Ø¸Ù\87ار Ø§Ù\84صÙ\81Ø­Ù\87 %{page}
+      showing_page: الصفحه %{page}
       next: التالى »
       previous: «السابق
     changeset:
@@ -526,17 +526,17 @@ arz:
   layouts:
     logo:
       alt_text: شعار خريطه الشارع المفتوحة
-    home: Ø§Ù\84صÙ\81Ø­Ù\87 Ø§Ù\84رئÙ\8aسÙ\8aØ©
+    home: Ø±Ù\88Ø­ Ù\84Ù\84صÙ\81Ø­Ù\87 Ø§Ù\84رئÙ\8aسÙ\8aÙ\87
     logout: اخرج
     log_in: دخول
     log_in_tooltip: سجّل الدخول مع حساب موجود
-    sign_up: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ù\8bا
+    sign_up: Ø§Ø¹Ù\85Ù\84 Ø­Ø³Ø§Ø¨
     sign_up_tooltip: أنشئ حسابًا كى تستطيع المساهمة
     edit: عدّل هذه الخريطة
     history: تاريخ
     export: صدِّر
     gps_traces: آثار جى بى أس
-    gps_traces_tooltip: Ø¹Ø§Ù\84ج Ø§Ù\84آثار
+    gps_traces_tooltip: Ø§ØªØ­Ù\83Ù\85 Ù\81Ù\89 Ø§Ø«Ø§Ø± GPS
     user_diaries: يوميات المستخدمين
     user_diaries_tooltip: اعرض يوميات المستخدمين
     tag_line: ويكى خريطه العالم الحرة
@@ -581,7 +581,7 @@ arz:
         loaded_successfully: تم تحميل بنجاح %{trace_points} نقطه من أصل %{possible_points}
           نقطه ممكنه.
     signup_confirm:
-      subject: '[خريطه الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني'
+      subject: '[خريطه الشارع المفتوحه] اهلا بيك فى اوبن ستريت ماب'
     email_confirm:
       subject: '[خريطه الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني'
     email_confirm_plain:
@@ -918,7 +918,7 @@ arz:
       flash: تم تحديث معلومات العميل بنجاح
     destroy:
       flash: دمّر تسجيل التطبيق
-  user:
+  users:
     login:
       title: ولوج
       heading: ولوج
@@ -948,7 +948,7 @@ arz:
       flash changed: كلمه المرور الخاصه بك قد تغيرت.
       flash token bad: لم تجد تلك المعلومات، تحقق من الرابط ربما؟
     new:
-      title: Ø£Ù\86شئ حساب
+      title: Ø§Ø¹Ù\85Ù\84 حساب
       no_auto_account_create: للأسف نحن غير قادرين فى الوقت الحالى على إنشاء حساب
         لك تلقائيًا.
       contact_webmaster: يرجى الاتصال <a href="mailto:webmaster@openstreetmap.org">بمسؤول
@@ -1028,7 +1028,7 @@ arz:
       public editing:
         heading: 'تعديل عام:'
         enabled: مفعّل. غير مجهول ويمكنك تعديل البيانات.
-        enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits
+        enabled link: https://wiki.openstreetmap.org/wiki/Anonymous_edits
         enabled link text: ما هذا؟
         disabled: مُعطل ولا يمكن تعديل البيانات، جميع التعديلات السابقه مجهوله الهويه.
         disabled link text: لماذا لا أستطيع التعديل؟
@@ -1054,7 +1054,7 @@ arz:
         بريدك الإلكترونى لمذكره تأكيد العنوان الإلكترونى الجديد.
       flash update success: تم تحديث معلومات المستخدم بنجاح.
     confirm:
-      heading: Ø£Ù\83Ù\91د Ø­Ø³Ø§Ø¨ Ø§Ù\84Ù\85ستخدÙ\85
+      heading: Ø±Ø§Ø¬Ø¹ Ø§Ù\8aÙ\85Ù\8aÙ\84Ù\83!
       press confirm button: اضغط على زر التأكيد أدناه لتنشيط حسابك.
       button: أكّد
       success: تم تأكيد حسابك، شكرًا للاشتراك!
@@ -1063,14 +1063,14 @@ arz:
       press confirm button: اضغط على زر تأكيد أدناه لتأكيد عنوان بريدك الإلكترونى
         الجديد.
       button: أكّد
-      success: ØªÙ\85 ØªØ£Ù\83Ù\8aد Ø¹Ù\86Ù\88اÙ\86 Ø¨Ø±Ù\8aدÙ\83 Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\89Ø\8c Ø´Ù\83رÙ\8bا Ù\84Ù\84اشتراÙ\83!
+      success: ØªÙ\85 ØªØ£Ù\83Ù\8aد ØªØºÙ\8aÙ\8aر Ø¹Ù\86Ù\88اÙ\86 Ø¨Ø±Ù\8aدÙ\83 Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\89!
       failure: عنوان بريد إلكترونى تم تفعيله مسبقًا بهذه البيانات.
     set_home:
       flash success: موقع المنزل حُفظ بنجاح
     go_public:
       flash success: جميع تعديلاتك الآن عامه، ومسموح لك بالتعديل الآن.
     make_friend:
-      success: '%{name} الآن صديقك.'
+      success: '%{name} الآن صديقك!'
       failed: عفوًا، تعذر إضافه %{name} كصديق.
       already_a_friend: حاليًا أنت و %{name} أصدقاء.
     remove_friend:
index 2097458e9d1772e455bbb251012e12a0e34dfb68..1d50d1a9c28ce43ea2c1ec65978de526e29315b0 100644 (file)
@@ -1061,10 +1061,7 @@ ast:
     intro_text: OpenStreetMap ye un mapa del mundu, creáu por persones como tu y d'usu
       llibre baxo una llicencia abierta.
     intro_2_create_account: Crear una cuenta d'usuariu
-    partners_html: L'agospiamientu tien l'encontu de %{ucl}, %{bytemark}, %{ic}, y
-      otros %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College de Londres
     partners_bytemark: Bytemark Hosting
     partners_partners: asociaos
     osm_offline: La base de datos d'OpenStreetMap anguaño ta desconectada mentanto
@@ -1365,6 +1362,9 @@ ast:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> y
           Land Tirol (baxo <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT con enmiendes</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Contien datos de barrios basaos en datos de Australian Bureau of
+          Statistics.
         contributors_ca_html: |-
           <strong>Canadá</strong>: Contien datos de GeoBase&reg;, GeoGratis (&copy; Department of Natural
           Resources Canada), CanVec (&copy; Department of Natural
@@ -1932,7 +1932,7 @@ ast:
       flash: S'anovó la información del cliente correutamente
     destroy:
       flash: Se destruyó'l rexistru de l'aplicación cliente
-  user:
+  users:
     login:
       title: Entrar
       heading: Entrar
index 02184723dd56c25775e1218e135ae21a8c6d41c7..a7a01cdd2ac7eb6bd62fdbe3aaea0c5d54f2e98d 100644 (file)
@@ -770,7 +770,6 @@ az:
     edit_with: '%{editor} köməyi ilə dəyişdir'
     tag_line: Azad Viki Dünya Xəritəsi
     intro_2_create_account: İstifadəçi hesabı yarat
-    partners_ic: London İmperial Kolleci tərəfindən
     partners_bytemark: Bytemark Hosting
     partners_partners: partnyorlar
     help: Kömək
@@ -1031,7 +1030,7 @@ az:
       revoke: Ləğv et!
     form:
       name: Ad
-  user:
+  users:
     login:
       title: Daxil olun
       heading: Daxil olun
index 7e318eabf913cd2cf7e3dae2868c9e7500e33706..b9b90f23aaadaf6e5db94bd422b6bb36f5c50e61 100644 (file)
@@ -1,4 +1,4 @@
-# Messages for Belarusian (Taraškievica orthography) (беларуская (тарашкевіца)‎)
+# Messages for be-tarask (be-tarask)
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: EugeneZelenko
@@ -667,9 +667,7 @@ be-Tarask:
     edit_with: Рэдагаваць праз %{editor}
     tag_line: Вольная Wiki-мапа сьвету
     intro_2_create_account: Стварыце рахунак
-    partners_html: Гостынг падтрымліваецца %{ucl}, %{bytemark}, %{ic} і іншымі %{partners}.
     partners_ucl: UCL
-    partners_ic: Лёнданскім імпэрскім каледжам
     osm_offline: База зьвестак OpenStreetMap у цяперашні момант недаступная, таму
       што праводзяцца неабходныя тэхнічныя работы.
     osm_read_only: База зьвестак OpenStreetMap у цяперашні момант даступная толькі
@@ -870,6 +868,9 @@ be-Tarask:
           <strong>Аўстрыя</strong>: утрымлівае зьвесткі <a href="https://data.wien.gv.at/">гораду Вены</a> (на ўмовах
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), а таксама земляў <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Форарльбэрг</a> і
           Тыроль (на ўмовах <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT з дапаўненьнямі</a>).
+        contributors_au_html: |-
+          <strong>Аўстралія</strong>: Утрымлівае зьвесткі пра прыгарады ад
+          Аўстралійскага бюро статыстыкі.
         contributors_ca_html: |-
           <strong>Канада</strong>: Утрымлівае зьвесткі
           GeoBase&reg;, GeoGratis (&copy; Дэпартамэнта прыродных рэсурсаў
@@ -1212,7 +1213,7 @@ be-Tarask:
       flash: Кліенцкая інфармацыя была абноўленая пасьпяхова
     destroy:
       flash: Зьнішчаная рэгістрацыя кліенцкага дастасаваньня
-  user:
+  users:
     login:
       title: Увайсьці
       heading: Уваход
index a4c7534e3592440c9d7c48c3dd1100b2e4e984af..4b3a4e68d0c96dc0d1f4e1475668c92624b2e97f 100644 (file)
@@ -883,9 +883,7 @@ be:
     intro_text: OpenStreetMap - гэта карта свету, створаная людзьмі, як вы, і бясплатная
       для выкарыстання на ўмовах адкрытай ліцэнзіі.
     intro_2_create_account: Стварыць рахунак удзельніка
-    partners_html: Хостынг падтрымліваецца %{ucl}, %{ic} і %{bytemark}, і іншымі %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: партнёрамi
     osm_offline: База дадзеных OpenStreetMap зараз па-за сецівам, таму што праходзіць
@@ -1743,7 +1741,7 @@ be:
       flash: Кліенцкая інфармацыя была абноўленая паспяхова
     destroy:
       flash: Знішчаная рэгістрацыя кліенцкага дастасавання
-  user:
+  users:
     login:
       title: Уваход
       heading: Уваход
index 0bda033b4c9e5d32adddae7765874a769250b4bc..6299b5c5ce7cd5f7e4abdf16eccbf070e817f662 100644 (file)
@@ -1058,7 +1058,7 @@ bg:
     form:
       name: Име
       allow_write_api: промяна на картата.
-  user:
+  users:
     login:
       title: Вписване
       heading: Вписване
index 06d64ad79d11ff2636e9502ec83b9f024cd38fd6..b248348721fc0fc2c513577adf00b34524b45bd4 100644 (file)
@@ -858,10 +858,7 @@ bn:
     intro_text: ওপেনস্ট্রীটম্যাপ বিশ্বের, একটি মানচিত্র; যা আপনার মতো মানুষের দ্বারা
       নির্মিত এবং এটি মুক্ত লাইসেন্সের অধীনে বিনামূল্যে ব্যবহারযোগ্য।
     intro_2_create_account: একটি ব্যবহারকারী অ্যাকাউন্ট তৈরি করুন
-    partners_html: হোস্টিং %{ucl}, %{bytemark}, %{ic}, এবং অন্যান্য %{partners} কর্তৃক
-      সমর্থিত।
     partners_ucl: UCL
-    partners_ic: ইম্পেরিয়াল মহাবিদ্যালয় লন্ডন
     partners_partners: সহযোগীগণ
     help: সাহায্য
     about: পরিচিতি
@@ -1269,7 +1266,7 @@ bn:
       issued_at: অনুমোদনের তারিখ
     form:
       name: নাম
-  user:
+  users:
     login:
       title: প্রবেশ
       heading: প্রবেশ
index b54b26ce4b49688f82239c119b2665d6cfe53db9..faf77a5151b7908f7ecb83adb1e95a54699c682b 100644 (file)
@@ -336,7 +336,7 @@ br:
         pennadoù deizlevr-mañ
       post: Postañ
       when: Peur
-      comment: Addipleg
+      comment: Addispleg
       ago: '%{ago} zo'
       newer_comments: Evezhiadennoù nevesoo'h
       older_comments: Evezhiadennoù koshañ
@@ -636,6 +636,7 @@ br:
           water_park: Kreizenn dour
           "yes": Diduamantoù
         man_made:
+          adit: Toullenn moned d'ar mengleuz
           beacon: Tour-tan
           beehive: Ruskenn
           breakwater: Diwagenner
@@ -719,7 +720,7 @@ br:
           accountant: Kontour
           administrative: Melestradur
           architect: Ti-savour
-          association: kevredigezh
+          association: Kevredigezh
           company: Embregerezh
           educational_institution: Ensavadur desavadurel
           employment_agency: Ajañs evit al labour
@@ -933,6 +934,55 @@ br:
     results:
       no_results: N'eus bet kavet respont ebet
       more_results: Muioc'h a zisoc'hoù
+  issues:
+    index:
+      title: Kudennoù
+      select_status: Diuzañ ur statud
+      select_last_updated_by: Diuzañ an hizivadenn diwezhañ gant
+      not_updated: Nann hizvivaet
+      search: Klask
+      search_guidance: 'Kudennoù enklask :'
+      user_not_found: N'eus ket eus an implijer
+      status: Statud
+      reports: Danevelloù
+      last_updated: Hizivaet da ziwezhañ
+      last_updated_time_html: <abbr title='%{title}'>%{time} zo</abbr>
+      last_updated_time_user_html: <abbr title='%{title}'>%{time} zo</abbr> by %{user}
+      link_to_reports: Gwelet an danevelloù
+      reports_count:
+        one: 1 Danevell
+        other: '%{count} Danevelloù'
+      states:
+        ignored: Lezet a-gostez
+        open: Digor
+        resolved: Diskoulmet
+    update:
+      new_report: Enrollet mat eo bet ho tanevell
+      successful_update: Hizivaet mat eo bet ho tanevell
+    show:
+      title: '%{status} Kudenn #%{issue_id}'
+      reports:
+        zero: Danevell ebet
+        one: 1 rapport
+        other: '%{count} danevelloù'
+      resolve: Diskoulmañ
+      ignore: Lezel a-gostez
+      reopen: Addigeriñ
+      read_reports: Lenn an danevelloù
+      new_reports: Danevelloù nevez
+      other_issues_against_this_user: Kudennoù all a sell ouzh an implijer-mañ
+      no_other_issues: Kudenn all ebet gant an implijer-mañ.
+      comments_on_this_issue: Displegadennoù war ar gudenn-mañ
+    comments:
+      created_at: D'an %{datetime}
+    reports:
+      updated_at: D'an %{datetime}
+    helper:
+      reportable_title:
+        note: 'Notenn #%{note_id}'
+  issue_comments:
+    create:
+      comment_created: Krouet mat eo bet hoc'h evezhiadenn.
   layouts:
     logo:
       alt_text: Logo OpenStreetMap
@@ -958,10 +1008,7 @@ br:
     intro_text: Ur gartenn eus ar bed eo OprenStreetMap, krouet gant tud eveldoc'h
       ha frank hec'h implij dindan un aotre-implij digor.
     intro_2_create_account: Krouiñ ur gont implijer
-    partners_html: '%{ucl}, %{ic}, %{bytemark}, ha %{partners} all a ra war-dro an
-      herberc''hiañ.'
     partners_ucl: ↓"Universiy College" Londrez
-    partners_ic: Skolaj impalaerel Londrez
     partners_bytemark: ↓Herberc'hiañ Bytemark
     partners_partners: Kevelourien
     osm_offline: Ezlinenn eo diaz roadennoù OpenStreetMap evit bremañ e-pad ma pleder
@@ -1285,6 +1332,9 @@ br:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> ha
           Land Tirol (dindan <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT gant enkemmadoù</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Ennañ ar roadennoù diwar-benn an bannlevioù
+             diazezet war roadennoù Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Kanada</strong> : Ennañ roadennoù eus
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1829,7 +1879,7 @@ br:
       flash: Hizivaet eo bet titouroù an arval
     destroy:
       flash: Distrujet eo bet marilhadur an arload arval
-  user:
+  users:
     login:
       title: Kevreañ
       heading: Kevreañ
index 18a59d31117b45e46271349fa049e8cc5a5732f2..31f2224b0ab7add03a9ed3cef130ff56c6e6cdd9 100644 (file)
@@ -806,10 +806,7 @@ bs:
     intro_text: OpenStreetMap predstavlja mapu svijeta, kreiranu od strane ljudi kao
       što ste vi i može se besplatno koristiti.
     intro_2_create_account: Napravite korisnički račun
-    partners_html: Hosting je podržan od strane %{ucl}, %{ic} i %{bytemark}, i drugih
-      %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnera
     osm_offline: OpenStreetMap baza podataka je trenutno nedostupna dok se ne završe
@@ -1439,7 +1436,7 @@ bs:
       flash: Informacije o klijentu uspješno osvježene
     destroy:
       flash: Uništena registracija klijent aplikacije
-  user:
+  users:
     login:
       title: Prijava
       heading: Prijava
index 97d1ff9e1ea7b2aa68e1657a289cd868ed22f47c..3a9caae9d3e87c103537addfe5a619f032ec4ac0 100644 (file)
@@ -970,10 +970,7 @@ ca:
     intro_text: L'OpenStreetMap és un mapa del món, creat per persones com tu i d'ús
       lliure sota una llicència oberta.
     intro_2_create_account: Crea un compte d'usuari
-    partners_html: L'allotjament és a càrrec de %{ucl}, %{ic}, %{bytemark} i d'altres
-      %{partners}.
     partners_ucl: el Centre UCL VR
-    partners_ic: Imperial College Londres
     partners_bytemark: Allotjament Bytemark
     partners_partners: socis
     osm_offline: La base de dades OpenStreetMap és fora de línia, mentre es fan actuacions
@@ -1288,6 +1285,9 @@ ca:
           <strong>Àustria</strong>: conté dades de
               <a href="http://data.wien.gv.at/">Stadt Wien</a> sota
               <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>.
+        contributors_au_html: |-
+          <strong>Austràlia</strong>: conté dades suburbi basats
+              en les dades d'Austràlia Oficina d'estadístiques.
         contributors_ca_html: |-
           <strong>Canadà</strong>: conté dades de
               GeoBase ®, GeoGratis (© Departament de Natural
@@ -1841,7 +1841,7 @@ ca:
       flash: La informació de client ha actualitzat correctament
     destroy:
       flash: S'ha destruït el registre de l'aplicació client
-  user:
+  users:
     login:
       title: Accés
       heading: Accés
index fea0954548a5a17c95d8535ac8e74e580e0650fd..f1bd85af3b557dd7034e200b215e393bc1389c4b 100644 (file)
@@ -657,7 +657,7 @@ ce:
       application: ТӀетохаран цӀе
     form:
       required: Оьшу
-  user:
+  users:
     new:
       continue: Кхин дӀа
     show:
index e3a8fac0c70a1795c2d3fc0236dacfee3b67b9d5..f35ece33a198b596e3443131575e2bbcf4bba5ed 100644 (file)
@@ -1097,9 +1097,8 @@ cs:
     intro_text: OpenStreetMap je mapa světa, vytvořená lidmi jako vy a volně využitelná
       pod otevřenou licencí.
     intro_2_create_account: Vytvořit uživatelský účet
-    partners_html: Hosting podporují %{ucl}, %{bytemark}, %{ic} a další %{partners}.
+    hosting_partners_html: Hosting podporují %{ucl}, %{bytemark}, a další %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partneři
     osm_offline: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
@@ -1399,6 +1398,8 @@ cs:
           BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">země
           Vorarlbersko</a> a země Tyrolsko (pod <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC
           BY AT s dodatky</a>).'
+        contributors_au_html: '<strong>Austrálie</strong>: Obsahuje data předměstí
+          založená na datech Australského statistického úřadu.'
         contributors_ca_html: '<strong>Kanada</strong>: Obsahuje data z GeoBase&reg;,
           GeoGratis (&copy; Department of Natural Resources Canada), CanVec (&copy;
           Department of Natural Resources Canada) a StatCan (Geography Division, Statistics
@@ -1951,7 +1952,7 @@ cs:
       flash: Klientské informace úspěšně aktualizovány
     destroy:
       flash: Registrace klientské aplikace zrušena
-  user:
+  users:
     login:
       title: Přihlásit se
       heading: Přihlášení
@@ -2068,6 +2069,7 @@ cs:
         i budoucí příspěvky.
       consider_pd: Navíc k výše uvedené dohodě považuji své příspěvky za volné dílo.
       consider_pd_why: co to znamená?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Informace, které pomohou tyto podmínky pochopit: <a href="%{summary}">lidsky
         čitelné shrnutí</a> a nějaké <a href="%{translations}">neoficiální překlady</a>'
       agree: Souhlasím
index f064da918b18cec47ae84760abfcfc4cc8434c9b..12fca0073a132fe0bb1f1d7c6b0b3f95b58a3b4c 100644 (file)
@@ -940,7 +940,6 @@ cy:
     intro_text: Mae OpenStreetMap yn fap o'r byd, wedi'i greu gan bobl fel chi ac
       sydd ar gael i'w ddefnyddio am ddim a dan drwydded rydd.
     intro_2_create_account: Creu cyfrif defnyddiwr
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: Partneriaid
     osm_offline: Mae cronfa ddata OpenStreetMap all-lein ar hyn o bryd er mwyn gwaith
@@ -1334,7 +1333,7 @@ cy:
       allow_read_gpx: ddarllen eu dargopiadau GPS preifat.
       allow_write_gpx: uwchlwytho dargopiadau GPS.
       allow_write_notes: addasu nodiadau.
-  user:
+  users:
     login:
       title: Mewngofnodi
       heading: Mewngofnodi
index 5a52a431ca51083dfeece5b89941e221f74f57a1..8f662f344737bf404ef3930c0d57c79a902a987c 100644 (file)
@@ -963,6 +963,8 @@ da:
       title: Problemer
       select_status: Vælg status
       select_type: Vælg type
+      select_last_updated_by: Vælg sidst opdateret af
+      reported_user: Rapporteret bruger
       not_updated: Ikke opdateret
       search: Søg
       user_not_found: Brugeren findes ikke
@@ -980,6 +982,11 @@ da:
       reopen: Genåbn
       read_reports: Læs rapporter
       new_reports: Nye rapporter
+      comments_on_this_issue: Kommentarer på denne sag
+    comments:
+      created_at: Den %{datetime}
+    reports:
+      updated_at: Den %{datetime}
   reports:
     new:
       missing_params: Kan ikke oprette en ny rapport
@@ -1006,6 +1013,7 @@ da:
     edit: Redigér
     history: Historik
     export: Eksportér
+    issues: Problemer
     data: Data
     export_data: Eksporter data
     gps_traces: GPS-spor
@@ -1018,9 +1026,7 @@ da:
     intro_text: OpenStreetMap er et kort over verden, skabt af folk som dig og gratis
       at bruge under en åben licens.
     intro_2_create_account: Opret en brugerkonto
-    partners_html: Driften støttes af %{ucl}, %{ic}, %{bytemark} og andre %{partners}.
     partners_ucl: University College London
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnere
     osm_offline: OpenStreetMap-databasen er for øjeblikket offline på grund af nødvendig
@@ -1338,6 +1344,9 @@ da:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Delstaten Vorarlberg</a> og
           Delstaten Tyrol (under <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT med tilføjelser</a>).
+        contributors_au_html: |-
+          <strong>Australien</strong>: Indeholder forstadsdata baseret
+          på data fra Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Canada</strong>: Indeholder data fra
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1691,8 +1700,10 @@ da:
       tags_help: kommasepareret
       visibility: 'Synlighed:'
       visibility_help: hvad betyder det her?
+      visibility_help_url: https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
       upload_button: Upload
       help: Hjælp
+      help_url: https://wiki.openstreetmap.org/wiki/Upload
     create:
       upload_trace: Upload GPS-spor
       trace_uploaded: Din GPX-fil er uploadet og afventer lagring i databasen. Det
@@ -1898,7 +1909,7 @@ da:
       flash: Opdateret klientoplysninger
     destroy:
       flash: Annulerede klient programmets registrering
-  user:
+  users:
     login:
       title: Log på
       heading: Log på
@@ -2007,6 +2018,7 @@ da:
       terms declined: Vi er kede af at du har besluttet at du ikke kan acceptere de
         nye vilkår for bidragsydere. For yderligere oplysninger, se venligst <a href="%{url}">denne
         wikiside</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: Vilkår for bidragsydere
       heading: Vilkår for bidragsydere
index f1b4fc90e878d409a708f0ea0c6f1cb2b6952c3d..42ca210db423b7c70a8e61da11d6ce45ead9da21 100644 (file)
@@ -1120,10 +1120,9 @@ de:
     intro_text: OpenStreetMap ist eine Karte der Welt, erstellt von Menschen wie dir
       und frei verwendbar unter einer offenen Lizenz.
     intro_2_create_account: Erstelle ein Benutzerkonto
-    partners_html: Das Hosting wird von %{ucl}, %{bytemark}, %{ic} und weiteren %{partners}
+    hosting_partners_html: Das Hosting wird von %{ucl}, %{bytemark} und anderen %{partners}
       unterstützt.
     partners_ucl: UCL
-    partners_ic: dem Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: Partnern
     osm_offline: Die OpenStreetMap-Datenbank ist im Moment wegen wichtiger Wartungsarbeiten
@@ -1461,6 +1460,8 @@ de:
           BY AT</a>), des <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Landes
           Vorarlberg</a> und des Landes Tirol (<a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">lizenziert
           gemäß CC BY AT samt Erweiterungen zur Lizenz</a>).'
+        contributors_au_html: '<strong>Australien</strong>: Enthält Daten zu Siedlungen,
+          die auf Daten des <i>Australian Bureau of Statistics</i> basieren.'
         contributors_ca_html: '<strong>Kanada</strong>: Enthält Daten von GeoBase&reg;,
           GeoGratis (&copy; <i>Department of Natural Resources Canada</i>), CanVec
           (&copy; <i>Department of Natural Resources Canada</i>) und StatCan (<i>Geography
@@ -2030,7 +2031,7 @@ de:
       flash: Client-Informationen erfolgreich aktualisiert
     destroy:
       flash: Die registrierte Client-Anwendung wurde entfernt
-  user:
+  users:
     login:
       title: Anmelden
       heading: Anmelden
@@ -2147,6 +2148,7 @@ de:
       terms declined: Wir bedauern es, dass du dich dazu entschieden hast, den neuen
         Bedingungen für Mitwirkende nicht zuzustimmen. Weitere Informationen findest
         du auf <a href="%{url}">dieser Wikiseite</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/DE:Contributor_Terms_Declined
     terms:
       title: Bedingungen für Mitwirkende
       heading: Bedingungen für Mitwirkende
@@ -2156,10 +2158,12 @@ de:
       consider_pd: Zusätzlich zu den oben genannten Bedingungen betrachte ich meine
         Beiträge als gemeinfrei (Public Domain)
       consider_pd_why: Was bedeutet dies?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Informationen die dabei helfen, diese Bedingungen zu verstehen: eine
         <a href="%{summary}">verständliche Zusammenfassung</a> sowie einige <a href="%{translations}">inoffizielle
         Übersetzungen</a>'
       agree: Akzeptieren
+      declined: https://wiki.openstreetmap.org/wiki/DE:Contributor_Terms_Declined
       decline: Ablehnen
       you need to accept or decline: Bitte lies die neuen Bedingungen für Mitwirkende
         und nimm sie an oder lehne sie ab, bevor du weitermachst.
@@ -2283,6 +2287,7 @@ de:
           durchzulesen sowie zu akzeptieren.
         agreed_with_pd: Du hast zudem erklärt, dass du deine Beiträge gemeinfrei veröffentlichst
           (unter Public Domain stellst).
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: Worum handelt es sich?
       profile description: 'Profil-Beschreibung:'
       preferred languages: 'Bevorzugte Sprachen:'
index e7c0a37bd23cf4ffa442350408440ae95733df97..2d29a4cb43a32466349c47305dd4262567e9f394 100644 (file)
@@ -752,7 +752,7 @@ diq:
       output: Vıcyaen
       export_button: Teberdayış
     sidebar:
-      search_results: Neticeyê geyrayışi
+      search_results: Peyniya cıgeyrayışi
       close: Racnê
     search:
       search: Cı geyre
@@ -867,7 +867,7 @@ diq:
     form:
       name: Name
       required: Mecburiyo
-  user:
+  users:
     login:
       title: Cıkewtış
       heading: Cıkewtış
index 1ed61d2688dc1bce7fd41293ec4c724a1986c510..81995be753e3cb791ff51ee257392694fa8057ed 100644 (file)
@@ -802,10 +802,7 @@ dsb:
     intro_text: OpenStreetMap jó kórta swěta, napórana wót luźi ako ty a dajo se licho
       pód wótwórjoneju licencu wužywaś.
     intro_2_create_account: Załož wužywarske konto
-    partners_html: Hostowanje pódpěra se wót %{ucl}, %{ic}, %{bytemark} a drugich
-      %{partners}.
     partners_ucl: z UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerow
     osm_offline: Datowa banka OpenStreetMap jo tuchylu offline, dokulaž se wažne źěło
@@ -1090,6 +1087,9 @@ dsb:
           BY</a>), <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a> a  Land Tirol (pod <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT ze změnami</a>).'
+        contributors_au_html: '<strong>Awstralska</strong>: Wopśimujo pśedměsćańske
+          daty na zakłaźe datow awstralskego  amta za statistiku (Australian Bureau
+          of Statistics).'
         contributors_ca_html: '<strong>Kanada</strong>: Wopśimujo daty z GeoBase&reg;,
           GeoGratis (&copy; Department of Natural Resources Canada), CanVec (&copy;
           Department of Natural Resources Canada), a StatCan (Geography Division,
@@ -1579,7 +1579,7 @@ dsb:
       flash: Informacije wó klienśe wuspěšnje zaktualizěrowane
     destroy:
       flash: Registrěrowanje aplikacije znicone
-  user:
+  users:
     login:
       title: Pśizjawjenje
       heading: Pśizjawjenje
index be3a928d7d5b015c24fad4c9726742ed8259cfc9..57f0a26cc81a3eae4ee1aaadff4d62c6a926a237 100644 (file)
@@ -1108,10 +1108,7 @@ el:
     intro_text: Το OpenStreetMap είναι χάρτης του κόσμου, που δημιουργήθηκε από ανθρώπους
       σαν κι εσάς και είναι δωρεάν, υπό άδεια ελεύθερης χρήσης.
     intro_2_create_account: Δημιουργήστε ένα λογαριασμό χρήστη
-    partners_html: Η λειτουργία υποστηρίζεται από το %{ucl}, %{bytemark}, %{ic}, και
-      άλλους %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College του Λονδίνου
     partners_bytemark: Bytemark Hosting
     partners_partners: συνεργάτες
     osm_offline: Η βάση δεδομένων του OpenStreetMap είναι προσωρινά εκτός λειτουργίας
@@ -2007,7 +2004,7 @@ el:
       flash: Οι πληροφορίες του πελάτη ενημερώθηκαν με επιτυχία
     destroy:
       flash: Η εισαγωγή του προγράμματος του πελάτη χάλασε
-  user:
+  users:
     login:
       title: Σύνδεση
       heading: Σύνδεση
index aaa9555dbc809e92294c2ebf71d7fd712815ed18..434b88c13277985dec0cd24458ab40d1a16d8579 100644 (file)
@@ -903,10 +903,7 @@ en-GB:
     intro_text: OpenStreetMap is a map of the world, created by people like you and
       free to use under an open licence.
     intro_2_create_account: Create a user account
-    partners_html: Hosting is supported by %{ucl}, %{ic} and %{bytemark}, and other
-      %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partners
     osm_offline: The OpenStreetMap database is currently offline while essential database
@@ -1771,7 +1768,7 @@ en-GB:
       flash: Updated the client information successfully
     destroy:
       flash: Destroyed the client application registration
-  user:
+  users:
     login:
       title: Login
       heading: Login
index 5c96e819135fcb76082ee5bc0e9bd46bd8095886..7b13a894bc860b3e09cddf1deee13f26e34b8a5a 100644 (file)
@@ -1347,6 +1347,11 @@ en:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> and
           Land Tirol (under <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT with amendments</a>).
+        contributors_au_html: |
+          <strong>Australia</strong>: Contains data sourced from
+          <a href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA Australia Limited</a>
+          licensed by the Commonwealth of Australia under
+          <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
         contributors_ca_html: |
           <strong>Canada</strong>: Contains data from
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1793,6 +1798,7 @@ en:
         other: "GPX file with %{count} points from %{user}"
       description_without_count: "GPX file from %{user}"
   application:
+    permission_denied: You do not have permission to access that action
     require_cookies:
       cookies_needed: "You appear to have cookies disabled - please enable cookies in your browser before continuing."
     require_admin:
@@ -1889,7 +1895,7 @@ en:
       flash: "Updated the client information successfully"
     destroy:
       flash: "Destroyed the client application registration"
-  user:
+  users:
     login:
       title: "Login"
       heading: "Login"
index bb40fb3c7d0ea412199f14bd23587648d7ca2c93..9bc8589bb9eeedfe17d891a346f59c94489001e1 100644 (file)
@@ -1072,10 +1072,9 @@ eo:
     intro_text: OpenStreetMap estas mapo de la mondo, kreata de homoj kiel vi, kaj
       libere uzebla laŭ malferma permesilo.
     intro_2_create_account: Krei konton
-    partners_html: Retgastigo estas liverata de %{ucl}, %{bytemark}, %{ic} kaj aliaj
+    hosting_partners_html: Retgastigo estas subtenata de %{ucl}, %{bytemark} kaj aliaj
       %{partners}.
     partners_ucl: University College London
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: kunlaborantoj
     osm_offline: La OpenStreetMap-datumbazo estas nuntempe nealireabla pro necesaj
@@ -1370,6 +1369,10 @@ eo:
           <strong>Aŭstrujo</strong>: enhavas datumojn el <a href="https://data.wien.gv.at/">Stadt Wien</a> (laŭ <a href="https://creativecommons.org/licenses/by/3.0/at/deed.eo">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> kaj
           Land Tirol (laŭ <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT kun postaj ŝanĝoj</a>).
+        contributors_au_html: '<strong>Aŭstralio</strong>: enhavas datumojn el <a
+          href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA Australia
+          Limited</a> kunhavigataj de Komunejo de Aŭstralio laŭ la permesilo <a href="https://creativecommons.org/licenses/by/4.0/deed.eo">CC
+          BY 4.0</a>.'
         contributors_ca_html: |-
           <strong>Kanado</strong>: enhavas datumojn el
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1920,7 +1923,7 @@ eo:
       flash: Informoj pri kliento estas ĝisdatigitaj sukcese
     destroy:
       flash: La porklienta aplikaĵo forigita
-  user:
+  users:
     login:
       title: Ensaluti
       heading: Ensaluti
index 40ce909ee19fbd573bca9045967c8763704a175b..e0aa65cef4d78a33dbc18eb9abfbb568d2f9e04d 100644 (file)
@@ -45,6 +45,7 @@
 # Author: Rubenwap
 # Author: Ruila
 # Author: Sim6
+# Author: Tiberius1701
 # Author: Toliño
 # Author: Translationista
 # Author: VegaDark
@@ -1114,10 +1115,9 @@ es:
     intro_text: OpenStreetMap es un mapa del mundo, creado por gente como tú y de
       uso libre bajo una licencia abierta.
     intro_2_create_account: Crear una cuenta de usuario
-    partners_html: El alojamiento de los servidores está respaldado por %{ucl}, %{ic}
-      y %{bytemark}, y otros %{partners}.
+    hosting_partners_html: El alojamiento es apoyado por %{ucl}, %{bytemark}, y otros
+      %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College de Londres
     partners_bytemark: Bytemark Hosting
     partners_partners: socios
     osm_offline: La base de datos de OpenStreetMap no está disponible en estos momentos
@@ -1432,6 +1432,8 @@ es:
           <strong>Austria</strong>: Contiene datos de
              <a href="https://data.wien.gv.at/">Stadt Wien</a> (bajo
              <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> y Land Tirol (bajo licencia <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT con modificaciones</a>).
+        contributors_au_html: '<strong>Australia</strong>: Contiene datos suburbanos
+          cuya base es la información provista por Australian Bureau of Statistics.'
         contributors_ca_html: '<strong>Canadá</strong>: contiene datos de GeoBase&reg;,
           GeoGratis (&copy; Department of Natural Resources Canada), CanVec (&copy;
           Department of Natural Resources Canada) y StatCan (Geography Division, Statistics
@@ -2000,7 +2002,7 @@ es:
       flash: Actualizada la información del cliente exitosamente
     destroy:
       flash: Destruido el registro de aplicación del cliente
-  user:
+  users:
     login:
       title: Iniciar sesión
       heading: Iniciar sesión
@@ -2083,9 +2085,9 @@ es:
       title: Registrarse
       no_auto_account_create: Desafortunadamente no estamos actualmente habilitados
         para crear una cuenta para ti automáticamente.
-      contact_webmaster: Contacta al <a href="%{webmaster}">webmaster</a> para gestionar
-        la creación de una cuenta. Intentaremos gestionar la solicitud lo más pronto
-        posible.
+      contact_webmaster: Contacta con el <a href="%{webmaster}">webmaster</a> para
+        gestionar la creación de una cuenta. Intentaremos gestionar la solicitud lo
+        más pronto posible.
       about:
         header: Libre y editable
         html: <p>A diferencia de otros mapas, OpenStreetMap está creado completamente
@@ -2114,6 +2116,7 @@ es:
       terms declined: Lamentamos que haya decidido no aceptar los nuevos Términos
         de contribución. Para obtener más información, consulte <a href="%{url}">esta
         página wiki</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
     terms:
       title: Términos del colaborador
       heading: Términos del colaborador
@@ -2123,9 +2126,11 @@ es:
       consider_pd: Además del acuerdo anterior, considero que mis contribuciones se
         encuentran en Dominio Público.
       consider_pd_why: ¿qué es esto?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Información para ayudar a comprender estos términos: un <a href="%{summary}">resumen
         legible</a> y algunas <a href="%{translations}">traducciones informales</a>'
       agree: Aceptar
+      declined: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
       decline: Declinar
       you need to accept or decline: Por favor lea y, a continuación, acepte o rechace
         los nuevos Términos de contribución para continuar.
@@ -2247,6 +2252,7 @@ es:
           los nuevos Términos de Colaborador.
         agreed_with_pd: También has declarado que consideras tus modificaciones como
           de Dominio Público.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: ¿Qué es esto?
       profile description: 'Descripción del perfil:'
       preferred languages: 'Idiomas preferidos:'
@@ -2711,7 +2717,7 @@ es:
       relation: Relación
       nothing_found: No se encontraron características
       error: 'Error al contactar con %{server}: %{error}'
-      timeout: Tiempo de espera agotado al contactar a %{server}
+      timeout: Tiempo de espera agotado al contactar con %{server}
     context:
       directions_from: Indicaciones desde aquí
       directions_to: Indicaciones hasta aquí
index 2fcf1a5ecbd3ec460eea323673174a9a891132ad..aa579fd438ee7a51a2ef7ea275f683da2542d834 100644 (file)
@@ -813,9 +813,7 @@ et:
     intro_text: OpenStreetMap on maailma kaart, mille on loonud inimesed nagu sina
       ja seda võib vabalt kasutada avatud litsentsi tingimustel.
     intro_2_create_account: loo oma konto
-    partners_html: Majutust toetavad %{ucl}, %{ic} ja %{bytemark} ning teised %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerid
     osm_offline: OpenStreetMapi andmebaas ei ole hetkel juurdepääsetav sest teostatakse
@@ -1644,7 +1642,7 @@ et:
       flash: Kliendi informatsioon uuendati edukalt
     destroy:
       flash: Klientrakenduse registratsioon hävitati
-  user:
+  users:
     login:
       title: Sisselogimise leht
       heading: Logi sisse
index 1aeca3c90f0f7f575e2a8c590805477e64c9c467..159f2c2b0df5ea6e37ba1b76255667c7457a80a7 100644 (file)
@@ -1082,9 +1082,7 @@ eu:
     intro_text: OpenStreetMap munduko mapa da, zu bezalako jendeak sortutakoa eta
       doako lizentzia irekiarekin erabiltzeko dagoena.
     intro_2_create_account: Erabiltzaile kontua sortu
-    partners_html: '%{ucl}, %{bytemark}, %{ic}, eta beste %{partners}-k babestua.'
     partners_ucl: UCLa
-    partners_ic: Londreseko Imperial College
     partners_bytemark: Bytemark Ostatua
     partners_partners: bazkideak
     osm_offline: OpenStreetMap datu-basea orain konexiorik gabe dago funtsezko datu-basearen
@@ -1954,7 +1952,7 @@ eu:
       flash: Bezero informazioa arrakastaz eguneratu da
     destroy:
       flash: Bezeroaren eskaera erregistroa suntsitua
-  user:
+  users:
     login:
       title: Saio-hasiera
       heading: Saio-hasiera
index 0974cc04555954119f469af92093fbcf4cdbcb98..047d22ef5a624f5463cacf55f71853d8a7bb131f 100644 (file)
@@ -2,6 +2,7 @@
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Alirezaaa
+# Author: Amirsara
 # Author: Arash.pt
 # Author: Armin1392
 # Author: BMRG14
@@ -278,7 +279,7 @@ fa:
       sorry: پوزش، بازیابی فهرست تغییرات درخواستی شما خیلی زمان برد.
     rss:
       title_all: بحث در مورد جعبه تغییر OpenStreetMap
-      title_particular: 'بحث Ø¯Ø± Ù\85Ù\88رد Ø¬Ø¹Ø¨Ù\87 ØªØºÛ\8cÛ\8cر Ø´Ù\85ارÙ\87 #% {changeset_id} OpenStreetMap'
+      title_particular: 'بحث Ø¯Ø± Ù\85Ù\88رد ØªØºÛ\8cÛ\8cرات Ø§Ù\86جاÙ\85 Ø´Ø¯Ù\87 Ø¯Ø± #%{changeset_id} OpenStreetMap'
       comment: 'نظر جدید در مورد جعبه تغییر %{changeset_id}{changeset_id} #% توسط
         %{author}'
       commented_at_html: بروز شده %{when} قبل
@@ -427,7 +428,7 @@ fa:
           ferry_terminal: پایانه کشتی
           fire_station: آتش‌نشانی
           food_court: پذيرايي
-          fountain: چشمه
+          fountain: فواره
           fuel: پمپ بنزین
           gambling: قمار
           grave_yard: محوطهٔ گورستان
@@ -725,7 +726,7 @@ fa:
           "yes": دفتر
         place:
           allotments: سهم
-          city: شهر بزرگ
+          city: شهر
           city_block: بلوک شهری
           country: کشور
           county: شهرستان
@@ -939,7 +940,10 @@ fa:
         other: '%{count} گزارش'
       reports_of_this_issue: گزارش‌های این مشکل
       new_reports: گزارش‌های تازه
+    comments:
+      created_at: در %{datetime}
     reports:
+      updated_at: در %{datetime}
       reported_by_html: '%{user} آن را به‌عنوان %{category} گزارش کرد'
     helper:
       reportable_title:
@@ -948,19 +952,34 @@ fa:
     new:
       title_html: گزارش %{link}
       missing_params: ایجاد گزارش جدید ممکن نیست
+      details: لطفاً جزئیات بیشتری از مشکل ارائه دهید (ضروری است).
       select: 'دلیل گزارش شما:'
+      disclaimer:
+        intro: 'پیش از اینکه گزارش خود را برای مدیران سایت ارسال کنید، مطمئن شوید
+          که:'
+        not_just_mistake: قطعاً این مسئله سهوی نبوده
+        unable_to_fix: به‌تنهایی یا با کمک نقشه‌کش‌های همکارتان نمی‌توانید مشکل را
+          حل کنید
+        resolve_with_user: قبلاً تلاش کرده‌اید مشکل را با کاربر مربوطه برطرف کنید
       categories:
         diary_entry:
           spam_label: این روزنوشت هرزنامه است/دارد
           threat_label: این روزنوشت تهدیدآمیز است
+          other_label: سایر
         diary_comment:
           spam_label: این نظر (بر روزنوشت) هرزنامه است/دارد
           threat_label: این نظر (بر روزنوشت) تهدیدآمیز است
+          other_label: سایر
+        user:
+          other_label: سایر
         note:
           spam_label: این یادداشت هرزنامه است
+          personal_label: این یادداشت حاوی داده‌های شخصی است
           abusive_label: این یادداشت زشت است
+          other_label: سایر
     create:
       successful_report: گزارشتان با موفقیت ثبت شد
+      provide_details: لطفاً جزئیات لازم را ارائه دهید
   layouts:
     logo:
       alt_text: لوگوی OpenStreetMap
@@ -986,10 +1005,7 @@ fa:
     intro_text: OpenStreetMap یک نقشه از جهان است، که توسط افرادی مثل شما ایجاد شده
       و تحت یک مجوز آزاد برای استفاده رایگان همگان است.
     intro_2_create_account: ایجاد حساب کاربری
-    partners_html: میزبانی وب توسط %{ucl}, %{bytemark}, %{ic} و سایر %{partners} پشتیبانی
-      می‌شود.
     partners_ucl: UCL
-    partners_ic: کالج سلطنتی لندن
     partners_bytemark: میزبانی Bytemark
     partners_partners: شرکای تجاری
     osm_offline: دیتابیس OpenStreetMap در حال حاضر آفلاین است در حالی که کار تعمیر
@@ -1032,7 +1048,7 @@ fa:
       befriend_them: همچنین میتوانید در %{befriendurl} او را بعنوان دوست اضافه کنید.
     gpx_notification:
       greeting: سلام ،
-      your_gpx_file: Ù¾Ø±Ù\88Ù\86دÙ\87 Û\8c GPX شما اینگونه است
+      your_gpx_file: Ù\81اÛ\8cÙ\84 GPX شما اینگونه است
       with_description: با توضیحات
       and_the_tags: 'و برچسب های زیر:'
       and_no_tags: و بدون برچسب.
@@ -1053,8 +1069,8 @@ fa:
       confirm: 'قبل از اینکه ما کار دیگری انجام دهیم، نیاز داریم که تأیید شود این
         درخواست از شما آمده، پس اگر این چنین است لطفاً برای تأیید حسابتان روی پیوند
         زیر کلیک کنید:'
-      welcome: بعد از اینکه حسابتان را تأیید کردید، ما به شما برخی از اطلاعات اضافی
-        Ø±Ø§ Ø§Ø±Ø§Ø¦Ù\87 Ù\85Û\8cدÙ\87Û\8cÙ\85 ØªØ§ Ø¨ØªÙ\88اÙ\86Û\8cد Ø´Ø±Ù\88ع Ú©Ù\86Û\8cد.
+      welcome: بعد از اینکه حسابتان را تأیید کردید، اطلاعات بیشتری به شما ارائه می‌دهیم
+        تا بتوانید شروع کنید.
     email_confirm:
       subject: '[OpenStreetMap] ایمیلتان را تأیید کنید'
     email_confirm_plain:
@@ -1141,8 +1157,8 @@ fa:
         ارتباط برقرار نمی کنید؟
       people_mapping_nearby: افراد نقشه کش نزدیک
     message_summary:
-      unread_button: علامت‌گذاری به عنوان خوانده‌شده
-      read_button: علامت‌گذاری به عنوان خوانده‌شده
+      unread_button: نشان بزن نخواندم
+      read_button: نشان بزن که خواندم
       reply_button: پاسخ
       destroy_button: حذف
     new:
@@ -1184,7 +1200,7 @@ fa:
       subject: عنوان
       date: تاریخ
       reply_button: پاسخ
-      unread_button: علامت‌گذاری به عنوان خوانده‌شده
+      unread_button: نشان بزن نخواندم
       destroy_button: حذف
       back: برگشت
       to: به
@@ -1226,9 +1242,9 @@ fa:
       partners_title: شرکای تجاری
     copyright:
       foreign:
-        title: درباره این ترجمه‌ها
-        text: Ø¯Ø± Ø²Ù\85اÙ\86 Ø¨Ù\87 Ù\88جÙ\88د Ø¢Ù\85دÙ\86 ØªØ¯Ø§Ø®Ù\84 Ø¨Û\8cÙ\86 Ø¨Ø±Ú¯Ø±Ø¯Ø§Ù\86 Ù\81ارسÛ\8c Ù\88 %{english_original_link}Ø\8c
-          نوشتهٔ انگلیسی برتری دارد
+        title: دربارهٔ این ترجمه
+        text: Ø§Ú¯Ø± Ø¨Û\8cÙ\86 Ø¨Ø±Ú¯Ø±Ø¯Ø§Ù\86 Ù\81ارسÛ\8c Ù\88 %{english_original_link} Ù\86اسازگارÛ\8c Ø¨Ø§Ø´Ø¯Ø\8c ØµÙ\81Ø­Ù\87Ù\94
+          انگلیسی برتری دارد
         english_link: اصل انگلیسی
       native:
         title: درباره این صفحه
@@ -1243,45 +1259,47 @@ fa:
           OpenStreetMap <i> داده باز است</i>، تحت مجوز <a
           href="http://opendatacommons.org/licenses/odbl/">Open Data
           Commons Open Database License</a> (ODbL).
-        intro_2_html: Ø´Ù\85ا Ø¨Ø±Ø§Û\8c Ú©Ù¾Û\8c Ø¨Ø±Ø¯Ø§Ø±Û\8cØ\8c ØªÙ\88زÛ\8cعØ\8c Ø§Ù\86تÙ\82اÙ\84 Ù\88 Ø§Ù\86طباÙ\82 Ø¯Ø§Ø¯Ù\87 Ù\87اÛ\8c Ù\85ا Ø¢Ø²Ø§Ø¯
-          هستید، تا زمانی که معتبران و همکاران OpenStreetMap باشید. اگر شما تغییر
-          دهید یا بسازید داده های ما را، شما باید نتایج را فقط تحت همین مجوز توزیع
-          کنید. اطلاعات کامل <a href="http://opendatacommons.org/licenses/odbl/1.0/">کد
-          قانونی</a> حقوق و وظایف شما را توضیح میدهد.
+        intro_2_html: ØªØ§ Ø²Ù\85اÙ\86Û\8c Ú©Ù\87 Ø§Ø² OpenStreetMap Ù\88 Ù\85شارکتâ\80\8cÚ©Ù\86Ù\86دگاÙ\86 Ø¢Ù\86 Û\8cاد Ú©Ù\86Û\8cدØ\8c Ø¨Ø±Ø§Û\8c
+          کپی‌برداری، توزیع، انتقال و اقتباس (از) داده‌های ما آزاد هستید. اگر داده‌های
+          ما را تغییر دهید یا بر پایهٔ آن‌ها تولید کنید، باید نتایج را فقط تحت همان
+          مجوز توزیع کنید. نسخهٔ کامل <a href="http://opendatacommons.org/licenses/odbl/1.0/">بایدونبایدهای
+          قانونی</a> حقوق و وظایف شما را توضیح میدهد.
         intro_3_html: |-
-          نقشه کشی در کاشی های نقشه ی ما، و مدارک ما، تحت مجوز <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
-          Commons Attribution-ShareAlike 2.0</a>هستند ، مجوز (CC BY-SA).
-        credit_title_html: چگونه از OpenStreetMap اعتبار بگیریم
-        credit_1_html: ما نیاز داریم که شما استفاده کنید از اعتبار &ldquo;&copy; همکاران
-          OpenStreetMap&rdquo;.
-        credit_2_html: همچنین مطمئن باشید که پاک کردن داده ها تحت یک مجوز دیتابیس
-          باز است، و اگر از کاشی‌های نقشهٔ ما استفاده می‌کنید، نقشه‌برداری تحت  مجوز
-          CC BY-SA است. میتوانید با پیونددادن به <a href="http://www.openstreetmap.org/copyright">این
-          صفحه حق نشر</a> متناوبا آن را انجام دهید، و به عنوان یک درخواست اگر شما
-          توزیع کنندهٔ نوع داده‌های OSM هستید، می‌توانید نام و پیوند را بطور مستقیم
-          به مجوز بدهید. در رسانه‌ها جاهایی که پیوندها مقدور نیستند(مثل کارهای چاپی)،
-          پیشنهاد می‌کنیم خوانندگان‌تان را به openstreetmap.org راهنمایی کنید(شاید
-          با گسترش 'OpenStreetMap' به این نشانی کامل)، به opendatacommons.org، و اگر
-          مناسب باشد، به creativecommons.org.
+          نقشه‌نگاری‌های ارائه‌شده در کاشی‌های نقشهٔ ما و در مستنداتمان، همگی تحت پروانهٔ   <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative
+          Commons Attribution-ShareAlike 2.0</a>هستند (CC BY-SA).
+        credit_title_html: چگونه از OpenStreetMap یاد کنیم
+        credit_1_html: |-
+          بایسته است که این‌گونه از ما یاد کنید:
+          &ldquo;&copy;مشارکت‌کنندگان OpenStreetMap&rdquo;.
+        credit_2_html: همچنین باید روشن کنید که داده‌ها تحت پروانهٔ پایگاه‌دادهٔ باز
+          یا Open Database License قرار دارند و اگر کاشی‌های نقشهٔ ما را استفاده کردید
+          به‌روشنی بیان کنید که نقشه‌نگاری‌ها تحت پروانهٔ CC BY-SA است. این کار را
+          با پیونددادن به <a href="https://www.openstreetmap.org/copyright"> این صفحهٔ
+          حق نشر</a> انجام دهید. به‌عنوان جایگزین، می‌توانید با نام و پیوند مستقیماً
+          به مجوز(ها) ارجاع بدهید (اگر OSM را در قالب داده توزیع می‌کنید انجام این
+          کار ضروری است). در رسانه‌هایی که درج پیوند ممکن نیست ( مثلاً کارهای چاپی)،
+          توصیه می‌کنیم که خوانندگان خود را به  openstreetmap.org (شاید با گسترش OpenStreetMap
+          به این نشانی کامل)، به opendatacommons.org و در صورت تناسب به creativecommons.org
+          هدایت کنید.
         credit_3_html: |-
-          Ø¨Ø±Ø§Û\8c Û\8cÚ© Ù\86Ù\82Ø´Ù\87 Ø§Ù\84کترÙ\88Ù\86Û\8cÚ©Û\8c Ù\82ابÙ\84 Ù\85رÙ\88رØ\8c Ø§Ø¹ØªØ¨Ø§Ø± Ø¨Ø§Û\8cد Ø¯Ø± Ú¯Ù\88Ø´Ù\87 Ø§Û\8c Ø§Ø² نقشه ظاهر شود.
+          Ø¯Ø± Û\8cÚ© Ù\86Ù\82Ø´Ù\87Ù\94 Ø§Ù\84کترÙ\88Ù\86Û\8cÚ©Û\8c Ù\82ابÙ\84 Ù\85رÙ\88رØ\8c Û\8cادکرد Ø¨Ø§Û\8cد Ø¯Ø± Ú¯Ù\88Ø´Ù\87Ù\94 نقشه ظاهر شود.
           برای مثال:
         attribution_example:
-          alt: مثال برای چگونه OpenStreetMap را در صفحه ی وبی نسبت دهیم
+          alt: مثالی از شیوهٔ انتساب به OpenStreetMap در صفحهٔ وبی.
           title: مثال انتساب
-        more_title_html: پیدا کردن اطلاعات بیشتر
-        more_1_html: |-
-          درباره استفاده از داده های ما، و چگونه به ما اعتبار دهید بیشتر بخوانید، در <a
-          href="http://wiki.openstreetmap.org/wiki/Legal_FAQ">Legal
-          FAQ</a>.
-        more_2_html: اگرچه OpenStreetMap داده باز است، ما نمی توانیم API نقشه را به
-          رایگان در اختیار توسعه دهندگان شخص ثالث قرار دهیم. <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">API
-          Usage Policy</a> ما را ببینید، <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">Tile
-          Usage Policy</a> و <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">Nominatim
-          Usage Policy</a>.
+        more_title_html: یافتن اطلاعات بیشتر
+        more_1_html: برای اطلاعات بیشتر دربارهٔ استفاده از داده‌های ما و چگونگی یادکرد
+          ما <a href="https://osmfoundation.org/Licence">صفحهٔ مجوز بنیاد OSM</a>
+          را بخوانید.
+        more_2_html: اگرچه OpenStreetMap داده باز است، اما نمی‌توانیم API نقشه را
+          به‌رایگان در اختیار توسعه‌دهندگان شخص ثالث قرار دهیم. <a href="http://wiki.openstreetmap.org/wiki/API_usage_policy">سیاست
+          استفاده از API </a> ، <a href="http://wiki.openstreetmap.org/wiki/Tile_usage_policy">سیاست
+          استفاده از کاشی‌ها</a> و <a href="http://wiki.openstreetmap.org/wiki/Nominatim#Usage_Policy">سیاست
+          استفاده از Nominatim</a> را ببینید.
         contributors_title_html: همکاران ما
-        contributors_intro_html: 'شرکای ما هزاران شخص هستند. ما همچنین جواز علنی داده
-          از سازمان نقشه برداری ملی و دیگر منابع را شامل میشویم، در بین آنها:'
+        contributors_intro_html: 'مشارکت‌کنندگانی که با ما همکاری می‌کنند هزاران شخص
+          هستند. داده‌هایی با مجوز باز از سازمان‌های نقشه‌برداری ملی و دیگر منابع
+          را نیز در کنار آن‌ها داریم، از جمله:'
         contributors_at_html: |-
           <strong>Austria</strong>: Contains data from
           <a href="http://data.wien.gv.at/">Stadt Wien</a> (under
@@ -1316,21 +1334,26 @@ fa:
           <strong>United Kingdom</strong>: Contains Ordnance
           Survey data &copy; Crown copyright and database right
           2010-12.
-        contributors_footer_1_html: برای اطلاعات بیشتر درباره این منابع و سایر منابع
-          مورد استفاده برای پیشرفت اوپن‌استریت‌مپ، لطفاً این پیوند را نگاه کنید.
+        contributors_footer_1_html: |-
+          برای اطلاعات بیشتر درباره این‌ها و سایر منابعی که برای پیشرفت اوپن‌استریت‌مپ استفاده شده‌اند، لطفاً <a
+          href="https://wiki.openstreetmap.org/wiki/Contributors">صفحهٔ مشارکت‌کنندگان</a> را در ویکی نگاه کنید.
         contributors_footer_2_html: ورود داده‌ها در OpenStreetMap به این معنی نیست
-          که ارائه‌دهندهٔ اصلی داده‌ها توسط OpenStreetMap تأییدشده، هر گونه ضمانتی
-          فراهم می‌کند، یا هر گونه مسئولیت را می‌پذیرد.
-        infringement_title_html: نقض کپی رایت
-        infringement_1_html: شرکای OSM یادآوری میکنند هرگز داده ای را از منابع حق
-          نشر اضافه نکنید(مثلا نقشه های گوگل یا نقشه های چاپ شده) بدون اجازه صریح
-          از دارندگان حق تکثیر.
-        infringement_2_html: اگر فکر می‌کنید که این حق نشر داده شده به‌طور نامناسب
-          به پایگاه داده‌های OpenStreetMap یا این سایت اضافه شده‌است، لطفاً به <a
-          href="http://www.osmfoundation.org/wiki/License/Takedown_procedure">رویهٔ
-          حذف</a> ما یا پرونده مستقیم در <a href="http://dmca.openstreetmap.org/">صفحهٔ
-          بایگانی برخط</a> ما مراجعه کنید.
-        trademarks_title_html: <span id="trademarks"></span>علائم ثبت شده تجاری
+          که فراهم‌کنندهٔ اصلی داده‌ها OpenStreetMap را تأیید می‌کند، ضمانتی می‌دهد،
+          یا مسئولیتی را می‌پذیرد.
+        infringement_title_html: نقض کپی‌رایت
+        infringement_1_html: به مشارکت‌کنندگان OSM یادآوری می کنیم که هرگز داده‌ای
+          را از منابع دارای حق نشر اضافه نکنند (مثلاً نقشه‌های گوگل یا نقشه‌های چاپ‌شده)،
+          مگر با اجازهٔ صریح و آشکار از صاحبان حق نشر.
+        infringement_2_html: اگر بر این باورید که داده‌های مشمول حق نشر به‌طور نامناسبی
+          به پایگاه‌دادهٔ OpenStreetMap  یا به این وبسایت افزوده شده، لطفاً به <a
+          href="http://www.osmfoundation.org/wiki/License/Takedown_procedure">روندنامهٔ
+          حذف</a> مراجعه کنید یا دادخواست خود را مستقیماً در <a href="http://dmca.openstreetmap.org/">صفحهٔ
+          دادخواهی برخط</a> تسلیم کنید.
+        trademarks_title_html: <span id="trademarks"></span>نشان‌های تجاری
+        trademarks_1_html: OpenStreetMap،‏ نشان‌وارهٔ ذره‌بین‌دار و State of the Map
+          نشان‌های تجاری ثبت‌شده و متعلق به بنیاد OpenStreetMap هستند. برای یافتن
+          پاسخ پرسش‌های خود دربارهٔ استفاده از این نشان‌ها، لطفاً <a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">سسیاست‌نامهٔ
+          نشان تجاری</a> را ببینید.
     index:
       js_1: شما در حال استفاده از مرورگری هستید که جاوا اسکریپت را پشتیبانی نمی کند،
         یا جاوا اسکریپت را غیر فعال کرده اید.
@@ -1613,20 +1636,20 @@ fa:
       identifiable: قابل شناسایی (نمایش در لیست ردها، قابل شناسایی، نقاط مرتب بر اساس
         زمان)
     new:
-      upload_trace: بارگذاری رد GPS
-      upload_gpx: 'بارگذارÛ\8c Ù¾Ø±Ù\88Ù\86دÙ\87Ù\94 GPX:'
+      upload_trace: بارگذاری رد جی‌پی‌اس
+      upload_gpx: 'بارگذارÛ\8c Ù\81اÛ\8cÙ\84 GPX:'
       description: 'توضیحات:'
       tags: 'برچسب‌ها:'
       tags_help: جداشده با کاما (,)
       visibility: 'پدیداری:'
-      visibility_help: این به چه معناست؟
+      visibility_help: این چیست؟
       upload_button: بارگذاری
       help: کمک
     create:
-      upload_trace: بارگذاری رد GPS
-      trace_uploaded: Ù¾Ø±Ù\88Ù\86دÙ\87Ù\94 GPX Ø´Ù\85ا Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ø´Ø¯Ù\87 Ù\88 Ø¯Ø± Ø§Ù\86تظار Ø¯Ø±Ø¬ Ø¯Ø± Ù¾Ø§Û\8cگاÙ\87â\80\8cدادÙ\87
-        است. این کار معمولاً کمتر از نیم ساعت طول می‌کشد. هنگامی که انجام شد ایمیلی
-        Ø¨Ø±Ø§Û\8c Ø´Ù\85ا Ù\81رستادÙ\87 Ù\85Û\8câ\80\8cØ´Ù\88د.
+      upload_trace: بارگذاری رد جی‌پی‌اس
+      trace_uploaded: Ù\81اÛ\8cÙ\84 GPX Ø´Ù\85ا Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ø´Ø¯Ù\87 Ù\88 Ø¯Ø± Ø§Ù\86تظار Ø¯Ø±Ø¬ Ø¯Ø± Ù¾Ø§Û\8cگاÙ\87â\80\8cدادÙ\87 Ø§Ø³Øª.
+        این کار معمولاً کمتر از نیم ساعت طول می‌کشد. هنگامی که انجام شد ایمیلی برای
+        شما فرستاده می‌شود.
       traces_waiting:
         one: شما %{count} رد منتظر بارگذاری دارید. لطفاً قبل از بارگذاری موارد بیشتر
           منتظر بمانید تا اینها بارگذاری بشوند که صف برای سایر کاربران بسته نشود.
@@ -1635,7 +1658,7 @@ fa:
     edit:
       title: ویرایش رد %{name}
       heading: ویرایش رد %{name}
-      filename: 'Ù\86اÙ\85 Ù¾Ø±Ù\88Ù\86دÙ\87:'
+      filename: 'Ù\86اÙ\85 Ù\81اÛ\8cÙ\84:'
       download: دریافت
       uploaded_at: 'تاریخ بارگذاری:'
       points: 'نقاط:'
@@ -1648,7 +1671,7 @@ fa:
       tags_help: جداشده با کاما (,)
       save_button: ذخیرهٔ تغییرات
       visibility: 'پدیداری:'
-      visibility_help: Ø¨Ù\87 Ú\86Ù\87 Ù\85عÙ\86Û\8c Ø§ست؟
+      visibility_help: Ø§Û\8cÙ\86 Ú\86Û\8cست؟
     update:
       updated: رد به‌روز شد
     trace_optionals:
@@ -1657,7 +1680,7 @@ fa:
       title: دیدن رد %{name}
       heading: دیدن رد %{name}
       pending: در انتظار
-      filename: 'Ù\86اÙ\85 Ù¾Ø±Ù\88Ù\86دÙ\87:'
+      filename: 'Ù\86اÙ\85 Ù\81اÛ\8cÙ\84:'
       download: دریافت
       uploaded: 'تاریخ بارگذاری:'
       points: 'نقاط:'
@@ -1713,15 +1736,14 @@ fa:
       message: سامانهٔ بارگذاری جی‌پی‌اکس در حال حاضر در دسترس نیست
     offline:
       heading: ذخیره سازی آفلاین GPX
-      message: ذخیره‌سازی پروندهٔ جی‌پی‌اکس و سامانهٔ بارگذاری در حال حاضر در دسترس
-        نیست.
+      message: ذخیره‌گاه فایل جی‌پی‌اکس و سامانهٔ بارگذاری هم‌اکنون در دسترس نیستند.
     georss:
-      title: ردهای جی‌پی‌اس OpenStreetMap
+      title: ‫ردهای جی‌پی‌اس OpenStreetMap‬
     description:
       description_with_count:
-        one: پرونده GPX با %{count} نقطه از %{user}
-        other: ' پرونده GPX با %{count} نقطه از %{user}'
-      description_without_count: Ù¾Ø±Ù\88Ù\86دÙ\87 GPX از %{user}
+        one: ‫فایل GPX با %{count} نقطه از %{user}‬
+        other: ' ‫فایل GPX با %{count} نقطه از %{user}‬'
+      description_without_count: Ù\81اÛ\8cÙ\84 GPX از %{user}
   application:
     require_cookies:
       cookies_needed: بنظر می‌رسد که کوکی‌ها را غیرفعال کرده‌اید - لطفاً قبل از ادامه
@@ -1729,6 +1751,8 @@ fa:
     require_moderator:
       not_a_moderator: برای انجام آن عمل نیاز هست مدیر باشید.
     setup_user_auth:
+      blocked_zero_hour: در وبسایت OpenStreetMap یک پیام خیلی مهم برایتان ارسال شده.
+        برای اینکه بتوانید ویرایش‌های خود را ذخیره کنید باید ابتدا آن را بخوانید.
       blocked: دسترسی شما به API مسدود شده. برای یافتن اطلاعات بیشتر لطفاً به رابط
         کاربری وب وارد شوید (log in).
       need_to_see_terms: دسترسی شما به API بطور موقت معلق شده‌است. برای مشاهدهٔ شرایط
@@ -1747,7 +1771,7 @@ fa:
       allow_write_diary: ساخت روزنوشت‌ها، نظردادن و افزودن دوست.
       allow_write_api: ویرایش نقشه.
       allow_read_gpx: خواندن ردهای GPS شخصی شما.
-      allow_write_gpx: بارگذاری ردهای GPS
+      allow_write_gpx: بارگذاری ردهای GPS.
       allow_write_notes: اصلاح یادداشت‌ها.
       grant_access: دسترسی می‌دهم
     authorize_success:
@@ -1822,7 +1846,7 @@ fa:
       flash: به‌روزرسانی اطلاعات کارخواه موفقیت‌آمیز بود
     destroy:
       flash: ثبت‌نام برنامه کارخواه از بین رفت
-  user:
+  users:
     login:
       title: ورود
       heading: ورود
@@ -1958,7 +1982,7 @@ fa:
         را بررسی کنید، یا شاید پیوندی که کلیک کردید اشتباه است.
       deleted: حذف شده
     show:
-      my diary: روزنوشت من
+      my diary: روزنوشت‌های من
       new diary entry: روزنوشت تازه
       my edits: ویرایش های من
       my traces: ردهای من
@@ -2373,7 +2397,7 @@ fa:
         gps: ردهای GPS عمومی
         overlays: برای اشکال‌زدایی از نقشه رولایه‌ها را فعال کنید
         title: لایه‌ها
-      copyright: © <a href='%{copyright_url}'>شرکت کنندگانOpenStreetMap</a>
+      copyright: © <a href='%{copyright_url}'>مشارکت‌کنندگان OpenStreetMap</a>
       donate_link_text: <a class='donate-attr' href='%{donate_url}'>کمک مالی</a>
     site:
       edit_tooltip: ویرایش نقشه
@@ -2393,9 +2417,11 @@ fa:
         unhide_comment: نمایش
     notes:
       new:
-        intro: چیزی مشکل دارد؟ به نقشه‌کش‌های دیگر اصلاع دهید تا آن را اصلاح کنند.
-          علامت موشواره را بر روی محلی که مشکل دارد قرار دهید و مشکل را شرح دهید (لطفاً
-          اطلاعات شخصی در بخش ننویسید یا اطلاعاتی از حق تکثیر نقشه یا فهرست دایرکتوری‌ها)
+        intro: مشکلی بر روی نقشه پیدا کرده‌اید یا چیزی از قلم افتاده؟ به نقشه‌کش‌های
+          دیگر اطلاع دهید تا آن را اصلاح کنند. نشانه را بر روی محلی که مشکل دارد قرار
+          دهید و با نوشتن یادداشت، مشکل را به‌طور کامل شرح دهید.
+        advice: همهٔ افراد این یادداشت شما را می‌بینند. بنابراین اطلاعات خصوصی یا
+          اطلاعات برداشت‌شده از منابع دارای حق تکثیر را اینجا ننویسید.
         add: افزودن یادداشت
       show:
         anonymous_warning: این یادداشت شامل نظرات کاربران ناشناس است که باید به‌طور
@@ -2403,7 +2429,7 @@ fa:
         hide: نهفتن
         resolve: حل شد
         reactivate: فعال سازی مجدد
-        comment_and_resolve: نظر و راه حل
+        comment_and_resolve: نظر + حل شد
         comment: نظر
     edit_help: نقشه را جابجا کنید و روی مکانی که می‌خواهید ویرایش کنید بزرگنمایی کنید،
       سپس اینجا کلیک کنید.
@@ -2417,10 +2443,10 @@ fa:
         mapquest_car: اتومبیل (MapQuest)
         mapquest_foot: پیاده (MapQuest)
         osrm_car: اتومبیل (OSRM)
-      directions: Ø¬Ù\87ت
+      directions: Ø¯Ø³ØªÙ\88راÙ\84عÙ\85Ù\84
       distance: مسافت
       errors:
-        no_route: نتوانستیم بین آن دو مکان، مسیری بیابیم.
+        no_route: بین این دو مکان، مسیری پیدا نشد.
         no_place: متاسفیم - محل پیدا نشد.
       instructions:
         continue_without_exit: به مسیر %{name} ادامه دهید
@@ -2458,7 +2484,7 @@ fa:
         end_oneway_without_exit: انتهای مسیر یطرفه در %{name}
         roundabout_with_exit: در میدان، خروجی %{exit} به طرف %{name} را انتخاب کنید
         unnamed: بی نام
-        courtesy: Ø¬Ù\87ت Ø§Ø² %{link}
+        courtesy: Ø¯Ø³ØªÙ\88راÙ\84عÙ\85Ù\84â\80\8cÙ\87ا Ø¨Ø§ Ù\87Ù\85کارÛ\8c %{link}
         exit_counts:
           first: اول
           second: دوم
index 30782ba28e27d7c364b8f25d5c34cd5efdb466e3..e69d0cbd7e16e2bd29638828b9908bfb57ec3388 100644 (file)
@@ -1097,9 +1097,7 @@ fi:
     intro_text: OpenStreetMap on tavallisten ihmisten luoma maailmankartta. Palvelun
       käyttäminen on ilmaista avoimen lisenssin ansiosta.
     intro_2_create_account: luomalla ensin käyttäjätunnuksen
-    partners_html: Palvelinta ylläpitävät %{ucl}, %{bytemark}, %{ic} sekä muut %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: kumppanimme
     osm_offline: OpenStreetMapin tietokanta ei toistaiseksi ole käytettävissä välttämättömien
@@ -1404,6 +1402,9 @@ fi:
           <a href="https://data.wien.gv.at/">Stadt Wienistä</a> (<a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY -lisenssillä</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlbergista</a> ja
           Land Tirolista (<a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT -lisenssillä tietyin muutoksin</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Sisältää kaupunginosatietoja
+             Australian Bureau of Statisticsilta.
         contributors_ca_html: |-
           <strong>Kanada</strong>: Sisältää karttatietoja
              GeoBasesta ®, GeoGratisista (© Department of Natural
@@ -1958,7 +1959,7 @@ fi:
       flash: Sovelluksen tiedot on päivitetty.
     destroy:
       flash: Sovelluksen käyttöoikeus on poistettu.
-  user:
+  users:
     login:
       title: Kirjautumissivu
       heading: Kirjaudu
index 5c78de29ea0274de58948b787ce45bfab267d6b0..bed327a8042820000f1e600d5cfa37dd870b099d 100644 (file)
@@ -64,6 +64,7 @@
 # Author: Wladek92
 # Author: Yodaspirine
 # Author: Yvecai
+# Author: Zarisi
 ---
 fr:
   time:
@@ -1128,10 +1129,9 @@ fr:
     intro_text: OpenStreetMap est une carte du monde, créée par des gens comme vous
       et libre d’utilisation sous licence libre.
     intro_2_create_account: Créez un compte d’utilisateur
-    partners_html: L’hébergement est pris en charge par %{ucl}, %{bytemark}, %{ic}
+    hosting_partners_html: L’hébergement est pris en charge par %{ucl}, %{bytemark},
       et d’autres %{partners}.
     partners_ucl: L’University College de Londres
-    partners_ic: le Collège impérial de Londres
     partners_bytemark: l'hébergeur Bytemark
     partners_partners: partenaires
     osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
@@ -1450,6 +1450,10 @@ fr:
           la <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">région
           du Vorarlberg</a> et la région du Tyrol (sous licence <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC
           BY AT avec amendements</a>).'
+        contributors_au_html: "<strong>Australie</strong> : contient des données source
+          de \n<a href=\"https://www.psma.com.au/psma-data-copyright-and-disclaimer\">PSMA
+          Australia Limited</a>\ndont la licence appartient au Commonwealth d'Australie
+          sous \n<a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
         contributors_ca_html: '<strong>Canada</strong> : contient des données de <em>GeoBase</em>®,
           <em>GeoGratis</em> (© Département des Ressources naturelles du Canada),
           <em>CanVec</em> (© Département des Ressources naturelles du Canada) et <em>StatCan</em>
@@ -2031,7 +2035,7 @@ fr:
       flash: Informations du client enregistrées avec succès
     destroy:
       flash: Enregistrement de l’application cliente supprimé
-  user:
+  users:
     login:
       title: Se connecter
       heading: Connexion
@@ -2155,9 +2159,11 @@ fr:
       consider_pd: En plus de l’accord ci-dessus, je considère mes contributions comme
         étant dans le domaine public
       consider_pd_why: qu’est-ce que ceci ?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Pour plus d''information sur ces termes : un <a href="%{summary}">résumé
         lisible</a> et quelques <a href="%{translations}">traductions informelles</a>'
       agree: J’accepte
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Décliner
       you need to accept or decline: Veuillez lire et ensuite soit accepter ou refuser
         les nouvelles conditions de contributeur pour continuer.
index f5885e8dcbfbdbefa1e8825f5981f6f956b6794b..6da404a40f84b57b78c14ed71729fb79fdc952ee 100644 (file)
@@ -631,10 +631,7 @@ fur:
     intro_text: OpenStreetMap e je une mape dal mont, creade di int come te e di ûs
       libar sot di une licence vierte.
     intro_2_create_account: Cree il to profîl utent
-    partners_html: L'hosting al è sostignût di %{ucl}, %{ic}, %{bytemark} e altris
-      %{partners}.
     partners_ucl: UCL VR Centre
-    partners_ic: Imperial College di Londre
     partners_bytemark: Bytemark Hosting
     osm_offline: La base di dâts di OpenStreetMap e je par cumò fûr linie parcè che
       o sin daûr a fâ lavôrs essenziâi di manutenzion de base di dâts.
@@ -1062,7 +1059,7 @@ fur:
       allow_write_diary: creâ vôs dal diari, comentâ e zontâ amîs.
       allow_write_api: modificâ la mape.
       allow_write_notes: cambiâ lis notis.
-  user:
+  users:
     login:
       title: Jentre
       heading: Jentre
index d5471e60c701f5e86e8825479a623b946bcb95dd..679f2966c0c1ca51d8f26f433f7563e379557576 100644 (file)
@@ -940,10 +940,7 @@ ga:
     intro_text: Is léarscáil den domhan é OpenStreetMap, a chruthaigh daoine cosúil
       leatsa agus atá saor in aisce le húsáid faoi cheadúnas oscailte.
     intro_2_create_account: Cruthaigh cuntas úsáideora
-    partners_html: Tugann %{ucl}, %{bytemark}, %{ic} agus %{partners} eile tacaíocht
-      don óstáil.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: comhpháirtithe
     osm_offline: Tá bunachar sonraí OpenStreetMap as líne faoi láthair fad agus atá
@@ -1751,7 +1748,7 @@ ga:
       flash: Tugadh an fhaisnéis faoin gcliant cothrom le dáta
     destroy:
       flash: Scriosadh clárú an chliant-fheidhmchláir
-  user:
+  users:
     login:
       title: Logáil isteach
       heading: Logáil isteach
index 9cb1b7e347d5e343644b08fbece6a06dfd7a10fa..056898982ebdc690d204665d06dee3166c0875a3 100644 (file)
@@ -901,10 +901,7 @@ gd:
     intro_text: '''S e mapa an t-saoghail a tha san OpenStreetMap a chaidh a chruthachadh
       le daoine mar thu fhèin ''s a tha saor fo cheadachas fhosgailte.'
     intro_2_create_account: Cruthaich cunntas cleachdaiche
-    partners_html: Cuiridh an %{ucl}, an %{ic}, %{bytemark} agus %{partners} eile
-      taic ris an òstadh.
     partners_ucl: UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: com-pàirtichean eile
     osm_offline: Tha an stòr-dàta aig OpenStreetMap far loidhńe an-dràsta on a tha
@@ -1773,7 +1770,7 @@ gd:
       flash: Chaidh fiosrachadh a' chliant ùrachadh gu soirbheachail
     destroy:
       flash: Chaidh clàradh na h-aplacaid cliant a mhilleadh
-  user:
+  users:
     login:
       title: Clàraich a-steach
       heading: Clàraich a-steach
index cd2b550374ea4f7206464b33d9c624c0430e9c96..26cc5443ce60acc518ad4d6cbbfcdb1440d13fa0 100644 (file)
@@ -23,8 +23,8 @@ gl:
   activerecord:
     models:
       acl: Listaxe do control de acceso
-      changeset: Conxunto de cambios
-      changeset_tag: Etiqueta do conxunto de cambios
+      changeset: Conxunto de mudanzas
+      changeset_tag: Etiqueta do conxunto de mudanzas
       country: País
       diary_comment: Comentario do diario
       diary_entry: Entrada do diario
@@ -115,7 +115,7 @@ gl:
     edited_by_html: Editado <abbr title='%{title}'>hai %{time}</abbr> por %{user}
     closed_by_html: Pechado <abbr title='%{title}'>hai %{time}</abbr> por %{user}
     version: Versión
-    in_changeset: Conxunto de cambios
+    in_changeset: Conxunto de mudanzas
     anonymous: anónimo
     no_comment: (sen comentarios)
     part_of: Parte de
@@ -124,7 +124,7 @@ gl:
     view_details: Ve-los detalles
     location: 'Localización:'
     changeset:
-      title: 'Conxunto de cambios: %{id}'
+      title: 'Conxunto de mudanzas: %{id}'
       belongs_to: Autor
       node: Nós (%{count})
       node_paginated: Nós (%{x}-%{y} de %{count})
@@ -136,15 +136,15 @@ gl:
       hidden_commented_by: Comentario agochado de %{user} <abbr title='%{exact_time}'>
         hai %{when}</abbr>
       commented_by: Comentario de %{user} <abbr title='%{exact_time}'> hai %{when}</abbr>
-      changesetxml: Conxunto de cambios do XML
+      changesetxml: Conxunto de mudanzas do XML
       osmchangexml: osmChange XML
       feed:
-        title: Conxunto de cambios %{id}
-        title_comment: Conxunto de cambios %{id} - %{comment}
+        title: Conxunto de mudanzas %{id}
+        title_comment: Conxunto de mudanzas %{id} - %{comment}
       join_discussion: Inicia-la sesión pra unirse á parola
       discussion: Parola
-      still_open: O conxunto de cambios segue aberto - Abrirase a parola cando o conxunto
-        de cambios estea pechado.
+      still_open: O conxunto de mudanzas segue aberto - Abrirase a parola cando o
+        conxunto de mudanzas estea pechado.
     node:
       title: 'Nó: %{name}'
       history_title: 'Historial do nó: %{name}'
@@ -175,7 +175,7 @@ gl:
         node: nó
         way: camiño
         relation: relación
-        changeset: conxunto de cambios
+        changeset: conxunto de mudanzas
         note: nota
     timeout:
       sorry: Tardouse demasiado en obter os datos para o %{type} co id %{id}.
@@ -183,7 +183,7 @@ gl:
         node: nó
         way: camiño
         relation: relación
-        changeset: conxunto de cambios
+        changeset: conxunto de mudanzas
         note: nota
     redacted:
       redaction: Redacción %{id}
@@ -195,7 +195,7 @@ gl:
         relation: relación
     start_rjs:
       feature_warning: A carga de %{num_features} características pode facer que o
-        seu navegador vaia lento ou que non responda. Está seguro de querer amosar
+        seu navegador vaia lento ou que non responda. Está na certeza de querer amosar
         eses datos?
       load_data: Cargar os datos
       loading: Cargando...
@@ -229,8 +229,8 @@ gl:
       report: Informar desta nota
     query:
       title: Consulta-las características
-      introduction: Prema no mapa para atopar características preto daquí.
-      nearby: Características preto daquí
+      introduction: Prema no mapa para atopar características preto daquí.
+      nearby: Características preto daquí
       enclosing: Características envolventes
   changeset:
     changeset_paging_nav:
@@ -240,7 +240,7 @@ gl:
     changeset:
       anonymous: Anónimo
       no_edits: (sen edicións)
-      view_changeset_details: Ve-los detalles do conxunto de cambios
+      view_changeset_details: Ve-los detalles do conxunto de mudanzas
     changesets:
       id: ID
       saved_at: Gardado o
@@ -248,24 +248,24 @@ gl:
       comment: Comentario
       area: Zona
     index:
-      title: Conxuntos de cambios
-      title_user: Conxuntos de cambios por %{user}
-      title_friend: Conxuntos de cambios das amizades
-      title_nearby: Conxuntos de cambios dos usuarios de lugares preto de ti
-      empty: Non se atoparon conxuntos de cambios.
-      empty_area: Non hai conxuntos de cambios nesta zona.
-      empty_user: Non hai conxuntos de cambios deste usuario.
-      no_more: Non se atoparon máis conxuntos de cambios.
-      no_more_area: Non hai máis conxuntos de cambios nesta zona.
-      no_more_user: Non hai máis conxuntos de cambios deste usuario.
+      title: Conxuntos de mudanzas
+      title_user: Conxuntos de mudanzas por %{user}
+      title_friend: Conxuntos de mudanzas das amizades
+      title_nearby: Conxuntos de mudanzas dos usuarios de lugares preto de ti
+      empty: Non se atoparon conxuntos de mudanzas.
+      empty_area: Non hai conxuntos de mudanzas nesta zona.
+      empty_user: Non hai conxuntos de mudanzas deste usuario.
+      no_more: Non se atoparon máis conxuntos de mudanzas.
+      no_more_area: Non hai máis conxuntos de mudanzas nesta zona.
+      no_more_user: Non hai máis conxuntos de mudanzas deste usuario.
       load_more: Cargar máis
     timeout:
-      sorry: Desculpe que levase moito tempo obter a listaxe do conxunto de cambios
+      sorry: Desculpe que levase moito tempo obte-la listaxe do conxunto de mudanzas
         que solicitou.
     rss:
       title_all: Parola da edición no OpenStreetMap
       title_particular: 'Parola da edición #%{changeset_id} no OpenStreetMap'
-      comment: 'Novo comentario sobre os cambios #%{changeset_id} de %{author}'
+      comment: 'Novo comentario sobre as mudanzas #%{changeset_id} de %{author}'
       commented_at_html: Actualizado hai %{when}
       commented_at_by_html: Actualizado hai %{when} por %{user}
       full: Parola completa
@@ -794,7 +794,7 @@ gl:
           stop: Parada de ferrocarril
           subway: Metro
           subway_entrance: Boca de metro
-          switch: Puntos de cambio de vía
+          switch: Puntos de mudanza de vía
           tram: Vía de tranvías
           tram_stop: Parada de tranvías
         shop:
@@ -1022,7 +1022,7 @@ gl:
       select: Seleccione unha razón pola que queira informarnos
       disclaimer:
         intro: 'Antes de enviarlle o informe aos moderadores, asegúrese de que:'
-        not_just_mistake: Vostede está seguro/a de que o problema non é un simple
+        not_just_mistake: Vostede está na certeza de que o problema non é un sinxelo
           erro
         unable_to_fix: Non é quen de arranxar o problema só ou coa axuda dos membros
           da comunidade
@@ -1081,10 +1081,8 @@ gl:
     intro_text: O OpenStreetMap é un mapa do mundo, creado por xente coma vostede
       e de libre uso baixo unha licenza aberta.
     intro_2_create_account: Cree unha conta de usuario
-    partners_html: O aloxamento é posible grazas ao %{ucl}, %{bytemark}, %{ic}, e
-      outros %{partners}.
+    hosting_partners_html: O hosting é apoiado por %{ucl}, %{bytemark} e outros %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: socios
     osm_offline: A base de datos do OpenStreetMap atópase desconectada mentres realizamos
@@ -1153,13 +1151,13 @@ gl:
       subject: '[OpenStreetMap] Confirme o seu enderezo de correo electrónico'
     email_confirm_plain:
       greeting: 'Ola:'
-      hopefully_you: Alguén (probablemente vostede) quere cambiar o seu enderezo de
+      hopefully_you: Alguén (probábelmente vostede) quere muda-lo seu enderezo do
         correo electrónico en %{server_url} a %{new_address}.
       click_the_link: Se este é vostede, prema na seguinte ligazón para confirma-la
         modificación.
     email_confirm_html:
       greeting: 'Ola:'
-      hopefully_you: Alguén (probablemente vostede) quere cambiar o seu enderezo de
+      hopefully_you: Alguén (probábelmente vostede) quere muda-lo seu enderezo do
         correo electrónico en %{server_url} a %{new_address}.
       click_the_link: Se este é vostede, prema na seguinte ligazón para confirma-la
         modificación.
@@ -1208,17 +1206,17 @@ gl:
       greeting: Ola,
       commented:
         subject_own: O %{commenter} de [OpenStreetMap] fixo un comentario nun dos
-          seus conxuntos de cambios
-        subject_other: '[OpenStreetMap] %{commenter} comentou nun conxunto de cambios
+          seus conxuntos de mudanzas
+        subject_other: '[OpenStreetMap] %{commenter} comentou nun conxunto de mudanzas
           no que estás atinxido'
         your_changeset: '%{commenter} deixou un comentario nun dos seus conxuntos
-          de cambios xerado o %{time}'
-        commented_changeset: '%{commenter} deixou un comentario nun conxunto de cambios
-          do mapa que está seguindo, xerado por %{changeset_author} o %{time}'
+          de mudanzas xerado o %{time}'
+        commented_changeset: '%{commenter} deixou un comentario nun conxunto de mudanzas
+          do mapa que está a seguer, xerado por %{changeset_author} o %{time}'
         partial_changeset_with_comment: co comentario '%{changeset_comment}'
         partial_changeset_without_comment: sen comentarios
-      details: Pódense atopar máis detalles acerca do conxunto de cambios en %{url}.
-      unsubscribe: Para darse de baixa das actualizacións deste conxunto de cambios,
+      details: Pódense atopar máis detalles acerca do conxunto de mudanzas en %{url}.
+      unsubscribe: Para darse de baixa das actualizacións deste conxunto de mudanzas,
         olle %{url} e prema en "darse de baixa".
   messages:
     inbox:
@@ -1408,6 +1406,9 @@ gl:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> e
           Land Tirol (baixo a licenza <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT con emendas</a>).
+        contributors_au_html: |-
+          <strong>Australia:</strong> Contén datos de barrios baseados
+          nos datos do Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Canadá:</strong> Contén datos de
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1488,12 +1489,12 @@ gl:
         Flash de OpenStreetMap. Pode <a href="https://get.adobe.com/flashplayer/">descargar
         Flash do sitio Adobe.com</a>. <a href="https://wiki.openstreetmap.org/wiki/Editing">Tamén
         están dispoñíbeis outras opcións</a> para editar OpenStreetMap.
-      potlatch_unsaved_changes: Ten cambios sen gardar. (Para gardalos no Potlatch
-        ten que desmarcar o camiño actual ou o punto se está a editar no modo en vivo
+      potlatch_unsaved_changes: Ten mudanzas sen gardar. (Para gardalas no Potlatch
+        ten que desmarca-la vía actual ou o punto se está a editar no modo ao vivo
         ou premer sobre o botón "Gardar".)
       potlatch2_not_configured: O Potlatch 2 non está configurado; consulte https://wiki.openstreetmap.org/wiki/The_Rails_Port
         para obter máis información
-      potlatch2_unsaved_changes: Ten cambios sen gardar. (Para gardar no Potlatch
+      potlatch2_unsaved_changes: Ten mudanzas sen gardar. (Para gardar no Potlatch
         2, prema en "Gardar".)
       id_not_configured: O iD non está configurado
       no_iframe_support: O seu navegador non soporta os iframes HTML, necesarios para
@@ -1800,7 +1801,7 @@ gl:
       description: 'Descrición:'
       tags: 'Etiquetas:'
       tags_help: separadas por comas
-      save_button: Garda-los cambios
+      save_button: Garda-las mudanzas
       visibility: 'Visibilidade:'
       visibility_help: que significa isto?
       visibility_help_url: https://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
@@ -1939,7 +1940,7 @@ gl:
       support_notice: Soportamos HMAC-SHA1 (recomendado) e sinaturas RSA-SHA1.
       edit: Edita-los detalles
       delete: Borrar o cliente
-      confirm: Está seguro?
+      confirm: Está na certeza?
       requests: 'Solicitar os seguintes permisos ao usuario:'
       allow_read_prefs: ler as súas preferencias de usuario.
       allow_write_prefs: modificar as súas preferencias de usuario.
@@ -1983,7 +1984,7 @@ gl:
       flash: Actualizou correctamente a información do cliente
     destroy:
       flash: Destruíu o rexistro da aplicación de cliente
-  user:
+  users:
     login:
       title: Rexistrarse
       heading: Rexistro
@@ -2185,9 +2186,9 @@ gl:
       unhide_user: Descobrir este usuario
       delete_user: Borrar este usuario
       confirm: Confirmar
-      friends_changesets: conxuntos de cambios das amizades
+      friends_changesets: conxuntos de mudanzas das amizades
       friends_diaries: entradas de diario das amizades
-      nearby_changesets: conxuntos de cambios dos usuarios de lugares preto de ti
+      nearby_changesets: conxuntos de mudanzas dos usuarios de lugares preto de ti
       nearby_diaries: entradas de diario dos usuarios de lugares preto de ti
       report: Denunciar este usuario
     popup:
@@ -2253,7 +2254,7 @@ gl:
       longitude: 'Lonxitude:'
       update home location on click: Quere actualiza-lo lugar do enderezo ó premer
         sobre o mapa?
-      save changes button: Garda-los cambios
+      save changes button: Garda-las mudanzas
       make edits public button: Facer públicas todas as miñas edicións
       return to profile: Voltar ó perfil
       flash update success confirm needed: Información de usuario actualizada correctamente.
@@ -2279,17 +2280,17 @@ gl:
         proceso sen problemas.
       failure: Non se atopou o usuario "%{name}".
     confirm_email:
-      heading: Confirma-lo cambio do enderezo de correo electrónico
+      heading: Confirma-la mudanza do enderezo de correo electrónico
       press confirm button: Prema sobre o botón de confirmación que aparece deseguido
         para confirmar o seu novo enderezo de correo electrónico.
       button: Confirmar
-      success: Confirmámoslle o cambio enderezo de enderezo electrónico!
+      success: Confirmámoslle a mudanza do enderezo de correo electrónico!
       failure: Xa se confirmou un enderezo de correo electrónico con este pase.
       unknown_token: Ese código de confirmación caducou ou non existe.
     set_home:
       flash success: Gardouse o domicilio
     go_public:
-      flash success: Todas as súas edicións son públicas e agora está autorizado a
+      flash success: Tódalas súas edicións son públicas e agora está autorizado a
         editar.
     make_friend:
       heading: Quere engadir a %{user} coma amizade?
@@ -2317,8 +2318,8 @@ gl:
       hide: Agochar os usuarios seleccionados
       empty: Non se atoparon usuarios que coincidisen
     suspended:
-      title: Conta cancelada
-      heading: Conta cancelada
+      title: Conta suspendida
+      heading: Conta suspendida
       webmaster: webmaster
       body: |-
         <p>
@@ -2354,14 +2355,16 @@ gl:
     grant:
       title: Confirma-la concesión do rol
       heading: Confirma-la concesión do rol
-      are_you_sure: Seguro que quere concederlle o rol "%{role}" ao usuario "%{name}"?
+      are_you_sure: Está na certeza de que quere concederlle o rol "%{role}" ó usuario
+        "%{name}"?
       confirm: Confirmar
       fail: Non se lle puido conceder o rol "%{role}" ao usuario "%{name}". Comprobe
         que tanto o usuario coma o rol son correctos.
     revoke:
       title: Confirma-la revogación do rol
       heading: Confirma-la revogación do rol
-      are_you_sure: Seguro que quere revogarlle o rol "%{role}" ao usuario "%{name}"?
+      are_you_sure: Está na certeza de que quere revogarlle o rol "%{role}" ó usuario
+        "%{name}"?
       confirm: Confirmar
       fail: Non se lle puido revogar o rol "%{role}" ao usuario "%{name}". Comprobe
         que tanto o usuario coma o rol son correctos.
@@ -2422,7 +2425,7 @@ gl:
       heading: Revogando o bloqueo en %{block_on} por %{block_by}
       time_future: Este bloqueo rematará en %{time}.
       past: Este bloqueo rematou hai %{time}. Entón, xa non se pode retirar.
-      confirm: Está seguro de querer retirar este bloqueo?
+      confirm: Está na certeza de querer retirar este bloqueo?
       revoke: Revogar!
       flash: Revogouse o bloqueo.
     period:
@@ -2453,7 +2456,7 @@ gl:
       show: Amosar
       edit: Editar
       revoke: Revogar!
-      confirm: Está seguro?
+      confirm: Está na certeza?
       reason: 'Motivo para o bloqueo:'
       back: Ollar tódolos bloqueos
       revoker: 'Autor da revogación:'
@@ -2509,7 +2512,7 @@ gl:
     close: Pechar
     share:
       title: Compartir
-      cancel: Cancelar
+      cancel: Desbotar
       image: Imaxe
       link: Ligazón ou HTML
       long_link: Ligazón
@@ -2567,7 +2570,7 @@ gl:
       show:
         comment: Comentario
         subscribe: Subscribirse
-        unsubscribe: Cancela-la subscrición
+        unsubscribe: Desbota-la subscrición
         hide_comment: agochar
         unhide_comment: amosar
     notes:
@@ -2718,11 +2721,11 @@ gl:
       user: 'Creador:'
       edit: Editar esta redacción
       destroy: Eliminar esta redacción
-      confirm: Está seguro?
+      confirm: Está na certeza?
     create:
       flash: Redacción creada.
     update:
-      flash: Gardáronse os cambios.
+      flash: Gardáronse as mudanzas.
     destroy:
       not_empty: A redacción non está baleira. Elimine todas as versións previas pertencentes
         a esta redacción antes de destruíla.
index 025a97119f5d1a45c91421f8423bb41c4fc72f8f..36d4c590bd9d12fc9909838e525512739904c8a2 100644 (file)
@@ -977,9 +977,7 @@ he:
     intro_text: OpenStreetMap היא מפה של העולם, שנוצרת על־ידי אנשים כמוך, וחופשית
       לשימוש תחת רישיון פתוח.
     intro_2_create_account: נא ליצור חשבון משתמש
-    partners_html: האירוח נתמך על־ידי  %{ucl}‏, %{bytemark}, %{ic}, ו%{partners} אחרים
     partners_ucl: UCL
-    partners_ic: המכללה המלכותית של לונדון
     partners_bytemark: Bytemark Hosting
     partners_partners: שותפים
     osm_offline: מסד הנתונים של אתר OpenStreetMap אינו מקוון כעת בשל עבודות תחזוקה
@@ -1280,6 +1278,9 @@ he:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>,
           מ<a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">מדינת פורארלברג</a>
           וממדינת טירול (לפי <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT עם תיקונים</a>).
+        contributors_au_html: |-
+          <strong>אוסטרליה</strong>: מכיל מנתוני פרוורים המבוססים על
+          נתוני הלשכה האוסטרלית לסטטיסטיקה (Australian Bureau of Statistics).
         contributors_ca_html: |-
           <strong>קנדה</strong>: מכיל נתונים
           מ־GeoBase&reg;&rlm;, GeoGratis&rlm; (&copy;&rlm; Department of Natural
@@ -1810,7 +1811,7 @@ he:
       flash: מידע הלקוח עודכן בהצלחה
     destroy:
       flash: רישום יישום הלקוח נהרס
-  user:
+  users:
     login:
       title: כניסה
       heading: כניסה
index 8cab0b0040c9c663584f439d0ff5727fa02d6f41..d400e50116052f9db95fa958459fb97c2121b534 100644 (file)
@@ -1099,6 +1099,8 @@ hr:
         contributors_intro_html: 'Sudionici projekta su tisuće individualaca. Projekt
           također uključuje podatke pod slobodnim licencama od nacionalnih kartografskih
           agencija i drugih izvora, među kojima su:'
+        contributors_au_html: '<strong>Australija</strong>: Sadrži podatke o predgrađima
+          na osnovu podataka Australian Bureau of Statistics.'
         contributors_ca_html: |-
           <strong>Kanada</strong>: Sadrži podatke iz
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1500,7 +1502,7 @@ hr:
       flash: Informacije o klijentu uspješno ažurirane
     destroy:
       flash: Uništena registracija klijent aplikacije
-  user:
+  users:
     login:
       title: Prijava
       heading: 'Prijava:'
index c0d9ca3ab340d2fbe92346623eef04c321585170..cee65b4f059b75b075f695e623f7ad63ba6d0828 100644 (file)
@@ -884,10 +884,7 @@ hsb:
     intro_text: OpenStreetMap je karta swěta, wutworjena wot ludźi kaž tebje a hodźi
       so swobodnje pod wotewrjenej licencu wužiwać.
     intro_2_create_account: Załož wužiwarske konto
-    partners_html: Hostowanje so wot %{ucl}, %{ic}, %{bytemark} a druhich %{partners}
-      podpěruje.
     partners_ucl: z UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerow
     osm_offline: Datowa banka OpenStreetMap je tuchwilu offline, dokelž so wažne wobhladowankse
@@ -1186,6 +1183,9 @@ hsb:
           BY</a>), <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a> a Land Tirol (pod <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT ze změnami</a>).'
+        contributors_au_html: '<strong>Awstralska</strong>: Wobsahuje předměšćanske
+          daty na zakładźe datow Awstralskeho  zarjada za statistiku (Australian Bureau
+          of Statistics).'
         contributors_ca_html: '<strong>Kanada</strong>: Wobsahuje daty z GeoBase&reg;,
           GeoGratis (&copy; Department of Natural Resources Canada), CanVec (&copy;
           Department of Natural Resources Canada), a StatCan (Geography Division,
@@ -1718,7 +1718,7 @@ hsb:
       flash: Klientowe informacije wuspěšnje zaktualizowane
     destroy:
       flash: Registrowanje klientoweje aplikacije bu zničene
-  user:
+  users:
     login:
       title: Přizjewjenje
       heading: Přizjewjenje
index 3799bfc8482dc3d2af6fbf37ce9cf720f89940bf..4dc589c1e642f21ce4f7a9255e7523b182574f68 100644 (file)
@@ -972,10 +972,7 @@ hu:
     intro_text: Az OpenStreetMap egy világtérkép, amelyet hozzád hasonló emberek készítenek
       és szabad licenc alatt elérhető.
     intro_2_create_account: Felhasználói fiók létrehozása
-    partners_html: A szerver üzemeltetését az %{ucl}, a %{bytemark}, az %{ic} és további
-      %{partners} támogatják.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerek
     osm_offline: Az OpenStreetMap-adatbázis jelenleg offline, miközben alapvető adatbázis-karbantartási
@@ -1285,6 +1282,9 @@ hu:
           <strong>Ausztria</strong>: adatokat tartalmaz a következő forrásból:
              <a href="https://data.wien.gv.at/">Bécs városa</a>
              <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a> licenc alatt.
+        contributors_au_html: |-
+          <strong>Ausztrália</strong>: tartalmaz külvárosi adatokat az
+             Ausztrál Statisztikai Hivatal adatain alapulva.
         contributors_ca_html: |-
           <strong>Kanada</strong>: adatokat tartalmaz a következő forrásokból:
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1829,7 +1829,7 @@ hu:
       flash: A kliens információi sikeresen frissítve
     destroy:
       flash: A kliensalkalmazás regisztrációja törölve
-  user:
+  users:
     login:
       title: Bejelentkezés
       heading: Bejelentkezés
index f5188f1ea2d629f8fd54de6a1c8098e9c36d6161..c322855f7f45536a502aa2908536ded185e7d5e2 100644 (file)
@@ -896,10 +896,7 @@ ia:
     intro_text: OpenStreetMap es un carta del mundo, create per gente como tu e libere
       de usar sub un licentia aperte.
     intro_2_create_account: Crea un conto de usator
-    partners_html: Le allogiamento web es supportate per %{ucl}, %{bytemark}, %{ic}
-      e altere %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partners
     osm_offline: Le base de datos de OpenStreetMap non es disponibile al momento debite
@@ -1207,6 +1204,9 @@ ia:
           <strong>Austria</strong>: Contine datos ab le
              <a href="https://data.wien.gv.at/">Citate de Vienna</a> licentiate sub
              <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>.
+        contributors_au_html: |-
+          <strong>Australia</strong>: Contine datos de suburbios a base
+             de datos del Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Canada</strong>: Contine datos ab
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1761,7 +1761,7 @@ ia:
       flash: Le information del cliente ha essite actualisate con successo
     destroy:
       flash: Le registration del application cliente ha essite destruite
-  user:
+  users:
     login:
       title: Aperir session
       heading: Aperir session
index 69e9f896c2640df1b57128233960358e9193dbf8..fc3848543076989a09b209bf88fb070d76a3c394 100644 (file)
@@ -947,10 +947,7 @@ id:
     intro_text: OpenStreetMap adalah peta dunia, diciptakan oleh orang-orang seperti
       Anda dan bebas untuk digunakan di bawah lisensi terbuka.
     intro_2_create_account: Buat Akun
-    partners_html: Hosting didukung oleh %{ucl}, %{ic} dan %{bytemark} dan %{partners}
-      lainnya.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Hosting Bytemark
     partners_partners: mitra
     osm_offline: Database OpenStreetMap saat ini sedang dimatikan karena sedang dilakukan
@@ -1821,7 +1818,7 @@ id:
       flash: Informasi klien telah sukses diperbarui.
     destroy:
       flash: Registrasi aplikasi klien telah dibatalkan.
-  user:
+  users:
     login:
       title: Login
       heading: Login
index 7f8920f2d5753abfae291fbc0f2dde643dbc861a..9583e060e3ff2d3c64b96a3ea7094bac1a044063 100644 (file)
@@ -1029,9 +1029,7 @@ is:
     intro_text: OpenStreetMap er heimskort búið til af fólki eins og þér. Það er gefið
       út með opnu hugbúnaðarleyfi og það kostar ekkert að nota það.
     intro_2_create_account: Búa til notandaaðgang
-    partners_html: Vefhýsing er studd af %{ucl}, %{bytemark}, %{ic}, og öðrum %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: samstarfsaðilum
     osm_offline: OpenStreetMap gagnagrunnurinn er niðri vegna viðhalds.
@@ -1939,7 +1937,7 @@ is:
       flash: Uppfærði upplýsingar biðlaraforritsins
     destroy:
       flash: Eyðilagði skráningu biðlaraforritsins
-  user:
+  users:
     login:
       title: Innskrá
       heading: Innskrá
index 478460809c433e335d42beb345367afababf7a71..2fa9107ea74a6dfe1e01d11522b8dd59a0527e4f 100644 (file)
@@ -1104,10 +1104,7 @@ it:
     intro_text: OpenStreetMap è una mappa del mondo, creata da persone come te e libera
       da utilizzare secondo una licenza aperta.
     intro_2_create_account: Crea un account utente
-    partners_html: L'hosting è supportato da %{ucl}, %{bytemark}, %{ic} e da altri
-      %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College (Londra)
     partners_bytemark: Bytemark Hosting
     partners_partners: partner
     osm_offline: Il database di OpenStreetMap è al momento non in linea per permettere
@@ -1419,6 +1416,9 @@ it:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> e
           Land Tirol (sotto <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT con emendamenti</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: contiene i dati della periferia basati
+          sui dati dell'Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Canada</strong>: contiene i dati della
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1989,7 +1989,7 @@ it:
       flash: Aggiornate con successo le informazioni sul client
     destroy:
       flash: Distrutta la registrazione dell'applicazione client
-  user:
+  users:
     login:
       title: Entra
       heading: Entra
index 37da9173c1ec111dd1b9755fcbae4ff9bffc6e20..ee0e9a621e99febed7d48a4ff48dd6e219c3d7b4 100644 (file)
@@ -946,6 +946,9 @@ ja:
     results:
       no_results: 該当するものはありません
       more_results: その他の結果
+  issues:
+    index:
+      last_updated_time_html: <abbr title='%{title}'>%{time}前</abbr>
   layouts:
     logo:
       alt_text: OpenStreetMap ロゴ
@@ -970,9 +973,7 @@ ja:
     intro_header: OpenStreetMap へようこそ!
     intro_text: OpenStreetMap は、あなたのような人々が作成した世界地図であり、オープン ライセンスの下で自由に利用できます。
     intro_2_create_account: 新しい利用者アカウントを作成
-    partners_html: 'ホスティング支援者: %{ucl}、%{bytemark}、%{ic}及びその他の%{partners}'
     partners_ucl: UCL
-    partners_ic: インペリアル カレッジ ロンドン
     partners_bytemark: バイトマーク ホスティング
     partners_partners: パートナー
     osm_offline: OpenStreetMap のデータベースはメンテナンスのため一時的に停止しています。
@@ -1690,7 +1691,7 @@ ja:
       flash: クライアント情報の更新が正常に終了しました
     destroy:
       flash: 破棄されたクライアント アプリケーションの登録
-  user:
+  users:
     login:
       title: ログイン
       heading: ログイン
index 1f85fe55a9a21c0f10427d0c29db2fd3ff907916..c08565f3728bf5deb6015bee750b132a25ef9d25 100644 (file)
@@ -1006,7 +1006,7 @@ ka:
       name: სახელი
       required: სავალდებულოა
       allow_write_api: რუკის რედაქტირება.
-  user:
+  users:
     login:
       title: შესვლა
       heading: შესვლა
index 7cb76e29247eaed476c6b529d79994449bbcff6f..2018fe5b847e5418c3d936f37dc9b42d0dd28260 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: Alem
 # Author: Belkacem77
+# Author: Marzuquccen
 # Author: Mastanabal
 # Author: Mhenni
 # Author: MustaphaLateb
@@ -344,12 +345,12 @@ kab:
   geocoder:
     search:
       title:
-        latlon: Igmaḍ  <a href="http://openstreetmap.org/">igensanen</a>
-        ca_postcode: Igmaḍ si <a href="http://geocoder.ca/">Geocoder.CA</a>
-        osm_nominatim: Igmaḍ si <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+        latlon: Igmaḍ  seg <a href="https://openstreetmap.org/">igensanen</a>
+        ca_postcode: Igmaḍ si <a href="https://geocoder.ca/">Geocoder.CA</a>
+        osm_nominatim: Igmaḍ si <a href="https://nominatim.openstreetmap.org/">OpenStreetMap
           Nominatim</a>
         geonames: Igmaḍ si <a href="http://www.geonames.org/">GeoNames</a>
-        osm_nominatim_reverse: Igmaḍ si <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+        osm_nominatim_reverse: Igmaḍ si <a href="https://nominatim.openstreetmap.org/">OpenStreetMap
           Nominatim</a>
         geonames_reverse: Igmaḍ si <a href="http://www.geonames.org/">GeoNames</a>
     search_osm_nominatim:
@@ -603,12 +604,42 @@ kab:
           butcher: Agezzar
           car: Tahanutt n tkeryas
           car_parts: Ticeqqufin n ubeddel n tkeryas
+          clothes: Taḥanut n icetiḍen
+          computer: Taḥanut n iselkimen
+          confectionery: Taḥanut n ḥlawat
+          copyshop: Taḥanut n talsuffeɣt
+          cosmetics: Taḥanut n rwayeḥ
+          department_store: Taḥanut tameqqrant
+          farm: Tahanutt n tkeryas n tfellaḥt
+          fish: Taḥanut n iselman
+          florist: Taḥanut n ijeǧǧigen
+          food: Taḥanut n wuččan
+          gift: Taḥanut n isefan
+          greengrocer: Ameznuz n lxeḍra
+          hairdresser: Aḥeffaf
+          hifi: Taḥanut Hi-Fi
+          interior_decoration: Azewweq n daxel
+          jewelry: Taḥanut n sdaq
+          lottery: Loto
+          market: Suq
+          mobile_phone: Taḥanut n tilifunat ufus
+          newsagent: Ameznuz n iǧarnanen
+          optician: Taḥanut n nwaḍer
+          pharmacy: Taḥanut n ddwa
+          shoes: Taḥanut n isebbaḍen
+          sports: Taḥanut n tɣawsiwin n waddal
+          supermarket: Ssuq ameqqran
+          ticket: Taḥanut n itikiyen
+          tobacco: Birutabac
+          toys: Taḥanut n illelucen
+          tyres: Taḥanut n rwadi
           "yes": Taḥanut
         tourism:
           hostel: Azebriz
           hotel: Asensu
           information: Talɣut
           museum: Asalay
+          zoo: Zoo
         tunnel:
           "yes": Ifri
         waterway:
@@ -628,7 +659,7 @@ kab:
         level10: Talast n ugmama
     description:
       title:
-        osm_nominatim: Asideg si <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+        osm_nominatim: Asideg si <a href="https://nominatim.openstreetmap.org/">OpenStreetMap
           Nominatim</a>
         geonames: Adig si <a href="http://www.geonames.org/">GeoNames</a>
       types:
@@ -663,10 +694,7 @@ kab:
     intro_text: OpenStreetMap d takarḍa n umadal, rnna-tt yemdanen am kečč d tilellit
       i useqdec ddaw n turagt tilellit.
     intro_2_create_account: Rnu amiḍan n useqdac
-    partners_html: Tanezduɣt muddentt-id %{ucl},%{bytemark}, %{ic}, d %{partners}
-      nniḍen.
     partners_ucl: UCL
-    partners_ic: Aɣerbaz impiryal n Lundun
     partners_bytemark: Tanezduɣt n Bytemark
     partners_partners: imendiden
     osm_offline: Taffa n isefka n OpenStreetMap ur teqqin ara yakan tura imi aseǧǧem
@@ -957,7 +985,7 @@ kab:
       get_directions: Awi iwellihen
       from: Seg
       to: I
-      where_am_i: Anida lliɣ?
+      where_am_i: Anida yella waya?
       submit_text: Ddu
     key:
       table:
@@ -971,7 +999,7 @@ kab:
     richtext_area:
       edit: Ẓreg
     markdown_help:
-      title_html: Yettwasleḍ s <a href="http://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Yettwasleḍ s <a  href="https://daringfireball.net/projects/markdown/">Markdown</a>
       headings: Izwal
       heading: Azwel
       subheading: Azwel asnawan
@@ -1148,7 +1176,7 @@ kab:
       allow_read_gpx: ɣeṛ lǧerrat GPS usligen.
       allow_write_gpx: azen lǧerrat GPS.
       allow_write_notes: snifel tizmilin.
-  user:
+  users:
     login:
       title: Qqen
       heading: Qqen
index a50eac416eabdeab2e873ab0402d26e566da60fa..3a94940fc4a0b4b6bdb74383e4b6f00aa030957c 100644 (file)
@@ -761,7 +761,7 @@ km:
     form:
       name: ឈ្មោះ​
       allow_write_api: កែសម្រួលផែនទី​
-  user:
+  users:
     login:
       title: កត់ឈ្មោះចូល
       heading: កត់ឈ្មោះចូល
index 7518a566653f57fe36485138160bf86dfcc23cde..065c63318810d8cde2009f9dc6ca29b4d9a11ee3 100644 (file)
@@ -636,7 +636,7 @@ kn:
       map: ನಕ್ಷೆ
       edit: ಸಂಪಾದಿಸಿ
       description: 'ವಿವರ:'
-  user:
+  users:
     login:
       title: ಲಾಗ್ ಇನ್
       password: 'ಪ್ರವೇಶಪದ:'
index 9cf339afe417227c9d44b836785346202fb1a0d8..7726c301a80e4af2f7683a1f81853e0ed0df2ec4 100644 (file)
@@ -1032,12 +1032,16 @@ ko:
         diary_entry:
           spam_label: 이 일기 항목은 스팸입니다
           offensive_label: 이 일기 항목은 음란물이거나 모욕적입니다
+          threat_label: 이 일기 항목은 위협을 포함합니다
           other_label: 기타
         diary_comment:
           spam_label: 이 일기 댓글은 스팸입니다
+          offensive_label: 이 일기 댓글은 타당치 않거나 공격적입니다
+          threat_label: 이 일기 댓글은 위협을 포함합니다
           other_label: 기타
         user:
           spam_label: 이 사용자 프로필은 스팸이거나 스팸을 포함합니다
+          offensive_label: 이 사용자 프로필은 타당치 않거나 공격적입니다
           threat_label: 이 사용자 프로필에 위협이 포함되어 있습니다
           vandal_label: 이 사용자는 문서 훼손자입니다
           other_label: 기타
@@ -1076,9 +1080,8 @@ ko:
     intro_header: OpenStreetMap에 오신 것을 환영합니다!
     intro_text: OpenStreetMap은 여러분과 같은 사람들이 만들어, 개방형 라이선스에 따라 자유롭게 사용할 수 있는 세계 지도입니다.
     intro_2_create_account: 사용자 계정을 만드세요
-    partners_html: 호스팅은 %{ucl}, %{ic}, %{bytemark}, 다른 %{partners}에서 지원합니다.
+    hosting_partners_html: 호스팅은 %{ucl}, %{bytemark}, 다른 %{partners}에서 지원합니다.
     partners_ucl: UCL
-    partners_ic: 임페리얼 칼리지 런던 대학
     partners_bytemark: 바이트마크 호스팅
     partners_partners: 협력단체
     osm_offline: 데이터베이스 점검을 위해 OpenStreetMap의 데이터가 현재 오프라인입니다.
@@ -1721,6 +1724,8 @@ ko:
       save_button: 바뀜 저장
       visibility: '공개 여부:'
       visibility_help: 이게 무슨 뜻입니까?
+    update:
+      updated: 추적 업데이트됨
     trace_optionals:
       tags: 태그
     show:
@@ -1892,7 +1897,7 @@ ko:
       flash: 성공적으로 클라이언트 정보를 업데이트했습니다
     destroy:
       flash: 클라이언트 애플리케이션 등록을 파기했습니다
-  user:
+  users:
     login:
       title: 로그인
       heading: 로그인
@@ -1999,9 +2004,11 @@ ko:
       read and accept: 아래의 계약을 읽고 기존 및 앞으로의 기여가 계약 약관에 동의했는지 확인하려면 동의 버튼을 누르세요.
       consider_pd: 위의 계약뿐만 아니라 내 기여가 퍼블릭 도메인에 있는지 고려하세요
       consider_pd_why: 이게 뭐죠?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: '약관을 이해하는 데 유용한 정보: <a href="%{summary}">사람이 읽을 수 있는 요약</a>과 일부 <a
         href="%{translations}">비공식 번역</a>'
       agree: 동의
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: 거부
       you need to accept or decline: 계속하려면 새 기여자 약관을 읽고 나서 동의나 거부하세요.
       legale_select: '거주 국가:'
@@ -2122,6 +2129,7 @@ ko:
       image: '그림:'
       gravatar:
         gravatar: Gravatar 사용
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: 이게 뭐죠?
         disabled: 그라바타가 비활성화되었습니다.
         enabled: 그라바타의 표시가 활성화되었습니다
index d0086608ad0fac4c00ccd7c703ec2d7f99eb6d3b..45d1ade3b577f1bc748fdd1cecb22cb3e414262c 100644 (file)
@@ -1078,10 +1078,7 @@ ku-Latn:
     intro_text: OpenStreetMap xerîteyekî dinyayê ye ku ji aliyê kesên wek te ve tê
       çêkirin û emilandina we belaş e û di bin lîsansa azad de ye.
     intro_2_create_account: Ji xwe re hesabekî çêbike
-    partners_html: Pêşkêşkirina bernameyê ji alî %{ucl}, %{bytemark}, %{ic} û %{partners}
-      ve tê piştgirîkirin.
     partners_ucl: University College London
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: şirîkên me
     osm_offline: Databasa OpenStreetMapê vê gavê offline e ji ber ku niha xebatên
@@ -1969,7 +1966,7 @@ ku-Latn:
       flash: Agahiyên mişteriyê bi serkeftinî hate nûkirin.
     destroy:
       flash: Sepana telebkar qeyda xwe ji holê rakir
-  user:
+  users:
     login:
       title: Têkeve
       heading: Têkeve
index 7d03808d1079ff0ff61639e4e555f7be5162e0f1..66d365f48987fcc53c011915d8a618657b7e8cc8 100644 (file)
@@ -9,7 +9,7 @@
 lb:
   time:
     formats:
-      friendly: '%e %B %Y ëm %H:%M'
+      friendly: '%e %B %Y um %H:%M'
   activerecord:
     models:
       changeset: Set vun Ännerungen
@@ -1003,7 +1003,7 @@ lb:
       name: Numm
       required: Obligatoresch
       allow_write_api: Kaart änneren
-  user:
+  users:
     login:
       title: Umellen
       heading: Umellen
index db9ba951ba1c801088c728770b22fcd2cabe03b5..b4500ca963f33935061176091a06730660783a45 100644 (file)
@@ -935,9 +935,7 @@ lt:
     intro_text: OpenStreetMap yra pasaulio žemėlapis, kuriamas žmonių, tokių kaip
       jūs. Jis atviras ir laisvas - naudojamas pagal atvirą licenciją.
     intro_2_create_account: sukurti naudotojo paskyrą
-    partners_html: Serveris palaikomas %{ucl}, %{bytemark}, %{ic} ir kiti %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark serveris
     partners_partners: partneriai
     osm_offline: Šiuo metu OpenStreetMap duomenų bazė išjungta, nes vykdomi svarbūs
@@ -1786,7 +1784,7 @@ lt:
       flash: Kliento informacija sėkmingai atnaujinta
     destroy:
       flash: Panaikinta kliento programos registracija
-  user:
+  users:
     login:
       title: Prisijungti
       heading: Prisijungti
index c0971803b0106ef413dd6a52ae76678010d54599..be3e04583480addc1911f7355856a6c8938b0219 100644 (file)
@@ -222,6 +222,7 @@ lv:
       reopened_by_anonymous: Atkal aktivizēja anonīms <abbr title='%{exact_time}'>%{when}
         atpakaļ</abbr>
       hidden_by: Paslēpa %{user} <abbr title='%{exact_time}'>%{when} atpakaļ</abbr>
+      report: Ziņot par šo piezīmi
     query:
       title: Vaicājuma funkcijas
       introduction: Noklikšķiniet uz kartes, lai atrastu tuvumā esošos objektus.
@@ -623,6 +624,7 @@ lv:
           bridge: Tilts
           bunker_silo: Bunkurs
           chimney: Skurstenis
+          flagpole: Karoga masts
           lighthouse: Bāka
           pipeline: Cauruļvads
           tower: Tornis
@@ -801,6 +803,7 @@ lv:
           pet: Zooveikals
           pharmacy: Aptieka
           photo: Fotoveikals
+          seafood: Jūras veltes
           second_hand: Lietoto preču veikals
           shoes: Apavu veikals
           sports: Sporta veikals
@@ -879,6 +882,7 @@ lv:
     index:
       search: Meklēt
       status: Statuss
+      reports: Ziņojumi
       states:
         ignored: Ignorēts
         open: Atvērt
@@ -909,9 +913,7 @@ lv:
     intro_text: OpenStreetMap ir pasaules karte, kuru veido cilvēki kā tu, un tā ir
       bezmaksas lietošanai zem atvērtas licences.
     intro_2_create_account: Izveidot lietotāja kontu
-    partners_html: Servera vietu atbalsta %{ucl}, %{ic} un %{bytemark}, un citi %{partners}.
     partners_ucl: UCL
-    partners_ic: Londonas Imperiālā Koledža
     partners_bytemark: Bytemark Hosting
     partners_partners: partneri
     osm_offline: OpenStreetMap datubāze šobrīd nav pieejama, tiek veikti svarīgi datubāzes
@@ -1215,6 +1217,9 @@ lv:
           <strong>Austrija</strong>: Ietver datus no
               <a href="http://data.wien.gv.at/">Stadt Wien</a> (zem
               <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>).
+        contributors_au_html: |-
+          <strong>Austrālija</strong>: Ietver pilsētu datus no
+              Australian Bureau of Statistics data.
         contributors_ca_html: |-
           <strong>Kanāda</strong>: Ietver datus no
               GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1763,7 +1768,7 @@ lv:
       flash: Klienta informācija atjaunināta veiksmīgi
     destroy:
       flash: Iznīcināja klienta aplikācijas reģistrāciju
-  user:
+  users:
     login:
       title: Pieslēgties
       heading: Pieslēgties
index b5e19b23efbc73923157b871dda26dde458957f1..4e5ce7501416d55d6316cad444b163e55b22fa2b 100644 (file)
@@ -1064,10 +1064,9 @@ mk:
     intro_text: OpenStreetMap е карта на светот создадена од луѓе како вас и се нуди
       за слободна употреба под отворена лиценца.
     intro_2_create_account: Создајте корисничка сметка
-    partners_html: Вдомувањето е поддржано од %{ucl}, %{bytemark}, %{ic} како и други
+    hosting_partners_html: Вдомувањето е поддржано од %{ucl}, %{bytemark} и други
       %{partners}.
     partners_ucl: UCL
-    partners_ic: Империјалниот колеџ - Лондон
     partners_bytemark: вдомителот „Bytemark“
     partners_partners: партнери
     osm_offline: Базата на податоци на  OpenStreetMap моментално е исклучена додека
@@ -1386,6 +1385,9 @@ mk:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.mk">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Покраина Предарлска</a> и
           Покраина Тирол (под <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT со исправки</a>).
+        contributors_au_html: |-
+          <strong>Австралија</strong>: Содржи податоци за населби од
+          Австралиското биро за статистика.
         contributors_ca_html: |-
           <strong>Canada</strong>: Содржи податоци од
           GeoBase&reg;, GeoGratis (&copy; Министерство за природни ресурси на Канада), CanVec (&copy; Министерство за природни ресурси на Канада), and StatCan (Географско одделение,
@@ -1949,7 +1951,7 @@ mk:
       flash: Клиентските информации се успешно подновени
     destroy:
       flash: Уништена е пријавната регистрација за клиентскиот програм.
-  user:
+  users:
     login:
       title: Најава
       heading: Најава
index 19e4ab8213a455c6760e1ee091a8d0b1161b1774..91282eddeb362c2c720b3598c72f1737d02cb21d 100644 (file)
@@ -29,6 +29,7 @@ mo:
       old_relation_tag: Маркаж пентру релация веке
       old_way: Кале веке
       relation: Релацие
+      relation_member: Мембру ал релацией
       session: Сесиуне
       trace: Маршрутэ
       user: Утилизатор
@@ -558,10 +559,7 @@ mo:
     intro_text: OpenStreetMap есте о хартэ а лумий, креатэ де оамень ка ши думнявоастрэ,
       ши поате фи утилизатэ ын мод либер суб о личенцэ дескисэ.
     intro_2_create_account: Креаць ун конт де утилизатор
-    partners_html: Хостингул есте сусцинут де %{ucl}, %{bytemark} ши %{ic}, прекум
-      ши де кэтре алць %{partners}.
     partners_ucl: Колеӂиул Университар дин Лондра (UCL)
-    partners_ic: Колеӂиул Империал дин Лондра
     partners_bytemark: Хостингул Bytemark
     partners_partners: партенерь
     help: Ажутор
@@ -578,7 +576,7 @@ mo:
   site:
     export:
       title: Експортаре
-  user:
+  users:
     login:
       title: Презентаци-вэ
       heading: Презентаци-вэ
@@ -629,6 +627,13 @@ mo:
       heading: Аць уйтат парола?
       email address: 'Адреса де поштэ електроникэ:'
       new password button: Рестабилиря паролей
+    reset_password:
+      password: 'Паролэ:'
+      confirm password: 'Конфирмаць парола:'
+    new:
+      display name: 'Нумеле афишат:'
+      password: 'Паролэ:'
+      confirm password: 'Конфирмаць парола:'
     show:
       my diary: Журналул меу
       my messages: Месажеле меле
@@ -638,4 +643,17 @@ mo:
       my friends: Приетений мей
     account:
       my settings: Реглажеле меле
+      current email address: 'Адреса де поштэ електроникэ курентэ:'
+      new email address: 'Адреса де поштэ електроникэ ноуэ:'
+      email never displayed publicly: (ну се афишязэ публик)
+      external auth: 'Ынтраря ын конт екстернэ:'
+      openid:
+        link text: че май есте ши аста?
+      public editing:
+        enabled link text: че май есте ши аста?
+      contributor terms:
+        link text: че май есте ши аста?
+      preferred editor: 'Редактор преферат:'
+      gravatar:
+        link text: че май есте ши аста?
 ...
index c9972407028383a08af96a247d7c9c8be916d210..6bc0b43780a48e5e3ddaf699cb6afc4b70113449 100644 (file)
@@ -792,7 +792,6 @@ mr:
       आहे, व जो खुल्या परवान्यांतर्गत वापरास मुक्त आहे.
     intro_2_create_account: सदस्यखाते तयार करा
     partners_ucl: UCL VR सेंटर
-    partners_ic: इम्पिरियल कॉलेज लंडन
     partners_bytemark: बाईटमार्क होस्टिंग
     partners_partners: भागीदार
     osm_offline: डाटाबेसचे आवश्यक देखरेखीचे काम असल्यामुळे ओपनस्ट्रीटमॅप डाटाबेस ही
@@ -1229,7 +1228,7 @@ mr:
       required: आवश्यक
       url: मुख्य अनुप्रयोग URL
       requests: 'सदस्याकडून खालील परवानग्यांची मागणी करा:'
-  user:
+  users:
     login:
       title: सनोंद प्रवेश करा
       heading: सनोंद प्रवेश करा
index e00afc0729153c04f93b5ddf4d049bcd2083dcdd..6d8131d48f3c152fb02fa180708173611ff4365d 100644 (file)
@@ -871,10 +871,7 @@ ms:
     intro_text: OpenStreetMap ialah peta dunia yang diwujudkan oleh insan seperti
       anda, dan bebas digunakan dengan berlandaskan lesen terbuka.
     intro_2_create_account: Buka akaun pengguna
-    partners_html: Pengehosan disokong oleh %{ucl}, %{ic} dan %{bytemark}, serta %{partners}
-      yang lain.
     partners_ucl: Pusat VR UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: rakan-rakan kongsi
     osm_offline: Pangkalan data OpenStreetMap kini diputuskan sambungannya sementara
@@ -1157,6 +1154,8 @@ ms:
           BY</a>) dan <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a>, dan Land Tirol (under <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT dengan pindaan</a>).'
+        contributors_au_html: '<strong>Australia</strong>: Mengandungi data subbandar
+          berasaskan data Australian Bureau of Statistics.'
         contributors_ca_html: '<strong>Kanada</strong>: Mengandungi data daripada
           GeoBase&reg;, GeoGratis (&copy; Department of Natural Resources Canada),
           CanVec (&copy; Department of Natural Resources Canada), and StatCan (Geography
@@ -1666,7 +1665,7 @@ ms:
       flash: Maklumat klien berjaya dikemaskinikan
     destroy:
       flash: Permohonan aplikasi klien dihapuskan
-  user:
+  users:
     login:
       title: Log masuk
       heading: Log masuk
index 98cc2f3173a8cdbc87eeaa8299a850aca5bbd2af..19f96f4f58908ff342f38cae9029287b122347cb 100644 (file)
@@ -257,14 +257,14 @@ nb:
     index:
       title: Endringssett
       title_user: Endringssett av %{user}
-      title_friend: Endringssett fra mine venner
+      title_friend: Endringssett av mine venner
       title_nearby: Endringssett av brukere i nærheten
       empty: Inget endringssett funnet.
       empty_area: Ingen endringssett i dette området.
-      empty_user: Ingen endringssett fra denne brukeren.
+      empty_user: Ingen endringssett av denne brukeren.
       no_more: Ingen flere endringssett funnet.
       no_more_area: Ingen flere endringssett i dette området.
-      no_more_user: Ingen flere endringssett fra denne brukeren.
+      no_more_user: Ingen flere endringssett av denne brukeren.
       load_more: Last inn mer
     timeout:
       sorry: Beklager, listen over endringssett som du ba om tok for lang tid å hente.
@@ -1082,9 +1082,7 @@ nb:
     intro_text: OpenStreetMap er et kart over verden, skapt av mennesker som deg,
       og gratis å bruke under en åpen lisens.
     intro_2_create_account: Opprett en brukerkonto
-    partners_html: Hosting støttes av %{ucl}, %{bytemark}, %{ic}, og andre %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnere
     osm_offline: OpenStreetMap databasen er for øyeblikket utilgjengelig mens essensielt
@@ -1384,6 +1382,9 @@ nb:
              <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>,
           <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> og
           Land Tirol (under <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT med tilføyelser</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Inneholder forstaddata basert
+             på Australian Bureau of Statistics data.
         contributors_ca_html: |-
           <strong>Canada</strong>: Inneholder data fra
              GeoBase®, GeoGratis (© Department of Natural
@@ -1946,7 +1947,7 @@ nb:
       flash: Oppdaterte klientinformasjonen
     destroy:
       flash: Ødelagt klientapplikasjonsregistreringen
-  user:
+  users:
     login:
       title: Logg inn
       heading: Logg inn
index 1a553e0a81f896739a3678e6bae803938872d92c..1e465bb834a07347f64dd7444f53c6750232425d 100644 (file)
@@ -556,7 +556,7 @@ nds:
       name: Naam
       required: Nödig
       allow_write_api: Koort ännern.
-  user:
+  users:
     login:
       title: Anmellen
       heading: Anmellen
index dfc9bd5064ee8194e3766816252fb1ecbcb82793..8a079065d3e09592d8bee1aa80507138e7d7ced3 100644 (file)
@@ -230,6 +230,7 @@ ne:
         अगाडि</abbr> पुनःसक्रिय गरिएको
       hidden_by: '%{user}द्वारा <abbr title=''%{exact_time}''>%{when} अगाडि</abbr>
         लुकाइएको'
+      report: यस टिपोटलाई उजुरी गर्नुहोस्
     query:
       title: क्वेरी गुणहरू
       introduction: नजिकैका फिचरहरू भेटाउन नक्सामा क्लिक गर्नुहोस्
@@ -322,6 +323,7 @@ ne:
       edit_link: यो प्रविष्टी सम्पादन गर्ने
       hide_link: यो प्रविष्टी लुकाउने
       confirm: निश्चित गर्ने
+      report: यो प्रविष्टीको उजुरी गर्ने
     diary_comment:
       comment_from: '%{link_user}द्वारा %{comment_created_at}मा गरिएको टिप्पणी'
       hide_link: यो टिप्पणी लुकाउनुहोस्
@@ -948,6 +950,7 @@ ne:
           track: ट्रयाक
           cycleway: साइकल मार्ग
           rail: रेलमार्ग
+          subway: सबवे
           cable:
           - केबल कार
           - कुर्सी लिफ्ट
@@ -1072,7 +1075,7 @@ ne:
     form:
       name: नाम
       required: आवश्यक पर्दछ
-  user:
+  users:
     login:
       title: प्रवेश
       heading: प्रवेश
index ac63e0b337c9857893b4106c3ebdc0d4c670b8ea..28b3d7f598b9a7710f8a98f9efbaefebdda82b4e 100644 (file)
@@ -10,6 +10,7 @@
 # Author: Greencaps
 # Author: HanV
 # Author: Hansmuller
+# Author: Henke
 # Author: JaapDeKleine
 # Author: Jochempluim
 # Author: Joost schouppe
@@ -24,6 +25,7 @@
 # Author: MrLeopold
 # Author: Optilete
 # Author: Pje335
+# Author: Robin van der Linde
 # Author: Robin van der Vliet
 # Author: Robin0van0der0vliet
 # Author: Romaine
@@ -252,6 +254,7 @@ nl:
       reopened_by_anonymous: <abbr title='%{exact_time}'>%{when} geleden</abbr> opnieuw
         geactiveerd door anoniem
       hidden_by: <abbr title='%{exact_time}'>%{when} ago</abbr> verborgen door %{user}
+      report: Notitie rapporteren
     query:
       title: Nabije objecten opvragen
       introduction: Klik op de kaart om nabije eigenschappen te ontdekken.
@@ -348,6 +351,7 @@ nl:
       comment_from: Reactie van %{link_user} op %{comment_created_at}
       hide_link: Reactie verbergen
       confirm: Bevestigen
+      report: Rapporteer deze opmerking
     location:
       location: 'Locatie:'
       view: Bekijken
@@ -499,6 +503,7 @@ nl:
           protected_area: Beschermd gebied
         bridge:
           aqueduct: Aquaduct
+          boardwalk: Plankenweg
           suspension: Hangbrug
           swing: Draaibrug
           viaduct: Viaduct
@@ -524,11 +529,11 @@ nl:
           water_tank: Watertank voor noodgevallen
           "yes": Noodgeval
         highway:
-          abandoned: Verlaten snelweg
+          abandoned: Verlaten weg
           bridleway: Ruiterpad
           bus_guideway: Vrijliggende busbaan
           bus_stop: Bushalte
-          construction: Snelweg in aanbouw
+          construction: Weg in aanbouw
           corridor: Corridor
           cycleway: Fietspad
           elevator: Lift
@@ -565,7 +570,7 @@ nl:
           track: Veld- of bosweg
           traffic_signals: Verkeerslichten
           trail: Pad
-          trunk: Autosnelweg
+          trunk: Autoweg
           trunk_link: Autoweg
           turning_loop: Keerlus
           unclassified: Ongeclassificeerde weg
@@ -691,6 +696,7 @@ nl:
           wastewater_plant: Afvalwaterzuivering
           watermill: Watermolen
           water_tower: Watertoren
+          water_well: Put
           water_works: Waterwerken
           windmill: Windmolen
           works: Fabriek
@@ -780,7 +786,7 @@ nl:
           square: Plein
           state: Staat
           subdivision: Deelgebied
-          suburb: Buitenwijk
+          suburb: Stadsdeel
           town: Stad
           unincorporated_area: Gemeentevrij gebied
           village: Dorp
@@ -870,9 +876,11 @@ nl:
           organic: Organische winkel
           outdoor: Buitensportwinkel
           paint: Verfwinkel
+          pawnbroker: Pandmakelaar
           pet: Dierenwinkel
           pharmacy: Apotheek
           photo: Fotowinkel
+          seafood: Zeevruchten
           second_hand: Kringloopwinkel
           shoes: Schoenenzaak
           sports: Sportwinkel
@@ -882,6 +890,7 @@ nl:
           tobacco: Tabakswinkel
           toys: Speelgoedwinkel
           travel_agency: Reisbureau
+          tyres: Bandenwinkel
           video: Videotheek
           wine: Wijnwinkel
           "yes": Winkel
@@ -935,7 +944,7 @@ nl:
         level6: Countygrens
         level8: Stadsgrens
         level9: Dorpsgrens
-        level10: Wijkgrens
+        level10: Stadsdeelgrens
     description:
       title:
         osm_nominatim: Locatie van <a href="https://nominatim.openstreetmap.org/">OpenStreetMap
@@ -948,6 +957,74 @@ nl:
     results:
       no_results: Geen resultaten gevonden
       more_results: Meer resultaten
+  issues:
+    index:
+      title: Problemen
+      select_status: Selecteer Status
+      select_type: Selecteer Type
+      select_last_updated_by: Selecteer Laats Bijgewerkt Door
+      reported_user: Gerapporteerde Gebruiker
+      not_updated: Niet Bijgewerkt
+      search: Zoeken
+      search_guidance: 'Zoek Problemen:'
+      user_not_found: Gebruiker bestaat niet
+      status: Status
+      reports: Rapportages
+      last_updated: Laatst Bijgewerkt
+      reported_item: Gerapporteerd Item
+      states:
+        ignored: Genegeerd
+        open: Open
+        resolved: Opgelost
+    update:
+      new_report: Uw rapport is succesvol geregistreerd
+      successful_update: Uw rapport is succesvol bijgewerkt
+      provide_details: Geef a.u.b. de vereiste gegevens in
+    show:
+      title: '%{status} Probleem #%{issue_id}'
+      report_created_at: Voor het eerst vermeld op %{datetime}
+      last_resolved_at: Laatst opgelost op %{datetime}
+      last_updated_at: Laatst bijgewerkt op %{datetime} door %{displayname}
+      resolve: Oplossen
+      ignore: Negeren
+      reopen: Heropenen
+      reports_of_this_issue: Meldingen van deze kwestie
+      read_reports: Lees Meldingen
+      new_reports: Nieuwe Meldingen
+      other_issues_against_this_user: Andere problemen met deze gebruiker
+      no_other_issues: Geen andere problemen tegen deze gebruiker.
+      comments_on_this_issue: Commentaar op deze kwestie
+    resolve:
+      resolved: De status van het probleem is ingesteld op 'Opgelost'
+    ignore:
+      ignored: De status van het probleem is ingesteld op 'Genegeerd'
+    reopen:
+      reopened: De status van het probleem is ingesteld op 'Open'
+    comments:
+      created_at: Op %{datetime}
+      reassign_param: Probleem opnieuw toewijzen?
+    reports:
+      updated_at: Op %{datetime}
+      reported_by_html: Gerapporteerd als %{category} door %{user}
+    helper:
+      reportable_title:
+        diary_comment: '%{entry_title}, commentaar #%{comment_id}'
+        note: 'Nota #%{note_id}'
+  issue_comments:
+    create:
+      comment_created: Je reactie is succesvol gemaakt
+  reports:
+    new:
+      categories:
+        diary_entry:
+          other_label: Anders
+        diary_comment:
+          other_label: Anders
+        user:
+          other_label: Anders
+        note:
+          spam_label: Deze notitie is spam
+          other_label: Anders
   layouts:
     logo:
       alt_text: Logo OpenStreetMap
@@ -973,10 +1050,9 @@ nl:
     intro_text: OpenStreetMap is een kaart van de wereld, gemaakt door mensen zoals
       u en vrij te gebruiken onder een open licentie.
     intro_2_create_account: Maak een gebruiker aan
-    partners_html: De hosting wordt ondersteund door %{ucl}, %{ic} en %{bytemark},
-      en andere %{partners}.
+    hosting_partners_html: Hosting wordt ondersteund door %{ucl}, %{bytemark}, en
+      andere %{partners}.
     partners_ucl: het UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partners
     osm_offline: De OpenStreetMap-database is op het moment niet beschikbaar wegens
@@ -1300,6 +1376,9 @@ nl:
           <a href="https://data.wien.gv.at/">Stad Wenen</a> (onder
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> en
           Land Tirol (onder <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY-AT met aanvullingen</a>).
+        contributors_au_html: |-
+          <strong>Australië</strong>: Bevat wijkgegevens
+          gebaseerd op gegevens van het Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Canada</strong>: Bevat gegevens van
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1856,7 +1935,7 @@ nl:
       flash: De informatie voor de client is bijgewerkt
     destroy:
       flash: De clientapplicatieregistratie is verwijderd
-  user:
+  users:
     login:
       title: Aanmelden
       heading: Aanmelden
@@ -2061,6 +2140,7 @@ nl:
       friends_diaries: dagboekberichten van vrienden
       nearby_changesets: wijzigingensets van gebruikers in de buurt
       nearby_diaries: dagboekberichten van gebruikers in de buurt
+      report: Rapporteer deze Gebruiker
     popup:
       your location: Uw locatie
       nearby mapper: Dichtbijzijnde mapper
@@ -2500,6 +2580,14 @@ nl:
         roundabout_with_exit: Neem op de rotonde afslag %{exit} naar %{name}
         unnamed: naamloos
         courtesy: Routebeschrijving met dank aan %{link}
+        exit_counts:
+          first: 1e
+          second: 2e
+          third: 3e
+          fourth: 4e
+          fifth: 5e
+          sixth: 6e
+          seventh: 7e
       time: Tijd
     query:
       node: Node
index e04391ab62356fbfd00078a23dcd5f196a632e2b..b5af8039a268d82588b225397d0a00b2a8bc693e 100644 (file)
@@ -874,9 +874,7 @@ nn:
     intro_text: OpenStreetMap er eit verdskart, laga av folks som deg, det er ope
       og gratis å bruke, med ein open lisens.
     intro_2_create_account: Opprett ein brukarkonto
-    partners_html: Drifta er støtta av %{ucl}, %{ic}, %{bytemark} og andre %{partners}.
     partners_ucl: UCL VR-senteret
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partnarar
     osm_offline: OpenStreetMap databasen er for augneblunken utilgjengelig medan essensielt
@@ -1020,8 +1018,8 @@ nn:
       inbox: innboks
       outbox: utboks
       messages:
-        one: Du har %{count} sendt melding
-        other: Du har %{count} sendte meldingar
+        one: Du har %{count} send melding
+        other: Du har %{count} sende meldingar
       to: Til
       subject: Emne
       date: Dato
@@ -1122,6 +1120,9 @@ nn:
              <a href="http://creativecommons.org/licenses/by/3.0/at/deed.dei">CC BY</a>,
              <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> og
              Land Tirol (under <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT med tilleg</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Inneheld forstadsdata basert
+             på Australian Bureau of Statistics data.
         contributors_ca_html: |-
           <strong>Canada</strong>: Inneheld data frå
              GeoBase®, GeoGratis (© Department of Natural
@@ -1575,7 +1576,7 @@ nn:
       flash: Oppdaterte klientinformasjonen
     destroy:
       flash: Øydelagt klientapplikasjonsregistreringen
-  user:
+  users:
     login:
       title: Logg inn
       heading: Logg inn
index cec44cd9d5ad7f800eb17ff60a65ec2e134cd54d..1bc0b4d5067823fa47c490f847393bd584780948 100644 (file)
@@ -956,10 +956,7 @@ oc:
     intro_text: OpenStreetMap es una mapa del mond, creada per de personas coma vos
       e liura d’utilizacion jos licéncia liura.
     intro_2_create_account: Creatz un compte d'utilizaire
-    partners_html: L'albergament es pres en carga per %{ucl}, %{ic} e %{bytemark},
-      e d'autres %{partners}.
     partners_ucl: UCL
-    partners_ic: lo Collègi Imperial de Londres
     partners_bytemark: Albergament Bytemark
     partners_partners: partenaris
     osm_offline: La basa de donadas de OpenStreetMap es actualament fòra linha; una
@@ -1695,7 +1692,7 @@ oc:
       flash: Informacions del client enregistradas amb succès
     destroy:
       flash: Enregistrament de l'aplicacion clienta suprimit
-  user:
+  users:
     login:
       title: Se connectar
       heading: Connexion
index 9e62dbef1c00a8499031b422309ddc8a5064b700..0c4f71fbc1f3ce9a69ca38db6ef6988e6f8ec61d 100644 (file)
@@ -677,7 +677,6 @@ pa:
     export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
     edit_with: '%{editor} ਨਾਲ ਸੋਧੋ'
     intro_2_create_account: ਇੱਕ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਉ
-    partners_ic: ਇੰਪੀਰੀਅਲ ਕਾਲਜ ਲੰਡਨ
     partners_bytemark: ਬਾਈਟਮਾਰਕ ਹੋਸਟਿੰਗ
     partners_partners: ਜੋੜੀਦਾਰ
     help: ਮਦਦ
@@ -1004,7 +1003,7 @@ pa:
       name: ਨਾਂ
       required: ਲੋੜੀਂਦਾ
       support_url: ਮਦਦ URL
-  user:
+  users:
     login:
       title: ਦਾਖ਼ਲਾ
       heading: ਦਾਖ਼ਲਾ
index a525a371f618d45b8e42d87951686541e6f0d9a2..cb5e7de4fadc976b67729e1e2dd9c80fd2ee3588 100644 (file)
@@ -1040,9 +1040,7 @@ pl:
     intro_text: OpenStreetMap to mapa świata, stworzona przez ludzi, takich jak ty,
       i z możliwością użycia pod otwartą licencją.
     intro_2_create_account: Utwórz konto
-    partners_html: Hosting obsługuje %{ucl}, %{ic}, %{bytemark}, a także %{partners}.
     partners_ucl: University College London
-    partners_ic: Imperial College London
     partners_bytemark: Hosting Bytemark
     partners_partners: partnerzy
     osm_offline: Baza danych OpenStreetMap jest niedostępna na czas ważnych zadań
@@ -1350,6 +1348,8 @@ pl:
           <strong>Austria</strong>: Zawiera dane <a href="https://data.wien.gv.at/">miasta Wiednia</a> (na licencji <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> oraz
           Land Tyrol (na licencji <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT z późniejszymi zmianami</a>).
+        contributors_au_html: '<strong>Australia</strong>: Zawiera dane o miejscowościach
+          oparte na danych ''''Australian Bureau of Statistics''''.'
         contributors_ca_html: '<strong>Kanada</strong>: Zawiera dane z GeoBase&reg;,
           GeoGratis (&copy; ''Department of Natural Resources Canada''), CanVec (&copy;
           ''Department of Natural Resources Canada'') i StatCan (''Geography Division,
@@ -1907,7 +1907,7 @@ pl:
       flash: Informacje o kliencie zostały pomyślnie zaktualizowane
     destroy:
       flash: Usunięto rejestrację aplikacji
-  user:
+  users:
     login:
       title: Logowanie
       heading: Logowanie
index c962c05a88656df48808015f35a2d92e217728fa..54e02423444b23e9f56ff3c1948eeae52573f1b5 100644 (file)
@@ -1110,10 +1110,9 @@ pt-BR:
     intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como você e
       de uso livre sob uma licença aberta.
     intro_2_create_account: Criar uma conta de usuário
-    partners_html: A hospedagem é apoiada por %{ucl}, %{bytemark}, %{ic}, e outros
+    hosting_partners_html: A hospedagem é suportada por %{ucl}, %{bytemark} e outros
       %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College de Londres
     partners_bytemark: Hospedagem Bytemark
     partners_partners: parceiros
     osm_offline: A base de dados do OpenStreetMap está fora do ar para manutenção.
@@ -1437,6 +1436,9 @@ pt-BR:
           BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a> e Land Tirol (sob a licença <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT com emendas</a>).'
+        contributors_au_html: |-
+          <strong>Austrália</strong>: Contém dados do subúrbio baseado
+             nos dados do Australian Bureau of Statistics.
         contributors_ca_html: "<strong>Canadá</strong>: Contém dados do\n   GeoBase&reg;,
           GeoGratis (&copy; Departamento de Recursos\n   Naturais do Canadá), CanVec
           (&copy; Departamento de Recursos\n   Naturais do Canadá), and StatCan (Divisão
@@ -2001,7 +2003,7 @@ pt-BR:
       flash: Sucesso ao atualizar as informações do cliente
     destroy:
       flash: O registro da aplicação cliente foi apagado
-  user:
+  users:
     login:
       title: Entrar
       heading: Entrar
index df3bcc273f29c10f546ee70ac2e73f523bd1eee8..b96c5c69442de24a0e34be573011e40002208397 100644 (file)
@@ -241,6 +241,7 @@ pt-PT:
       reopened_by_anonymous: Reaberto por um anónimo há <abbr title='%{exact_time}'>%{when}
         atrás</abbr>
       hidden_by: Ocultado por %{user} há <abbr title='%{exact_time}'>%{when} atrás</abbr>
+      report: Denunciar este erro reportado
     query:
       title: Consultar elementos em redor
       introduction: Clique no mapa para descobrir elementos em redor.
@@ -334,10 +335,12 @@ pt-PT:
       edit_link: Editar esta entrada
       hide_link: Ocultar esta entrada
       confirm: Confirmar
+      report: Denunciar esta entrada
     diary_comment:
       comment_from: Comentário de %{link_user} em %{comment_created_at}
       hide_link: Ocultar este comentário
       confirm: Confirmar
+      report: Denunciar este comentário
     location:
       location: 'Localização:'
       view: Ver
@@ -960,10 +963,109 @@ pt-PT:
   issues:
     index:
       title: Problemas
+      select_status: Selecionar Estado
+      select_type: Selecionar Tipo
+      select_last_updated_by: Selecionar Último Atualizado por
+      reported_user: Denunciar Utilizador
+      not_updated: Não Atualizado
       search: Pesquisar
+      search_guidance: 'Pesquisar Problemas:'
+      user_not_found: O utilizador não existe
+      issues_not_found: Não foi encontrado nenhum problema desse tipo
       status: Estado
+      reports: Denúncias
+      last_updated: Última Atualização
+      last_updated_time_html: <abbr title='%{title}'>%{time} atrás</abbr>
+      last_updated_time_user_html: <abbr title='%{title}'>%{time} atrás</abbr> por
+        %{user}
+      link_to_reports: Ver Denúncias
+      reports_count:
+        one: 1 denúncia
+        other: '%{count} denúncias'
+      reported_item: Item Denunciado
+      states:
+        ignored: Ignorado
+        open: Aberto
+        resolved: Resolvido
+    update:
+      new_report: A sua denúncia por registada com sucesso
+      successful_update: A sua denúncia foi atualizada com sucesso
+      provide_details: Por favor forneça os detalhes necessários
     show:
+      title: '%{status} Denúncia #%{issue_id}'
+      reports:
+        zero: Sem denúncias
+        one: 1 denúncia
+        other: '%{count} denúncias'
+      report_created_at: Denunciado primeiro em %{datetime}
+      last_resolved_at: Último resolvido em %{datetime}
+      last_updated_at: Último atualizado em %{datetime} por %{displayname}
+      resolve: Resolver
       ignore: Ignorar
+      reopen: Reabrir
+      reports_of_this_issue: Denúncias deste Problema
+      read_reports: Ler Denúncias
+      new_reports: Novas Denúncias
+      other_issues_against_this_user: Outros problemas sobre este utilizador
+      no_other_issues: Nenhum outro problema com este utilizador.
+      comments_on_this_issue: Comentários sobre este problema
+    resolve:
+      resolved: O estado do problema foi alterado para 'Resolvido'
+    ignore:
+      ignored: O estado do problema foi alterado para 'Ignorado'
+    reopen:
+      reopened: O estado do problema foi alterado para 'Aberto'
+    comments:
+      created_at: Em %{datetime}
+      reassign_param: Reatribuir o problema?
+    reports:
+      updated_at: Em %{datetime}
+      reported_by_html: Denunciado como %{category} por %{user}
+    helper:
+      reportable_title:
+        diary_comment: '%{entry_title}, comentário #%{comment_id}'
+        note: 'Erro reportado #%{note_id}'
+  issue_comments:
+    create:
+      comment_created: O seu comentário foi criado com sucesso
+  reports:
+    new:
+      title_html: Denunciar %{link}
+      missing_params: Não foi possível criar uma denúncia
+      details: Por favor forneça mais alguns detalhes sobre o problema (obrigatório).
+      select: Selecione um motivo para a sua denúnciaː
+      disclaimer:
+        intro: Antes de enviar a sua denúncia aos moderadores, por favor certifique-se
+          queː
+        not_just_mistake: Tem a certeza que o problema não é um mero engano
+        unable_to_fix: Não consegue corrigir o problema por si próprio nem com a ajuda
+          dos membros da comunidade
+        resolve_with_user: Já tentou resolver o problema com o utilizador em questão
+      categories:
+        diary_entry:
+          spam_label: Esta entrada do diário é ou contém SPAM/publicidade
+          offensive_label: Esta entrada do diário é obscena ou ofensiva
+          threat_label: Esta entrada do diário contém uma ameaça
+          other_label: Outro
+        diary_comment:
+          spam_label: Este comentário na entrada do diário é ou contém SPAM/publicidade
+          offensive_label: Este comentário na entrada do diário é obsceno ou ofensivo
+          threat_label: Este comentário na entrada do diário contém uma ameaça
+          other_label: Outro
+        user:
+          spam_label: Este perfil de utilizador é ou contém SOAM/publicidade
+          offensive_label: Este perfil de utilizador é obsceno ou ofensivo
+          threat_label: Este perfil de utilizador contém uma ameaça
+          vandal_label: Este utilizador é um vândalo
+          other_label: Outro
+        note:
+          spam_label: Este erro reportado é SPAM/publicidade
+          personal_label: Este erro reportado contém dados pessoais
+          abusive_label: Este erro reportado é abusivo
+          other_label: Outro
+    create:
+      successful_report: A sua denúncia foi registada com sucesso
+      provide_details: Por favor forneça os detalhes necessários
   layouts:
     logo:
       alt_text: Logotipo do OpenStreetMap
@@ -977,6 +1079,7 @@ pt-PT:
     edit: Editar
     history: Histórico
     export: Exportar
+    issues: Problemas
     data: Dados
     export_data: Exportar dados
     gps_traces: Trilhos GPS
@@ -989,10 +1092,9 @@ pt-PT:
     intro_text: O OpenStreetMap é um mapa do mundo, criado por pessoas como você e
       de uso livre sob uma licença aberta.
     intro_2_create_account: Crie uma conta de utilizador
-    partners_html: O alojamento é suportado por %{ucl}, %{bytemark}, %{ic}, e outros
+    hosting_partners_html: O alojamento é suportado por %{ucl}, %{bytemark} e outros
       %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: parceiros
     osm_offline: A base de dados do OpenStreetMap não está disponível neste momento
@@ -1313,6 +1415,8 @@ pt-PT:
           BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a> e Land Tirol (sob a licença <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT com emendas</a>).'
+        contributors_au_html: '<strong>Austrália</strong>: Contém dados de periferias
+          provenientes de dados do Australian Bureau of Statistics.'
         contributors_ca_html: '<strong>Canadá</strong>: Contém dados de GeoBase&reg;,
           GeoGratis (&copy; Department of Natural Resources Canada), CanVec (&copy;
           Department of Natural Resources Canada), e StatCan (Geography Division,
@@ -1667,6 +1771,8 @@ pt-PT:
       trace_uploaded: O seu ficheiro GPX (GPS) foi enviado e está a aguardar a inclusão
         na base de dados. Normalmente este processo dura cerca de uma hora. Quando
         for incluído na base de dados será enviado um email a informá-lo.
+      upload_failed: Desculpe, o envio do GPX falhou. Foi enviado um alerta a um administrador
+        sobre o erro. Por favor tente novamente
       traces_waiting:
         one: Tem %{count} trilho GPS na fila para ser colocado na base de dados do
           OpenStreetMap. Por favor, antes de enviar mais trilhos aguarde um pouco
@@ -1693,6 +1799,8 @@ pt-PT:
       save_button: Gravar Alterações
       visibility: 'Visibilidade:'
       visibility_help: o que significa isto?
+    update:
+      updated: Trilho atualizado
     trace_optionals:
       tags: Etiquetas
     show:
@@ -1767,8 +1875,13 @@ pt-PT:
     require_cookies:
       cookies_needed: Parece que tem os "cookies" desativados - por favor ative-os
         no seu navegador de Internet antes de continuar.
+    require_admin:
+      not_an_admin: Tem de ser um administrador para realizar essa ação.
     require_moderator:
       not_a_moderator: Tem de ser um moderador para poder fazer essa ação.
+    require_moderator_or_admin:
+      not_a_moderator_or_admin: Tem de ser um moderador ou um administrador para realizar
+        essa ação
     setup_user_auth:
       blocked_zero_hour: Tem uma mensagem urgente no site do OpenStreetMap. Tem de
         ler a mensagem antes de poder gravar as suas edições.
@@ -1865,14 +1978,14 @@ pt-PT:
       flash: A atualização da informação do programa foi feita com sucesso
     destroy:
       flash: O registo do programa foi eliminado
-  user:
+  users:
     login:
       title: Entrar
       heading: Iniciar sessão
       email or username: 'E-mail ou Utilizador:'
       password: 'Palavra-passe:'
       openid: '%{logo} OpenID:'
-      remember: 'Lembrar-me:'
+      remember: Permanecer autenticado entre sessões
       lost password link: Perdeu a sua palavra-passe?
       login_button: Entrar
       register now: Criar conta agora
@@ -1978,6 +2091,7 @@ pt-PT:
       terms accepted: Obrigado por aceitar os novos termos de colaborador!
       terms declined: Lamentamos não ter aceitado os novos Termos de Colaborador.
         Para obter mais informações consulte <a href="%{url}">esta página wiki</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: Termos de colaborador
       heading: Termos de colaborador
@@ -1987,9 +2101,11 @@ pt-PT:
       consider_pd: para além do acordo exposto acima, considero que as minhas contribuições
         se encontram em Domínio Público.
       consider_pd_why: O que é isto?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Informação para ajudar a compreender os termos: um <a href="%{summary}">resumo
         inteligível</a> e algumas <a href="%{translations}">traduções informais</a>'
       agree: Aceitar
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Rejeitar
       you need to accept or decline: Por favor leia e depois aceite ou recuse os novos
         Termos de Colaborador para continuar.
@@ -2112,6 +2228,7 @@ pt-PT:
           os Termos de Colaborador.
         agreed_with_pd: Também declarou que as suas edições são disponibilizadas em
           Domínio Público.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: o que é isto?
       profile description: 'Descrição do perfil:'
       preferred languages: 'Línguas preferidas:'
@@ -2119,6 +2236,7 @@ pt-PT:
       image: 'Imagem:'
       gravatar:
         gravatar: Usar imagem do site Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: o que é isto?
         disabled: O Gravatar foi desativado.
         enabled: A visualização do seu avatar de Gravatar foi ativada.
index 881b15f79e5afdc9a2eea19016883079e43d7ca9..49a3d1d95ad63a6524e3b6567c02c80ab4963675 100644 (file)
@@ -972,7 +972,7 @@ ro:
     form:
       name: Nume
       required: Necesar
-  user:
+  users:
     login:
       email or username: 'Adresa de e-mail sau numele de utilizator:'
       password: 'Parolă:'
index 69d3b9cd8ac0a61d8aa460fe6e856449b76c5687..8fe3d372e3d0d859db5120f98a4d04dbdb0e53d9 100644 (file)
@@ -33,6 +33,7 @@
 # Author: Helpau
 # Author: Ignatus
 # Author: Iluvatar
+# Author: Infovarius
 # Author: Irus
 # Author: Kaganer
 # Author: Komzpa
@@ -1134,10 +1135,8 @@ ru:
     intro_text: OpenStreetMap является картой мира, созданной такими же людьми, как
       и вы, и может свободно использоваться под открытой лицензией.
     intro_2_create_account: Создайте учётную запись
-    partners_html: Хостинг поддерживается %{ucl}, %{bytemark} и %{ic}, а также другими
-      %{partners}.
+    hosting_partners_html: Хостинг поддерживается %{ucl}, %{bytemark} и другими %{partners}.
     partners_ucl: UCL
-    partners_ic: Имперским колледжем Лондона
     partners_bytemark: Bytemark Hosting
     partners_partners: партнёрами
     osm_offline: База данных OpenStreetMap в данный момент не доступна, так как проводится
@@ -1456,6 +1455,8 @@ ru:
         contributors_at_html: |-
           <strong>Австрия.</strong> Данные <a href="https://data.wien.gv.at/">города Вена</a> (на условиях <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), а также земель <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Форарльберга</a> и
              Тироля (на условиях <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT с дополнениями</a>).
+        contributors_au_html: <strong>Австралия.</strong> Данные пригородов от Австралийского
+          бюро статистики.
         contributors_ca_html: <strong>Канада.</strong> Данные от GeoBase ®, GeoGratis
           (© Департамент природных ресурсов Канады), CanVec (© Департамент природных
           ресурсов Канады) и StatCan (Отдел Географии, Статистическое ведомство Канады).
@@ -2015,7 +2016,7 @@ ru:
       flash: Клиентская информация успешно обновлена
     destroy:
       flash: Уничтожена регистрация клиентского приложения
-  user:
+  users:
     login:
       title: Представьтесь
       heading: Представьтесь
@@ -2127,6 +2128,7 @@ ru:
       terms accepted: Спасибо за принятие новых условий участия!
       terms declined: Нам жаль, что вы решили не принимать новые условия участия.
         Дополнительную информацию можно найти <a href="%{url}">на следующей странице</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=ru
     terms:
       title: Условия сотрудничества
       heading: Условия сотрудничества
@@ -2136,9 +2138,11 @@ ru:
       consider_pd: В дополнение к вышеизложенному соглашению, я принимаю во внимание,
         что мой вклад находится в общественном достоянии
       consider_pd_why: что это значит?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain?uselang=ru
       guidance: 'Информация, которая поможет понять эти условия: <a href="%{summary}">краткое
         описание</a> и несколько <a href="%{translations}">неофициальных переводов</a>'
       agree: Принять
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=ru
       decline: Отклонить
       you need to accept or decline: Пожалуйста, прочитайте, а затем согласитесь или
         отклоните новые Условия участия.
@@ -2271,6 +2275,7 @@ ru:
       image: 'Изображение:'
       gravatar:
         gravatar: Использовать Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar?uselang=ru
         link text: что это?
         disabled: Gravatar отключён.
         enabled: Отображение вашего Gravatar включено.
index 8a31a2ec00a0f29944aa52a172f0da3f91160234..074caa4fc153a43e3146a183f843e3a794a9664c 100644 (file)
@@ -879,10 +879,7 @@ scn:
     intro_text: OpenStreetMap è na cartina dû munnu, criata di genti comu a tìa e
       lìbbira a adupirari secunnu na licenza graputa.
     intro_2_create_account: Crea un cuntu d'utenti
-    partners_html: L'hosting veni sustinutu di %{ucl}, %{ic} e %{bytemark}, e àutri
-      %{partners}.
     partners_ucl: the UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: cullabburatura
     osm_offline: La basi di dati d'OpenStreetMap comu a ora nun è n lìnia pirchì si
@@ -1734,7 +1731,7 @@ scn:
       flash: Li nfurmazzioni dû clienti foru aggiurnati boni
     destroy:
       flash: Fu distruiuta la riggistrazzioni di l'applicazzioni clienti
-  user:
+  users:
     login:
       title: Trasi
       heading: Trasi
index 44f5ba049ed11d4e53777bef586481c7bfe7a3d3..162960a024fc564d88de6c390fdcd8cf02c3fcb5 100644 (file)
@@ -821,9 +821,7 @@ sco:
     intro_text: OpenStreetMap is a cairt o the warld, creatit bi fowk lik ye an free
       tae uise unner an open license.
     intro_2_create_account: Create a uiser accoont
-    partners_html: Hostin is supportit bi %{ucl}, %{ic} an %{bytemark}, an ither %{partners}.
     partners_ucl: the UCL VR Centre
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: pairtners
     osm_offline: The OpenStreetMap database is currently offline while essential database
@@ -1064,7 +1062,7 @@ sco:
   traces:
     create:
       upload_trace: Uplaid GPS Trace
-  user:
+  users:
     login:
       auth_providers:
         google:
index 904a2c1271f4b91f1fa0019703a8a84597f48bc6..dca81713ddbe4e51735b5ea4a55e0f3ad5e6b35f 100644 (file)
@@ -850,9 +850,7 @@ sk:
     intro_text: OpenStreetMap je mapa sveta, vytvorené ľuďmi ako vy, voľne využiteľná
       pod slobodnou licenciou.
     intro_2_create_account: Založte si konto
-    partners_html: Prevádzku podporujú %{ucl}, %{ic}, %{bytemark} a iní %{partners}.
     partners_ucl: VR centrum UCL
-    partners_ic: Imperial College v Londýne
     partners_bytemark: Bytemark Hosting
     partners_partners: partneri
     osm_offline: OpenStreetMap databáza je teraz offline, zatiaľ čo potrebná údržba
@@ -1084,6 +1082,8 @@ sk:
           <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">krajiny Vorarlberg</a> a
           krajiny Tirol (pod licenciou <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT s úpravami</a>).
+        contributors_au_html: '<strong>Austrália</strong>: Obsahuje dáta predmestí
+          založené na dátach Austrálskeho štatistického úradu.'
         contributors_ca_html: '<strong>Kanada</strong>: Obsahuje dáta z GeoBase ®,
           GeoGratis (© Department of Natural Resources Canada), CanVec (© Department
           of Natural Resources Canada) a StatCan (Geography Division, Statistics Canada).'
@@ -1533,7 +1533,7 @@ sk:
       flash: Úspešne aktualizované informácie o klientovi
     destroy:
       flash: Registrácia klientskej aplikácie bola zrušená
-  user:
+  users:
     login:
       title: Prihlásiť sa
       heading: Prihlásenie
index aa0886e9c3db52ca13b3c7b3b443ca64035bb234..1792cd2346f7355f97d78a16eb18d8ac201815d3 100644 (file)
@@ -106,7 +106,7 @@ sl:
   browse:
     created: Ustvarjeno
     closed: Zaprto
-    created_html: Ustvarjeno <abbr title='%{title}'>%{time} nazas</abbr>
+    created_html: Ustvarjeno <abbr title='%{title}'>%{time} nazaj</abbr>
     closed_html: Zaprto <abbr title='%{title}'>%{time} nazaj</abbr>
     created_by_html: Ustvaril %{user} <abbr title='%{title}'>%{time} nazaj</abbr>
     deleted_by_html: Izbrisal %{user} <abbr title='%{title}'>%{time} nazaj</abbr>
@@ -947,9 +947,7 @@ sl:
     intro_text: OpenStreetMap je zemljevid sveta, ki ga ustvarjajo ljudje kot ste
       vi, brezplačen za uporabo z odprto licenco.
     intro_2_create_account: Ustvarite uporabniški račun
-    partners_html: Gostovanje podpira %{ucl}, %{bytemark} in %{ic}, ter ostali %{partners}.
     partners_ucl: UCL
-    partners_ic: Imperial College v Londonu
     partners_bytemark: Bytemark Hosting
     partners_partners: partnerji
     osm_offline: Baza OpenStreetMap zaradi izvajanja nujnih vzdrževalnih del trenutno
@@ -1670,7 +1668,7 @@ sl:
       flash: Informacije odjemalca uspešno posodobljene
     destroy:
       flash: Registracija odjemalske aplikacije uničena
-  user:
+  users:
     login:
       title: Prijava
       heading: Prijava
index 538df4c11fb1414d4e05d2d8efbab9ccca1c772b..08569bf181c5312312855a915f1c5cfe546d467f 100644 (file)
@@ -911,8 +911,6 @@ sq:
     intro_text: OpenStreetMap është hartë e botës, e krijuar nga njerëz si ti dhe
       për përdorim të lirshëm në kuadrin e një licence të hapur.
     intro_2_create_account: Krijo një llogari përdoruesi
-    partners_html: Hostingu mbështetet nga %{ucl}, %{ic} dhe %{bytemark}, dhe të tjerë
-      %{partners}.
     partners_partners: partnerët
     help: Ndihmë
     about: Rreth
@@ -1069,6 +1067,8 @@ sq:
           por kur përfshihen në OSM, hartat nga një agjencion nacional i hartave \n
           \ apo faktor tjerë madhor burimor, është e arsyeshme të citohen drejtpërsëdrejti
           \n   duke paraqitur emrin apo duke lidhur faqen e tyre me link."
+        contributors_au_html: '<strong>Australia</strong>: Përmban të dhëna periferike
+          të bazuara në të dhënat e Zyrës Australiane të Statistikave.'
         contributors_ca_html: |-
           <strong>Canada</strong>: Përmban të dhëna nga
           GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1336,7 +1336,7 @@ sq:
       confirm: A je i sigurt?
     form:
       name: Emri
-  user:
+  users:
     login:
       title: Identifikohu
       heading: Identifikohu
index 277bd00f4c9bf4ecfff3ee88844a05a6b12cd424..2f350825e53089c484b4b559802374af4c2166c8 100644 (file)
@@ -693,9 +693,7 @@ sr-Latn:
     edit_with: Uredi uređivačem %{editor}
     tag_line: Slobodna viki mapa sveta
     intro_2_create_account: Otvorite nalog
-    partners_html: Hosting podržava %{ucl}, %{ic} i %{bytemark}, kao i drugi %{partners}.
     partners_ucl: VR centar UCL-a
-    partners_ic: Londonski kraljevski koledž
     partners_bytemark: Hosting „Bajtmark“
     partners_partners: partneri
     osm_offline: Baza podataka Openstritmapa je trenutno nedostupna dok se ne završe
@@ -909,6 +907,9 @@ sr-Latn:
              <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
              <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Forarlberg</a> i
           Land Tirol (pod licencom <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT sa izmenama i dopunama</a>).
+        contributors_au_html: |-
+          <strong>Australija</strong>: sadrži podatke o opštinama
+              na osnovu podataka Australijskog biroa za statistiku.
         contributors_ca_html: |-
           <strong>Kanada</strong>: sadrži podatke iz
               Beobaze&reg;, Geogratisa (&copy; Odeljenje za prirodne
@@ -1261,7 +1262,7 @@ sr-Latn:
       flash: Podaci o klijentu su uspešno ažurirani
     destroy:
       flash: Upis programa je ukinut
-  user:
+  users:
     login:
       title: Prijava
       heading: Prijava
index be79b22d069b2bd42fde81a4f417064b2dc96cbb..cb80616a461db291c07e9757b829b7268a7ea82f 100644 (file)
@@ -28,7 +28,7 @@ sr:
       friendly: '%e %B %Y у %H:%M'
   activerecord:
     models:
-      acl: Ð¡Ð¿Ð¸Ñ\81ак Ð¾Ð³Ñ\80аниÑ\87еÑ\9aа приступа
+      acl: Ð\9bиÑ\81Ñ\82а ÐºÐ¾Ð½Ñ\82Ñ\80оле приступа
       changeset: Скуп измена
       changeset_tag: Ознака скупа измена
       country: Земља
@@ -979,9 +979,7 @@ sr:
     intro_text: OpenStreetMap је мапа света коју су направили људи попут вас. Слободна
       је за коришћење под отвореном лиценцом.
     intro_2_create_account: Отворите кориснички налог
-    partners_html: Хостинг омогућују %{ucl}, %{bytemark}, %{ic}, као и други %{partners}.
     partners_ucl: UCL
-    partners_ic: Краљевски колеџ у Лондону
     partners_bytemark: хостинг Bytemark
     partners_partners: партнери
     osm_offline: База OpenStreetMap-а је тренутно недоступна док се не заврше неопходни
@@ -1274,7 +1272,7 @@ sr:
         attribution_example:
           alt: Пример како да наведете Опенстритмап на некој страници
           title: Пример за навођење
-        more_title_html: Ð¡Ð°Ð·Ð½Ð°Ñ\98 Ð²Ð¸Ñ\88е
+        more_title_html: Ð\92иÑ\88е Ð¾
         more_1_html: |-
           Више о употреби података и како да нас наводите можете наћи на <a
           href="http://osmfoundation.org/Licence">страници лиценце OSMF</a> и у <a
@@ -1296,6 +1294,9 @@ sr:
              <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
              <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Ланд Форарлберг</a> и
           Ланд Тирол (под лиценцом <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT са изменама и допунама</a>).
+        contributors_au_html: |-
+          <strong>Аустралија</strong>: садржи податке о општинама
+              на основу података Аустралијског бироа за статистику.
         contributors_ca_html: |-
           <strong>Канада</strong>: садржи податке из
               Беобазе&reg;, Геогратиса (&copy; Одељење за природне
@@ -1574,8 +1575,8 @@ sr:
       headings: Наслови
       heading: Наслов
       subheading: Поднаслов
-      unordered: Ð\9dеÑ\81вÑ\80Ñ\81Ñ\82ан Ñ\81пиÑ\81ак
-      ordered: Ð¡Ð²Ñ\80Ñ\81Ñ\82ан Ñ\81пиÑ\81ак
+      unordered: Ð\9dеÑ\83Ñ\80еÑ\92ена Ð»Ð¸Ñ\81Ñ\82а
+      ordered: Ð£Ñ\80еÑ\92ена Ð»Ð¸Ñ\81Ñ\82а
       first: Прва ставка
       second: Друга ставка
       link: Веза
@@ -1841,7 +1842,7 @@ sr:
       flash: Подаци о клијенту су успешно ажурирани
     destroy:
       flash: Уништена је регистрација клијентског програма
-  user:
+  users:
     login:
       title: Пријава
       heading: Пријава
@@ -2255,7 +2256,7 @@ sr:
       success: Блокада је ажурирана.
     index:
       title: Корисничке блокаде
-      heading: Ð¡Ð¿Ð¸Ñ\81ак корисничких блокада
+      heading: Ð\9bиÑ\81Ñ\82а корисничких блокада
       empty: Није направљена ниједна блокада.
     revoke:
       title: Опозивање блокаде на %{block_on}
@@ -2275,11 +2276,11 @@ sr:
       time_past: Завршено пре %{time}.
     blocks_on:
       title: Блокаде за %{name}
-      heading: Ð¡Ð¿Ð¸Ñ\81ак блокада за %{name}
+      heading: Ð\9bиÑ\81Ñ\82а блокада за %{name}
       empty: '%{name} још није био блокиран/а.'
     blocks_by:
       title: Блокаде од %{name}
-      heading: Ð¡Ð¿Ð¸Ñ\81ак блокада од %{name}
+      heading: Ð\9bиÑ\81Ñ\82а блокада од %{name}
       empty: '%{name} још увек није блокирао никога.'
     show:
       title: '%{block_on} је блокиран/а од %{block_by}'
@@ -2507,8 +2508,8 @@ sr:
       title: Уређивање редакције
     index:
       empty: Нема редакција.
-      heading: Ð¡Ð¿Ð¸Ñ\81ак редакција
-      title: Ð¡Ð¿Ð¸Ñ\81ак редакција
+      heading: Ð\9bиÑ\81Ñ\82а редакција
+      title: Ð\9bиÑ\81Ñ\82а редакција
     new:
       description: Опис
       heading: Унесите податке за нову редакцију
index a84fed3e56177bb177b0cb4bdeca33582e206cb8..94a4099c02d791af77eb551f3a2af2ce6ff3fe2d 100644 (file)
@@ -1106,9 +1106,8 @@ sv:
     intro_text: OpenStreetMap är en karta över världen, skapad av människor som du
       och fri att använda under en öppen licens.
     intro_2_create_account: Skapa ett användarkonto
-    partners_html: Drivs via %{ucl}, %{ic}, %{bytemark}, %{ic} och andra %{partners}.
+    hosting_partners_html: Drivs via %{ucl}, %{bytemark} och andra %{partners}.
     partners_ucl: University College London
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: partners
     osm_offline: OpenStreetMap-databasen är inte tillgänglig just nu, då nödvändigt
@@ -1427,6 +1426,9 @@ sv:
           <a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> och
           Land Tirol (under licensen <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC BY AT med tillägg</a>).
+        contributors_au_html: |-
+          <strong>Australia</strong>: Innehåller förortsdata baserad
+             på data från Australian Bureau of Statistics.
         contributors_ca_html: |-
           <strong>Kanada</strong>: Innehåller data från
              GeoBase&reg;, GeoGratis (&copy; Department of Natural
@@ -1993,7 +1995,7 @@ sv:
       flash: Uppdaterade klientinformationen framgångsrikt
     destroy:
       flash: Annullerade registreringen av klientprogrammet
-  user:
+  users:
     login:
       title: Logga in
       heading: Logga in
@@ -2100,6 +2102,7 @@ sv:
         kartan!
       terms declined: Vi beklagar att du bestämt dig för att inte acceptera de nya
         användarvillkoren. För mer information, se <a href="%{url}">denna wikisida</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: Villkor för deltagare
       heading: Villkor för deltagare
@@ -2109,9 +2112,11 @@ sv:
       consider_pd: Utöver ovan nämnda avtal, anser jag att mina bidrag är inom Public
         Domain.
       consider_pd_why: vad är det här?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Information som hjälper dig förstå dessa termer: en <a href="%{summary}">lättläst
         sammanfattning</a> och några <a href="%{translations}">informella översättningar</a>'
       agree: Jag godkänner
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Avslå
       you need to accept or decline: Läs igenom och Godkänn eller Avböj de nya bidragsvillkoren
         för att fortsätta.
@@ -2234,6 +2239,7 @@ sv:
           de nya bidragsvillkoren.
         agreed_with_pd: Du har också förklarat att du anser att dina redigeringar
           är inom Public Domain.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: vad är detta?
       profile description: 'Profilbeskrivning:'
       preferred languages: 'Föredraget språk:'
@@ -2241,6 +2247,7 @@ sv:
       image: 'Bild:'
       gravatar:
         gravatar: Använd Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: vad är detta?
         disabled: Gravatar har inaktiverats.
         enabled: Din Gravatar har aktiverats.
index 34c1876e1ee75a7a41463bdbd96217a78ea72b1d..23b1e6307703045be9d653324dc58561526f99c0 100644 (file)
@@ -157,6 +157,7 @@ ta:
       description: விளக்கம்
   changeset:
     changeset_paging_nav:
+      showing_page: பக்கம் %{page}
       next: அடுத்து »
       previous: « முந்தைய
     changeset:
@@ -219,6 +220,7 @@ ta:
     diary_comment:
       hide_link: இக் கருத்துரையை மறை
       confirm: உறுதிசெய்
+      report: இந்தப் பின்னூட்டத்தை முறையிடுக
     location:
       location: 'இடம்:'
       view: காண்
@@ -683,7 +685,7 @@ ta:
     form:
       name: பெயர்
       required: தேவைப்படும்
-  user:
+  users:
     login:
       title: புகுபதிகை
       heading: புகுபதிகை
index 1652cc46573477201f210dd0e2e56c498a30a960..8a9983deb46317ec2b40b273466ec3ab2e7ab085 100644 (file)
@@ -658,7 +658,7 @@ te:
     form:
       name: పేరు
       required: తప్పనిసరి
-  user:
+  users:
     login:
       title: ప్రవేశం
       heading: ప్రవేశం
index 59243aae0e8d4e0b3340846eb56a707f0d33ba8d..7f8e7d7cd5ee9a6d5f55b215a25cd2f26e4e18e2 100644 (file)
@@ -192,7 +192,7 @@ th:
         tag: หน้าคำอธิบายวิกิาสำหรับป้ายระบุ %{key}=%{value}
       wikidata_link: รายการ %{page} ที่วิกิสนเทศ
       wikipedia_link: บทความ %{page} ที่วิกิพีเดีย
-      telephone_link: à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cà¹\84à¸\9bà¹\80ลà¸\82หมาย %{phone_number}
+      telephone_link: à¹\82à¸\97รศัà¸\9eà¸\97à¹\8cà¹\84à¸\9bà¸\97ีà¹\88หมายà¹\80ลà¸\82 %{phone_number}
     note:
       title: 'หมายเหตุ: %{id}'
       new_note: หมายเหตุใหม่
@@ -448,7 +448,7 @@ th:
           social_facility: สโมสรพบปะ
           studio: สถานที่บันทึกภาพและเสียง
           swimming_pool: สระว่ายน้ำ
-          taxi: à¸£à¸\96แท็กซี่
+          taxi: à¸\88ุà¸\94à¸\88อà¸\94แท็กซี่
           telephone: โทรศัพท์สาธารณะ
           theatre: โรงละคร
           toilets: ห้องน้ำสาธารณะ
@@ -809,7 +809,7 @@ th:
           deli: ร้านขายอาหารพิเศษ
           department_store: ห้างสรรพสินค้า
           discount: ร้านสินค้าลดราคา
-          doityourself: à¸\97ำà¸\94à¹\89วยà¸\95ัวà¸\97à¹\88าà¸\99à¹\80อà¸\87
+          doityourself: à¸£à¹\89าà¸\99อุà¸\9bà¸\81รà¸\93à¹\8cà¸\8aà¹\88าà¸\87à¸\9bระà¸\88ำà¸\9aà¹\89าà¸\99
           dry_cleaning: ร้านซักแห้ง
           electronics: ร้านเครื่องไฟฟ้า
           estate_agent: บริษัทอสังหาริมทรัพย์
@@ -946,6 +946,13 @@ th:
       created_at: เมื่อ %{datetime}
   reports:
     new:
+      title_html: แจ้งปัญหาเกี่ยวกับ %{link}
+      select: 'เลือกประเภทของปัญหาที่ประสงค์จะแจ้ง:'
+      disclaimer:
+        intro: 'ก่อนที่จะแจ้งปัญหาไปยังผู้ดูแล ขอให้ดูจนแน่ใจก่อนว่า:'
+        not_just_mistake: ปัญหานี้ไม่ได้เกิดจากเพียงความพลั้งเผลอ
+        unable_to_fix: คุณและผู้ใช้คนอื่นไม่สามารถเข้าไปแก้ปัญหานี้ด้วยตัวเอง
+        resolve_with_user: คุณได้พยายามพูดคุยแก้ไขปัญหากับผู้ใช้คนดังกล่าวแล้ว
       categories:
         diary_entry:
           threat_label: บันทึกนี้มีใจความข่มขู่คุกคาม
@@ -962,6 +969,7 @@ th:
           abusive_label: หมายเหตุนี้ใช้ถ้อยคำหยาบคายหรือส่งเสริมความรุนแรง
           other_label: อื่นๆ
     create:
+      successful_report: ทำการแจ้งปัญหาเสร็จสิ้นเรียบร้อย
       provide_details: กรุณาระบุรายละเอียด
   layouts:
     logo:
@@ -988,10 +996,7 @@ th:
     intro_header: ยินดีต้อนรับสู่ OpenStreetMap!
     intro_text: OpenStreetMap เป็นแผนที่โลกที่สร้างโดยผู้คนเช่นท่าน และใช้งานได้ไม่เสียค่าใช้จ่ายภายใต้สัญญาอนุญาตแบบเปิด
     intro_2_create_account: สร้างบัญชีผู้ใช้ใหม่
-    partners_html: เซิร์ฟเวอร์สนับสนุนโดย %{ucl}, %{bytemark}, %{ic}, และ%{partners}อื่น
-      ๆ
     partners_ucl: ยูซีแอล (วิทยาลัยอุดมศึกษาลอนดอน)
-    partners_ic: วิทยาลัยอิมพีเรียลลอนดอน
     partners_bytemark: ไบต์มาร์กโฮสติง
     partners_partners: องค์กรพันธมิตร
     osm_offline: ฐานข้อมูลของ OpenStreetMap กำลังออฟไลน์เพื่อให้สามารถดำเนินการบำรุงรักษาตามปกติได้
@@ -1300,7 +1305,10 @@ th:
         infringement_2_html: |-
           หากท่านเชื่อว่าข้อมูลละเมิดลิขสิทธิ์ปรากฏในเว็บไซต์นี้หรือในฐานข้อมูล OpenStreetMap โปรดดู <a href="https://www.osmfoundation.org/wiki/License/Takedown_procedure">ขั้นตอนการลบข้อมูลละเมิดลิขสิทธิ์</a> หรือแจ้งได้ที่
           <a href="http://dmca.openstreetmap.org/">หน้ารับแจ้งการละเมิดข้อมูลลิขสิทธิ์</a>
-        trademarks_title_html: <span id="trademarks"></span>เครืองหมายการค้า
+        trademarks_title_html: <span id="trademarks"></span>เครื่องหมายการค้า
+        trademarks_1_html: OpenStreetMap, State of the Map, และตราสัญลักษณ์แว่นขยาย
+          เป็นเครื่องหมายการค้าจดทะเบียนของมูลนิธิ OpenStreetMap, หากคุณมีข้อสงสัยเกี่ยวกับการใช้ชื่อและตราสัญลักษณ์ของเรา
+          สามารถตรวจสอบรายละเอียดได้ที่หน้า<a href="https://wiki.osmfoundation.org/wiki/Trademark_Policy">นโยบายเครื่องหมายการค้า</a>
     index:
       js_1: ท่านกำลังใช้เบราว์เซอร์ที่ไม่รองรับจาวาสคริปต์ หรือท่านปิดใช้งานจาวาสคริปต์
       js_2: OpenStreetMap ใช้จาวาสคริปต์ในการแสดงแผนที่
@@ -1538,6 +1546,8 @@ th:
       upload_trace: อัปโหลดรอยทาง GPS
       trace_uploaded: แฟ้มข้อมูล GPX ของท่านอัปโหลดเข้าระบบแล้ว กำลังรอบรรจุเข้าฐานข้อมูล
         ซึ่งจะใช้เวลาประมาณครึ่งชั่วโมง เมื่อกระบวนการเรียบร้อยแล้วจะมีอีเมลแจ้งท่านให้ทราบ
+      traces_waiting: คุณมีรอยทาง %{count} ชุด ที่กำลังรออัพโหลด กรุณารอให้การอัพโหลดเหล่านี้เสร็จสิ้น
+        ก่อนที่จะเพิ่มรอยทางชุดต่อไป, เพื่อไม่ให้ผู้ใช้คนอื่นๆ จะต้องรอคิวนาน
     edit:
       filename: 'ชื่อแฟ้ม:'
       download: ดาวน์โหลด
@@ -1610,6 +1620,8 @@ th:
   application:
     require_cookies:
       cookies_needed: ดูเหมือนว่าคุณปิดใช้งานคุกกี้อยู่, กรุณาเปิดใช้งานคุกกี้ในบราวเซอร์ของคุณก่อนจะดำเนินการต่อ
+    setup_user_auth:
+      blocked: คุณถูกระงับการเข้าถึง API, กรุณาเข้าระบบทางหน้าเว็บหลักหากต้องการทราบสาเหตุที่ถูกระงับในครั้งนี้
   oauth:
     authorize:
       title: อนุญาตการเข้าถึงบัญชีของคุณ
@@ -1695,7 +1707,7 @@ th:
       flash: ปรับปรุงข้อมูลฝั่งผู้ใช้เรียบร้อยแล้ว
     destroy:
       flash: ถอนการลงทะเบียนแอปพลิเคชันฝั่งผู้ใช้แล้ว
-  user:
+  users:
     login:
       title: ลงชื่อเข้าใช้
       heading: ลงชื่อเข้าใช้
@@ -1714,6 +1726,9 @@ th:
       no account: ยังไม่ได้เป็นสมาชิก?
       account not active: ขออภัย บัญชีของท่านยังไม่เปิดใช้งาน<br/>โปรดใช้ลิงก์ที่ให้ไว้ในอีเมลตอบรับเพื่อเปิดใช้งานบัญชี
         หรือ<a href="%{reconfirm}">ขออีเมลตอบรับใหม่</a> หากสูญหาย
+      account is suspended: ขออภัย บัญชีของคุณถูกระงับการใช้งานเนื่องจากกิจกรรมที่น่าสงสัย<br/>หากต้องการพูดคุยในรายละเอียด
+        กรุณาติดต่อ<a href="%{webmaster}">ผู้ดูแลระบบ</a>
+      auth failure: ขออภัย ไม่สามารถเข้าระบบด้วยชื่อผู้ใช้และรหัสผ่านดังกล่าวได้
       openid_logo_alt: เข้าใช้งานด้วย OpenID
       auth_providers:
         openid:
@@ -1733,11 +1748,13 @@ th:
           alt: เข้าใช้งานด้วยบัญชี GitHub
         wikipedia:
           title: เข้าใช้งานด้วยวิกิพีเดีย
+          alt: เข้าสู่ระบบด้วยบัญชีวิกิพีเดีย
         yahoo:
           title: เข้าใช้งานด้วย Yahoo
           alt: เข้าใช้งานด้วย Yahoo OpenID
         wordpress:
           title: เข้าใช้งานด้วย Wordpress
+          alt: เข้าสู่ระบบด้วย Wordpress OpenID
         aol:
           title: เข้าใช้งานด้วย AOL
           alt: เข้าใช้งานด้วย AOL OpenID
@@ -1807,7 +1824,7 @@ th:
       my settings: การตั้งค่าของฉัน
       my comments: ความคิดเห็นของฉัน
       oauth settings: ตั้งค่าการอนุญาต OAuth
-      blocks on me: à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\81ีà¸\94à¸\81ัà¸\99à¸\82à¹\89าà¸\9eà¹\80à¸\88à¹\89า
+      blocks on me: à¸\81ารà¸\96ูà¸\81ระà¸\87ัà¸\9aà¸\82อà¸\87à¸\89ัà¸\99
       blocks by me: ผู้ใช้ที่ข้าพเจ้ากีดกัน
       send message: ส่งข้อความ
       diary: บันทึก
@@ -1839,8 +1856,10 @@ th:
       no nearby users: ไม่ได้มีผู้ใดแสดงตัวว่าทำแผนที่อยู่ใกล้เคียง
       role:
         administrator: คนนี้เป็นผู้ดูแลระบบ
+        moderator: ผู้ใช้นี้เป็นผู้ดูแล
+      block_history: การถูกระงับใช้งานในปัจจุบัน
       comments: ความเห็นที่เขียน
-      create_block: à¸\81ีà¸\94à¸\81ัà¸\99ผู้ใช้นี้
+      create_block: à¸£à¸°à¸\87ัà¸\9aผู้ใช้นี้
       activate_user: เปิดใช้งานผู้ใช้นี้
       deactivate_user: ปิดใช้งานผู้ใช้นี้
       confirm: ยืนยัน
@@ -1988,66 +2007,83 @@ th:
       fail: ไม่สามารถถอดถอนสถานะ `%{role}' แก่ผู้ใช้ `%{name}' โปรดตรวจสอบว่าทั้งผู้ใช้และสถานะเป็นที่ถูกต้องดีแล้ว
   user_blocks:
     model:
-      non_moderator_update: à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\88ึà¸\87à¸\88ะสามารà¸\96สรà¹\89าà¸\87หรือà¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99ได้
+      non_moderator_update: à¸\88ะà¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\88ึà¸\87à¸\88ะสามารà¸\96ระà¸\87ัà¸\9a à¸«à¸£à¸·à¸­à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ารระà¸\87ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89ได้
       non_moderator_revoke: ต้องเป็นผู้ดูแลระบบจึงจะสามารถเพิกถอนการกีดกันได้
     not_found:
-      sorry: à¸\82ออภัย à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89รหัส %{id} à¹\84มà¹\88à¸\9eà¸\9a
+      sorry: à¸\82ออภัย à¹\84มà¹\88à¸\9eà¸\9aà¸\81ารระà¸\87ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\95ามหมายà¹\80ลà¸\82อà¹\89าà¸\87อิà¸\87 %{id} à¸\97ีà¹\88ระà¸\9aุมา
       back: กลับไปที่ดัชนี
     new:
-      title: à¸ªà¸£à¹\89าà¸\87à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99à¸\9aà¸\99 %{name}
+      title: à¸£à¸°à¸\87ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89 %{name}
       heading: สร้างการกีดกันบน %{name}
-      reason: à¹\80หà¸\95ุà¸\9cลà¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89 %{name} à¸\96ูà¸\81à¸\81ีà¸\94à¸\81ัà¸\99 à¹\82à¸\9bรà¸\94อยà¹\88าà¹\83à¸\8aà¹\89อารมà¸\93à¹\8cรุà¸\99à¹\81รà¸\87à¹\83à¸\99ระหวà¹\88าà¸\87ระà¸\9aุ
-        à¹\81ละà¸\82อà¹\83หà¹\89ระà¸\9aุรายละà¹\80อียà¸\94à¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aสà¸\96าà¸\99à¸\81ารà¸\93à¹\8cà¸\97ีà¹\88à¸\9eà¸\9aà¹\83หà¹\89ละà¹\80อียà¸\94à¸\8aัà¸\94à¹\80à¸\88à¸\99 à¸\88ำà¹\84วà¹\89วà¹\88าà¸\82à¹\89อà¸\84วามà¸\97ีà¹\88à¸\97à¹\88าà¸\99à¸\9eิมà¸\9eà¹\8cà¸\88ะà¸\9bราà¸\81à¸\8fà¸\95à¹\88อสาà¸\98ารà¸\93ะ
-        à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ุà¸\81à¸\97à¹\88าà¸\99à¹\84มà¹\88à¸\88ำà¸\95à¹\89อà¸\87à¹\80à¸\82à¹\89าà¹\83à¸\88à¸\96ึà¸\87ศัà¸\9eà¸\97à¹\8cà¹\80à¸\89à¸\9eาะ à¸\88ึà¸\87à¸\82อà¹\81à¸\99ะà¸\99ำà¹\83หà¹\89à¹\83à¸\8aà¹\89ศัà¸\9eà¸\97à¹\8cอยà¹\88าà¸\87à¸\87à¹\88า
-      period: à¸\95à¹\89อà¸\87à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¸\88าà¸\81 API à¸\99ัà¸\9aà¹\81à¸\95à¹\88à¸\9aัà¸\94à¸\99ีà¹\89 à¸\99าà¸\99à¹\80à¸\97à¹\88าà¹\83à¸\94
+      reason: à¹\80หà¸\95ุà¸\9cลà¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89 %{name} à¸\96ูà¸\81ระà¸\87ัà¸\9a, à¹\82à¸\9bรà¸\94อยà¹\88าà¹\80à¸\82ียà¸\99à¸\94à¹\89วยอารมà¸\93à¹\8cรุà¸\99à¹\81รà¸\87 à¹\82à¸\94ยà¸\82อà¹\83หà¹\89ระà¸\9aุรายละà¹\80อียà¸\94à¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aสà¸\96าà¸\99à¸\81ารà¸\93à¹\8cà¸\97ีà¹\88à¸\9eà¸\9aà¹\83หà¹\89ละà¹\80อียà¸\94à¸\8aัà¸\94à¹\80à¸\88à¸\99,
+        à¸\84วรà¹\83à¸\8aà¹\89à¸\84ำอà¸\98ิà¸\9aายà¸\97ีà¹\88à¹\80à¸\82à¹\89าà¹\83à¸\88à¸\87à¹\88ายà¹\80à¸\9bà¹\87à¸\99หลัà¸\81 à¹\80à¸\9eราะà¹\84มà¹\88à¹\83à¸\8aà¹\88วà¹\88าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ุà¸\81à¸\84à¸\99à¸\88ะà¹\80à¸\82à¹\89าà¹\83à¸\88ศัà¸\9eà¸\97à¹\8cà¹\80à¸\89à¸\9eาะ,
+        à¹\81ละà¸\95à¹\89อà¸\87อยà¹\88าลืม à¸§à¹\88าสิà¹\88à¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¹\80à¸\82ียà¸\99à¸\99ีà¹\89à¸\88ะà¹\81สà¸\94à¸\87à¸\95à¹\88อสาà¸\98ารà¸\93ะà¸\94à¹\89ว
+      period: à¸£à¸°à¸\87ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¸\88าà¸\81à¸\81ารà¹\80à¸\82à¹\89าà¸\96ึà¸\87 API, à¸\99าà¸\99à¹\80à¸\97à¹\88าà¹\83à¸\94 à¹\82à¸\94ยà¹\80ริà¹\88มà¸\99ัà¸\9aà¸\88าà¸\81à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99
       submit: สร้างการกีดกัน
       tried_contacting: ข้าพเจ้าติดต่อผู้ใช้คนนี้และขอร้องให้เขาหยุดการกระทำ
       tried_waiting: ข้าพเจ้าได้ให้เวลานานสมควรแก่ผู้ใช้คนนี้ในการตอบคำถามกลับ
-      needs_view: ผู้ใช้ต้องเข้าระบบก่อนการกีดกันนี้จะถูกเพิกถอน
+      needs_view: ผู้ใช้ต้องเข้าระบบก่อน การระงับนี้จึงจะถูกเพิกถอน
       back: แสดงการกีดกันทั้งหมด
     edit:
-      title: à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99à¸\9aà¸\99 %{name}
+      title: à¹\81à¸\81à¹\89à¹\84à¸\82à¸\81ารระà¸\87ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89 %{name}
       heading: แก้ไขการกีดกันบน %{name}
-      reason: เหตุผลที่ผู้ใช้ %{name} ถูกกีดกัน โปรดอย่าใช้อารมณ์รุนแรงในระหว่างระบุ
-        และขอให้ระบุรายละเอียดเกี่ยวกับสถานการณ์ที่พบให้ละเอียดชัดเจน จำไว้ว่าข้อความที่ท่านพิมพ์จะปรากฏต่อสาธารณะ
-        ผู้ใช้ทุกท่านไม่จำต้องเข้าใจถึงศัพท์เฉพาะ จึงขอแนะนำให้ใช้ศัพท์อย่างง่าย
-      period: ต้องการกีดกันผู้ใช้คนนี้จาก API นับแต่บัดนี้ นานเท่าใด
+      reason: เหตุผลที่ผู้ใช้ %{name} ถูกระงับ, โปรดอย่าเขียนด้วยอารมณ์รุนแรง โดยขอให้ระบุรายละเอียดเกี่ยวกับสถานการณ์ที่พบให้ละเอียดชัดเจน
+        และควรใช้คำอธิบายที่เข้าใจง่ายเป็นหลัก เพราะไม่ใช่ว่าผู้ใช้ทุกคนจะเข้าใจศัพท์เฉพาะ
+      period: ระงับผู้ใช้คนนี้จากการเข้าถึง API, นานเท่าใด โดยเริ่มนับจากปัจจุบัน
       submit: ปรับปรุงการกีดกัน
-      show: à¸\94ูà¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99นี้
+      show: à¸\94ูรายละà¹\80อียà¸\94à¸\81ารระà¸\87ัà¸\9aนี้
       back: แสดงการกีดกันทั้งหมด
-      needs_view: à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¹\80à¸\82à¹\89าระà¸\9aà¸\9aà¸\81à¹\88อà¸\99à¹\80à¸\9eิà¸\81à¸\96อà¸\99à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99หรือไม่?
+      needs_view: à¸\95à¹\89อà¸\87à¸\81ารà¹\83หà¹\89à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\84à¸\99à¸\99ีà¹\89à¹\80à¸\82à¹\89าระà¸\9aà¸\9aà¸\81à¹\88อà¸\99à¹\80à¸\9eิà¸\81à¸\96อà¸\99à¸\81ารระà¸\87ัà¸\9aหรือไม่?
     filter:
       block_expired: การกีดกันนี้สิ้นผลแล้วแก้ไขไม่ได้
-      block_period: à¸£à¸°à¸¢à¸°à¹\80วลาà¸\97ีà¹\88à¸\81ีà¸\94à¸\81ัà¸\99à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¹\84à¸\9bà¸\95ามรายà¸\81ารà¹\80ลือà¸\81à¹\83à¸\99à¸\81ลà¹\88อà¸\87à¸\95ัวà¹\80ลือà¸\81à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99
+      block_period: à¸\94ูระยะà¹\80วลาà¸\97ีà¹\88ระà¸\87ัà¸\9a à¹\83หà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99ึà¹\88à¸\87à¹\83à¸\99à¸\84à¹\88าà¸\97ีà¹\88à¹\80ลือà¸\81à¹\84วà¹\89à¸\88าà¸\81รายà¸\81ารà¸\99ีà¹\89
     create:
-      try_contacting: กรุณาติดต่อผู้ใช้ก่อนที่จะกีดกันเขาออกจากระบบ และเผื่อเวลาระยะหนึ่งให้ตอบกลับ
+      try_contacting: กรุณาติดต่อผู้ใช้คนนั้นก่อนที่จะตัดสินใจสั่งระงับใช้งาน และอย่าลืมเผื่อเวลาระยะหนึ่งให้ตอบกลับ
+      try_waiting: กรุณาให้เวลากับผู้ใช้ในการตอบคำถาม ก่อนที่ตัดสินเรื่องการสั่งระงับใช้งาน
     update:
+      only_creator_can_edit: การระงับนี้สามารถแก้ไขได้ โดยผู้ดูแลที่เป็นผู้สั่งระงับเองเท่านั้น
       success: ปรับปรุงการกีดกันแล้ว
     index:
-      title: à¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99ผู้ใช้
-      heading: à¸£à¸²à¸¢à¸\81ารà¸\81ารà¸\81ีà¸\94à¸\81ัà¸\99ผู้ใช้
+      title: à¸\81ารระà¸\87ัà¸\9aผู้ใช้
+      heading: à¸£à¸²à¸¢à¸\81ารà¸\81ารระà¸\87ัà¸\9aผู้ใช้
       empty: ยังไม่มีการกีดกันใด ๆ
     revoke:
-      past: การบล็อกนี้ได้สิ้นสุดไปเมื่อ %{time}ก่อนแล้ว การยกเลิกจึงไม่มีผล
-      flash: ได้ยกเลิกการบล็อกนี้แล้ว
+      title: ยกเลิกการระงับใช้งานของ %{block_on}
+      heading: เพิกถอนการระงับผู้ใช้ %{block_on} ซึ่งสั่งโดยผู้ใช้ %{block_by}
+      past: การระงับนี้ได้สิ้นสุดไปเมื่อ %{time}ก่อนแล้ว การยกเลิกจึงไม่มีผล
+      confirm: แน่ใจหรือว่าต้องการจะยกเิลิกการระงับนี้?
+      flash: ได้ยกเลิกการระงับนี้แล้ว
     helper:
       time_future: จะสิ้นสุดใน %{time}
+      until_login: มีผลจนถึงการเริ่มเข้าระบบครั้งถัดไป
       time_past: สิ้นสุดไปเมื่อ %{time}ก่อน
     blocks_on:
-      title: การกีดกันบน %{name}
-      heading: รายการการกีดกันบน %{name}
-      empty: '%{name} ยังไม่ได้ถูกกีดกัน'
+      title: การถูกระงับใช้งานของ %{name}
+      heading: รายการการถูกระงับของผู้ใช้ %{name}
+      empty: '%{name} ยังไม่เคยถูกระงับใช้งาน'
+    blocks_by:
+      heading: แสดงการสั่งระงับใช้โดย %{name}
+      empty: '%{name} ไม่เคยได้สั่งระงับผู้ใช้คนใดเลย'
     show:
+      heading: '%{block_on} โดนระงับโดย %{block_by}'
       time_past: สิ้นสุดไปเมื่อ %{time}ก่อน
+      created: ระงับเมื่อ
       ago: '%{time}ก่อน'
       status: สถานะ
       show: แสดง
       edit: แก้ไข
+      reason: 'เหตุผลสำหรับการระงับใช้งาน:'
+      needs_view: ผู้ใช้ต้องเข้าระบบก่อน การระงับนี้จึงจะถูกเพิกถอน
     block:
+      not_revoked: (ไม่ได้มีการยกเลิก)
       show: แสดง
       edit: แก้ไข
     blocks:
+      display_name: ผู้ใช้ที่ถูกระงับ
+      creator_name: ผู้สั่งให้ระงับ
+      reason: เหตุผลที่ต้องระงับใช้งาน
       status: สถานะ
+      revoker_name: ยกเลิกโดย
       showing_page: หน้า %{page}
       next: ถัดไป »
       previous: « ก่อนหน้า
@@ -2064,6 +2100,7 @@ th:
       full: เนื้อความเต็มในหมายเหตุ
     mine:
       heading: หมายเหตุของ %{user}
+      creator: ผู้สร้าง
       ago_html: '%{when}ก่อน'
   javascripts:
     close: ปิด
@@ -2123,6 +2160,8 @@ th:
       new:
         add: เพิ่มหมายเหตุ
       show:
+        anonymous_warning: หมายเหตุนี้มีข้อความจากผู้ที่ไม่ประสงค์จะออกนาม ซึ่งควรทำการตรวจสอบตามข้อมูลที่แจ้งมานี้ด้วยตัวคุณเองอีกครั้ง
+          ก่อนจะดำเนินการใดๆ ต่อ
         hide: ซ่อน
         resolve: ปิดเรื่อง
         reactivate: รื้อฟื้นหมายเหตุ
@@ -2142,27 +2181,35 @@ th:
       directions: เส้นทาง
       distance: ระยะทาง
       errors:
+        no_route: ไม่พบเส้นทางระหว่างสองจุดที่คุณต้องการ
         no_place: ขออภัย - ไม่พบสถานที่ "%{place}"
       instructions:
         continue_without_exit: เคลื่อนต่อไปทางถนน %{name}
+        slight_right_without_exit: เบนขวาไปที่ %{name}
         offramp_right_with_name: ใช้ทางลาดด้านขวาไปที่ถนน %{name}
         onramp_right_without_exit: เลี่ยวขวาที่ทางลาดไปที่ถนน %{name}
-        endofroad_right_without_exit: à¹\80มืà¹\88อà¸\96ึà¸\87สุà¸\94à¸\96à¸\99à¸\99à¹\80ลีà¹\89ยวà¸\82วาà¹\84à¸\9bà¸\97ีà¹\88à¸\96à¸\99à¸\99 %{name}
+        endofroad_right_without_exit: à¹\80มืà¹\88อà¸\96ึà¸\87สุà¸\94à¸\96à¸\99à¸\99à¹\81ลà¹\89ว à¹\83หà¹\89à¹\80ลีà¹\89ยวà¸\82วาà¹\80à¸\82à¹\89า %{name}
         merge_right_without_exit: เลี้ยวขวาเข้าสู่ถนน %{name} ซึ่งเป็นทางเอก
         fork_right_without_exit: ที่ทางแยกเลี้ยวขวาไปที่ถนน %{name}
+        turn_right_without_exit: เลี้ยวขวาเข้า %{name}
         sharp_right_without_exit: หักขวาเข้า %{name}
         uturn_without_exit: วกกลับไปตามถนน %{name}
         sharp_left_without_exit: หักซ้ายเข้า %{name}
         turn_left_without_exit: เลี้ยวซ้ายไปที่ %{name}
         offramp_left_with_name: ใช้ทางลาดด้านซ้ายไปที่ %{name}
         onramp_left_without_exit: เลี้ยวซ้ายบนทางลาดไปที่ถนน %{name}
+        onramp_left_without_directions: เลี้ยวซ้ายขึ้นทางลาด
+        onramp_left: เลี้ยวซ้ายขึ้นทางลาด
         endofroad_left_without_exit: เมื่อถึงสุดถนนเลี้ยวซ้ายไปที่ถนน %{name}
         merge_left_without_exit: เลี้ยวซ้ายเข้าสู่ถนน %{name} ซึ่งเป็นทางเอก
         fork_left_without_exit: ที่ทางแยกเลี้ยวซ้ายไปที่ถนน %{name}
         slight_left_without_exit: ขยับซ้ายเล็กน้อยไปที่ %{name}
         follow_without_exit: ไปตาม %{name}
+        leave_roundabout_without_exit: ออกจากวงเวียน - %{name}
         start_without_exit: เริ่มที่ %{name}
         destination_without_exit: ตรงไปยังจุดหมาย
+        against_oneway_without_exit: ให้วิ่งสวนเลนไปบน %{name}
+        end_oneway_without_exit: สิ้นสุดช่วงเดินรถทางเดียวบน %{name}
         roundabout_with_exit: ณ วงเวียน ใช้ทางออก %{exit} ไปที่ถนน %{name}
         exit_roundabout: ออกจากวงเวียนไปทาง %{name}
         unnamed: ถนนไม่มีชื่อ
index 096bbec5fb0151f1be0f07b3b0ae23715b3a8ab5..1171634d7e72b13fc946c1346b51ee588fe6e53f 100644 (file)
@@ -816,10 +816,7 @@ tl:
     intro_text: Ang OpenStreetMap ay isang mapa ng mundo na nilikha ng mga taong katulad
       mo at malayang gamitin sa ilalim ng isang bukas na lisensya.
     intro_2_create_account: Lumikha ng isang akawnt ng tagagamit
-    partners_html: Ang pagpapasinaya ay sinusuportahan ng %{ucl}, %{bytemark}, %{ic},
-      at iba pang %{partners}.
     partners_ucl: UCL
-    partners_ic: Dalubhasaang Pang-imperyo Londres
     partners_bytemark: Pagpapasinaya ng Bytemark
     partners_partners: mga kawaksi
     osm_offline: Ang kalipunan ng dato ng OpenStreetMap ay pangkasalukuyang nakapatay
@@ -1093,6 +1090,9 @@ tl:
           BY</a>),\n<a href=\"http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm\">Land
           Vorarlberg</a> at ng\nLand Tirol (na nasa ilalim ng <a href=\"http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/\">CC
           BY AT na mayroong mga susog</a>)."
+        contributors_au_html: |-
+          <strong>Australiya</strong>: Naglalaman ng datong sub-urbano na nakabatay
+          sa dato ng Tanggapan ng Estadistika ng Australiya.
         contributors_ca_html: "<strong>Canada</strong>: Naglalaman ng dato mula sa\nGeoBase&reg;,
           GeoGratis (&copy; Kagawaran ng Likas na Yaman ng \nCanada), CanVec (&copy;
           Kagawaran ng Likas na Yaman ng Canada), at StatCan \n(Dibisyon ng Heograpiya,
@@ -1517,7 +1517,7 @@ tl:
       flash: Matagumpay na naisapanhon ang kabatiran sa kliyente
     destroy:
       flash: Winasak ang pagpapatala ng aplikasyon ng kliyente
-  user:
+  users:
     login:
       title: Lumagda
       heading: Lumagda
index a47bc7b2e3f76dd342412c9c0cc26b987b1449f5..88b920c5d63f03e3bcfff61bb2ebe5f910cd51a2 100644 (file)
@@ -1106,10 +1106,9 @@ tr:
     intro_text: OpenStreetMap senin gibi insanlar tarafından oluşturulan, kullanımı
       serbest ve açık lisans altında olan bir dünya haritasıdır.
     intro_2_create_account: hesap oluşturunuz
-    partners_html: Barındırma hizmeti, %{ucl}, %{ic}, %{bytemark}, %{ic} ve diğer
-      %{partners} tarafından desteklenmektedir.
+    hosting_partners_html: Barındırma hizmeti, %{ucl}, %{bytemark} ve diğer %{partners}
+      tarafından desteklenmektedir.
     partners_ucl: UCL
-    partners_ic: Imperial College London
     partners_bytemark: Bytemark Hosting
     partners_partners: ortaklar
     osm_offline: OpenStreetMap veritabanı bakım çalışmaları yürütüldüğü için veritabanı
@@ -1430,6 +1429,10 @@ tr:
           <strong>Avusturya</strong>: <a href="https://data.wien.gv.at/">Stadt Wien</a> (<a href="https://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a> lisansı altında),
           <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> ve
           Land Tirol'dan (<a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">değişiklikleriyle CC BY AT lisansı altında</a>) veriler içermektedir.
+        contributors_au_html: '<strong>Avustralya</strong>: <a href="https://creativecommons.org/licenses/by/4.0/">CC
+          BY 4.0</a> kapsamında Commonwealth of Australia tarafından lisanslanan <a
+          href="https://creativecommons.org/licenses/by/4.0/">PSMA Australia Limited</a>''ten
+          alınan verileri içerir.'
         contributors_ca_html: "<strong>Kanada</strong>: GeoBase&reg;, GeoGratis \n(&copy;
           Department of Natural\nResources Canada), CanVec (&copy; Department of Natural\nResources
           Canada) ve StatCan'den (Geography Division,\nStatistics Canada) veriler
@@ -2003,7 +2006,7 @@ tr:
       flash: Müşteri bilgilerini başarıyla güncelleştirildi
     destroy:
       flash: İstemci uygulaması kaydını yok etti
-  user:
+  users:
     login:
       title: Giriş
       heading: Giriş
@@ -2112,6 +2115,7 @@ tr:
       terms accepted: Yeni katılımcı şartları kabul ettiğin için teşekkür ederiz!
       terms declined: Yeni Katılımcı Koşulları kabul etmediğiniz için üzgünüz. Daha
         fazla bilgi için lütfen <a href="%{url}">buradaki wiki sayfasına</a> bakınız.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: Katılımcı Şartları
       heading: Katılımcı Şartları
@@ -2121,9 +2125,13 @@ tr:
       consider_pd: Yukarıdaki anlaşmaya ek olarak, katkılarınızın kamu malı olarak
         kabul edilmesini de seçebilirsiniz
       consider_pd_why: bu nedir?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Buradaki bilgileri anlamanıza yardımcı olabilecek bilgiler:  <a href="%{summary}">okunabilir
         bir özet</a> ve ayrıca <a href="%{translations}">genel çeviriler</a>'
       agree: Kabul Et
+      declined: |2-
+
+        https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Reddet
       you need to accept or decline: Lütfen katılımcı şartlarını okuyunuz ve şartları
         kabul ya da ret ediniz.
@@ -2244,6 +2252,7 @@ tr:
         review link text: Yeni Katkıda Bulunma Şartlarını incelemek ve kabul etmek
           için lütfen bu bağlantıyı kolaylık sağlamak için izleyin.
         agreed_with_pd: Ayrıca düzenlediklerin Kamu Malı olsun diye kabul ettin.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: Bu nedir?
       profile description: 'Tanıtım:'
       preferred languages: 'Tercih edilen diller (mesela tr,en,de):'
@@ -2251,6 +2260,9 @@ tr:
       image: 'Resim:'
       gravatar:
         gravatar: Gravatar kullanın
+        link: |2-
+
+          https://wiki.openstreetmap.org/wiki/Gravatar
         link text: bu nedir?
         disabled: Gravatar devre dışı bırakıldı.
         enabled: Gravatarınızın görüntüsü etkinleştirildi.
@@ -2625,7 +2637,12 @@ tr:
           %{directions} yönüne doğru'
         offramp_right_with_name: Sağdaki rampayı kullanarak %{name} girin
         offramp_right_with_directions: '%{directions} yönünde sağdaki rampadan'
+        offramp_right_with_name_directions: Sağdaki %{directions} taraftaki rampayı,
+          %{name} yoluna doğru alın.
         onramp_right_without_exit: Rampadan sağa dönerek %{name} girin
+        onramp_right_with_directions: '%{directions} doğru rampadan sağ dönün'
+        onramp_right_with_name_directions: '%{name} üzerindeki rampaya doğru %{directions}
+          yönünde sağa dönün'
         onramp_right_without_directions: Rampaya doğru sağa dönün
         onramp_right: Rampaya doğru sağa dönün
         endofroad_right_without_exit: Yolun sonunda sağa %{name} yönünde dönün
@@ -2645,8 +2662,12 @@ tr:
           %{directions} yönüne doğru'
         offramp_left_with_name: Soldaki rampayı kullanarak %{name} girin
         offramp_left_with_directions: '%{directions} yönünde soldaki rampadan'
+        offramp_left_with_name_directions: '%{name} üzerindeki rampaya doğru %{directions}
+          yönünde sola ilerleyin'
         onramp_left_without_exit: Rampadan sola dönerek %{name} girin
         onramp_left_with_directions: '%{directions} doğru rampadan sola dönün'
+        onramp_left_with_name_directions: '%{name} üzerindeki rampaya doğru %{directions}
+          yönünde sola dönün'
         onramp_left_without_directions: Rampaya doğru sola dönün
         onramp_left: Rampaya doğru sola dönün
         endofroad_left_without_exit: Yolun sonunda sola %{name} yönünde dönün
index 213811f744dbc5190f51a3b2603f7fa41c8c5a5b..521554d307db7a9ef1036922987ab7a2a6e19288 100644 (file)
@@ -913,10 +913,7 @@ uk:
     intro_text: OpenStreetMap — мапа світу, створена такими ж людьми, як і ви, для
       вільного використання під відкритою ліцензією.
     intro_2_create_account: Створіть обліковий запис
-    partners_html: Хостинг підтримується %{ucl}, %{ic} та %{bytemark}, а також іншими
-      %{partners}.
     partners_ucl: UCL
-    partners_ic: Імперський коледж Лондона
     partners_bytemark: Bytemark Hosting
     partners_partners: партнерами
     osm_offline: База даних OpenStreetMap в даний момент недоступна, бо саме проводиться
@@ -1225,6 +1222,8 @@ uk:
           <strong>Австрія</strong>: дані від
              <a href="http://data.wien.gv.at/">Stadt Wien</a> (на умовах ліцензії
              <a href="http://creativecommons.org/licenses/by/3.0/at/deed.de">CC BY</a>), <a href="http://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land Vorarlberg</a> та Земля Тіроль (на умовах <a href="http://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY AT з виправленнями</a>).
+        contributors_au_html: '<strong>Австралія</strong>: дані передмість від Австралійського
+          Бюро Статистики.'
         contributors_ca_html: '<strong>Канада</strong>: дані від GeoBase&reg;, GeoGratis
           (&copy; Департамент природних ресурсів Канади), CanVec (&copy; Департамент
           природних ресурсів Канади), та StatCan (Відділ Географії, Статистичне відомство
@@ -1768,7 +1767,7 @@ uk:
       flash: Інформацію клієнта успішно оновлено
     destroy:
       flash: Знищено реєстрацію клієнтського застосунку
-  user:
+  users:
     login:
       title: Ласкаво просимо
       heading: Ласкаво просимо
index 0761211fa72a76b68f8e337ffefdfc0a5fe2e23e..f3af994efcb9c2f4b913735dd1c5a99cb1d2fa0c 100644 (file)
@@ -1030,10 +1030,7 @@ vi:
     intro_text: OpenStreetMap là bản đồ thế giới do những người như bạn xây dựng và
       cho phép sử dụng thoải mái theo một giấy phép nguồn mở.
     intro_2_create_account: Mở tài khoản mới
-    partners_html: Dịch vụ nhờ sự hỗ trợ hosting của %{ucl}, %{bytemark}, %{ic}, và
-      %{partners} khác.
     partners_ucl: UCL
-    partners_ic: Đại học Hoàng gia Luân Đôn
     partners_bytemark: Bytemark Hosting
     partners_partners: các công ty bảo trợ
     osm_offline: Cơ sở dữ liệu OpenStreetMap đang ngoại tuyến trong lúc đang thực
@@ -1338,6 +1335,8 @@ vi:
           BY</a>), <a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Bang
           Vorarlberg</a>, và Bang Tyrol (theo <a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">bản
           sửa đổi CC BY Áo</a>).'
+        contributors_au_html: '<strong>Úc</strong>: Bao gồm dữ liệu về ngoại ô dựa
+          trên dữ liệu của Cục Thống kê Úc.'
         contributors_ca_html: '<strong>Canada</strong>: Bao gồm dữ liệu từ GeoBase®,
           GeoGratis (© Bộ Tài nguyên Canada), CanVec (© Bộ Tài nguyên Canada), và
           StatCan (Sở Địa lý, Statistics Canada).'
@@ -1889,7 +1888,7 @@ vi:
       flash: Đã cập nhật thông tin trình khách thành công
     destroy:
       flash: Đã xóa đăng ký trình khách
-  user:
+  users:
     login:
       title: Đăng nhập
       heading: Đăng nhập
index 07483a0dae709f79a5a4fe484943906999cbb459..0ee6c83e00cd2bcc00a8d391ae5701b0d3a1fa3c 100644 (file)
@@ -31,6 +31,7 @@
 # Author: Xiaomingyan
 # Author: Yfdyh000
 # Author: 乌拉跨氪
+# Author: 夢蝶葬花
 # Author: 阿pp
 # Author: 아라
 ---
@@ -1086,9 +1087,7 @@ zh-CN:
     intro_header: 欢迎访问 OpenStreetMap!
     intro_text: OpenStreetMap 是一个世界地图,由像您一样的人们所构筑,可依据开放许可协议自由使用。
     intro_2_create_account: 创建用户账户
-    partners_html: 主机由%{ucl}、%{bytemark}、%{ic},以及其他%{partners}所支持。
     partners_ucl: 伦敦大学学院
-    partners_ic: 伦敦帝国学院
     partners_bytemark: Bytemark主机
     partners_partners: 合作伙伴
     osm_offline: 由于正在进行基本的数据库维护工作,OpenStreetMap 数据库目前处于脱机状态。
@@ -1620,6 +1619,7 @@ zh-CN:
     create:
       upload_trace: 上传 GPS 轨迹
       trace_uploaded: 您的 GPX 文件已经被上传,正等待被输入数据库。这通常在半小时之内,当上传结束后会发邮件通知您。
+      upload_failed: 抱歉,GPX上传失败。管理员已收到错误警报。请再试一次
       traces_waiting: 您有 %{count} 条轨迹正等待上传,请在上传更多轨迹前等待这些传完,以确保不会给其他用户造成队列拥堵。
     edit:
       title: 编辑轨迹 %{name}
@@ -1639,6 +1639,8 @@ zh-CN:
       visibility: 可见性:
       visibility_help: 这是什么意思?
       visibility_help_url: http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces
+    update:
+      updated: 地点已更新!
     trace_optionals:
       tags: 标签
     show:
@@ -1805,7 +1807,7 @@ zh-CN:
       flash: 更新客户端信息成功
     destroy:
       flash: 已破坏此客户端应用程序注册
-  user:
+  users:
     login:
       title: 登录
       heading: 登录
index f2c666efe79fe358c19439b8bb252385dc1b18c9..6fc5564074e426f130f14051a9111ab419032de8 100644 (file)
@@ -1076,9 +1076,8 @@ zh-TW:
     intro_header: 歡迎來到 OpenStreetMap!
     intro_text: OpenStreetMap 是一幅世界地圖,由像您這樣的人們所建立,在開放授權下可以自由使用。
     intro_2_create_account: 建立使用者帳號
-    partners_html: 主機由 %{ucl}、%{bytemark}、%{ic},和其他 %{partners} 所支援。
+    hosting_partners_html: 主機由 %{ucl}、%{bytemark},和其他 %{partners} 所支援。
     partners_ucl: 倫敦大學學院
-    partners_ic: 倫敦帝國學院
     partners_bytemark: Bytemark 主機代管
     partners_partners: 合作夥伴
     osm_offline: OpenStreetMap 資料庫目前正在離線,直到必要的資料庫維護工作完成為止。
@@ -1328,6 +1327,9 @@ zh-TW:
           BY</a>授權) 、<a href="https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm">Land
           Vorarlberg</a>及 Land Tirol (修訂的<a href="https://www.tirol.gv.at/applikationen/e-government/data/nutzungsbedingungen/">CC-BY
           AT</a>授權) 的資料。
+        contributors_au_html: |-
+          <strong>澳大利亞</strong>:包含來自
+          <a href="https://www.psma.com.au/psma-data-copyright-and-disclaimer">PSMA 澳大利亞有限公司</a>的資料來源,並依據<a href="https://creativecommons.org/licenses/by/4.0/deed.zh_TW">姓名標示 4.0 國際</a>澳大利亞聯邦條款授權。
         contributors_ca_html: |-
           <strong>加拿大</strong>:包含來自 GeoBase&reg;,GeoGratis (&copy; Department of Natural
           Resources Canada) ,CanVec (&copy; Department of Natural
@@ -1828,7 +1830,7 @@ zh-TW:
       flash: 更新客戶端資訊成功
     destroy:
       flash: 已銷毀此用戶端應用程式註冊
-  user:
+  users:
     login:
       title: 登入
       heading: 登入
@@ -1922,14 +1924,17 @@ zh-TW:
       continue: 註冊
       terms accepted: 感謝您接受新的貢獻條款!
       terms declined: 我們很遺憾你已決定不接受新的貢獻者條款。有關詳細資訊,請參閱<a href="%{url}">此 wiki 頁面</a>。
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: 貢獻者條款
       heading: 貢獻者條款
       read and accept: 請閱讀下面的協議並按同意按鈕,以確認為你現有的和將來的貢獻接受本協議的條款。
       consider_pd: 在上述協議之上,我同意將我的貢獻放到公共領域
       consider_pd_why: 這是什麼?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 幫助理解這些條款的資料:一個<a href="%{summary}">供普通人閱讀的摘要</a>和一些<a href="%{translations}">非正式翻譯</a>
       agree: 同意
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: 拒絕
       you need to accept or decline: 請先閱讀,然後選擇接受或拒絕新的貢獻者條款,再繼續。
       legale_select: 請選擇您的居住地:
@@ -2040,6 +2045,7 @@ zh-TW:
         not yet agreed: 您未同意新的貢獻者條款。
         review link text: 請跟隨此連結,方便你檢視並接受新的貢獻者條款。
         agreed_with_pd: 您亦同意將您的編輯放到公共領域
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: 這是什麼?
       profile description: 基本資料描述:
       preferred languages: 偏好的語言:
@@ -2047,6 +2053,7 @@ zh-TW:
       image: 圖片:
       gravatar:
         gravatar: 使用 Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: 這是什麼?
         disabled: Gravatar已停用。
         enabled: 您的Gravatar顯示功能已啟用。
index e609948631818096551bc01cf89579f4d9788e51..7d9c8dbec9f5778d7b61ff602b9275b62baf281c 100644 (file)
@@ -64,10 +64,10 @@ OpenStreetMap::Application.routes.draw do
     get "relations/search" => "search#search_relations"
     get "nodes/search" => "search#search_nodes"
 
-    get "user/:id" => "user#api_read", :id => /\d+/
-    get "user/details" => "user#api_details"
-    get "user/gpx_files" => "user#api_gpx_files"
-    get "users" => "user#api_users", :as => :api_users
+    get "user/:id" => "users#api_read", :id => /\d+/
+    get "user/details" => "users#api_details"
+    get "user/gpx_files" => "users#api_gpx_files"
+    get "users" => "users#api_users", :as => :api_users
 
     get "user/preferences" => "user_preferences#read"
     get "user/preferences/:preference_key" => "user_preferences#read_one"
@@ -154,33 +154,33 @@ OpenStreetMap::Application.routes.draw do
   get "/history/feed" => "changeset#feed", :defaults => { :format => :atom }
   get "/history/comments/feed" => "changeset#comments_feed", :as => :changesets_comments_feed, :defaults => { :format => "rss" }
   get "/export" => "site#export"
-  match "/login" => "user#login", :via => [:get, :post]
-  match "/logout" => "user#logout", :via => [:get, :post]
+  match "/login" => "users#login", :via => [:get, :post]
+  match "/logout" => "users#logout", :via => [:get, :post]
   get "/offline" => "site#offline"
   get "/key" => "site#key"
   get "/id" => "site#id"
   get "/query" => "browse#query"
-  get "/user/new" => "user#new"
-  post "/user/new" => "user#create"
-  get "/user/terms" => "user#terms"
-  post "/user/save" => "user#save"
-  get "/user/:display_name/confirm/resend" => "user#confirm_resend"
-  match "/user/:display_name/confirm" => "user#confirm", :via => [:get, :post]
-  match "/user/confirm" => "user#confirm", :via => [:get, :post]
-  match "/user/confirm-email" => "user#confirm_email", :via => [:get, :post]
-  post "/user/go_public" => "user#go_public"
-  match "/user/reset-password" => "user#reset_password", :via => [:get, :post]
-  match "/user/forgot-password" => "user#lost_password", :via => [:get, :post]
-  get "/user/suspended" => "user#suspended"
+  get "/user/new" => "users#new"
+  post "/user/new" => "users#create"
+  get "/user/terms" => "users#terms"
+  post "/user/save" => "users#save"
+  get "/user/:display_name/confirm/resend" => "users#confirm_resend"
+  match "/user/:display_name/confirm" => "users#confirm", :via => [:get, :post]
+  match "/user/confirm" => "users#confirm", :via => [:get, :post]
+  match "/user/confirm-email" => "users#confirm_email", :via => [:get, :post]
+  post "/user/go_public" => "users#go_public"
+  match "/user/reset-password" => "users#reset_password", :via => [:get, :post]
+  match "/user/forgot-password" => "users#lost_password", :via => [:get, :post]
+  get "/user/suspended" => "users#suspended"
 
   get "/index.html", :to => redirect(:path => "/")
   get "/create-account.html", :to => redirect(:path => "/user/new")
   get "/forgot-password.html", :to => redirect(:path => "/user/forgot-password")
 
   # omniauth
-  get "/auth/failure" => "user#auth_failure"
-  match "/auth/:provider/callback" => "user#auth_success", :via => [:get, :post], :as => :auth_success
-  match "/auth/:provider" => "user#auth", :via => [:get, :post], :as => :auth
+  get "/auth/failure" => "users#auth_failure"
+  match "/auth/:provider/callback" => "users#auth_success", :via => [:get, :post], :as => :auth_success
+  match "/auth/:provider" => "users#auth", :via => [:get, :post], :as => :auth
 
   # permalink
   get "/go/:code" => "site#permalink", :code => /[a-zA-Z0-9_@~]+[=-]*/
@@ -234,16 +234,16 @@ OpenStreetMap::Application.routes.draw do
   post "/user/:display_name/diary/:id/unsubscribe" => "diary_entry#unsubscribe", :as => :diary_entry_unsubscribe, :id => /\d+/
 
   # user pages
-  get "/user/:display_name" => "user#show", :as => "user"
-  match "/user/:display_name/make_friend" => "user#make_friend", :via => [:get, :post], :as => "make_friend"
-  match "/user/:display_name/remove_friend" => "user#remove_friend", :via => [:get, :post], :as => "remove_friend"
-  match "/user/:display_name/account" => "user#account", :via => [:get, :post]
-  get "/user/:display_name/set_status" => "user#set_status", :as => :set_status_user
-  get "/user/:display_name/delete" => "user#delete", :as => :delete_user
+  get "/user/:display_name" => "users#show", :as => "user"
+  match "/user/:display_name/make_friend" => "users#make_friend", :via => [:get, :post], :as => "make_friend"
+  match "/user/:display_name/remove_friend" => "users#remove_friend", :via => [:get, :post], :as => "remove_friend"
+  match "/user/:display_name/account" => "users#account", :via => [:get, :post]
+  get "/user/:display_name/set_status" => "users#set_status", :as => :set_status_user
+  get "/user/:display_name/delete" => "users#delete", :as => :delete_user
 
   # user lists
-  match "/users" => "user#index", :via => [:get, :post]
-  match "/users/:status" => "user#index", :via => [:get, :post]
+  match "/users" => "users#index", :via => [:get, :post]
+  match "/users/:status" => "users#index", :via => [:get, :post]
 
   # geocoder
   get "/search" => "geocoder#search"
@@ -262,7 +262,9 @@ OpenStreetMap::Application.routes.draw do
   get "/export/embed" => "export#embed"
 
   # messages
-  resources :messages, :only => [:create, :show] do
+  resources :messages, :only => [:create, :show, :destroy] do
+    post :mark
+    match :reply, :via => [:get, :post]
     collection do
       get :inbox
       get :outbox
@@ -272,9 +274,6 @@ OpenStreetMap::Application.routes.draw do
   get "/user/:display_name/outbox", :to => redirect(:path => "/messages/outbox")
   get "/message/new/:display_name" => "messages#new", :as => "new_message"
   get "/message/read/:message_id", :to => redirect(:path => "/messages/%{message_id}")
-  post "/message/mark/:message_id" => "messages#mark", :as => "mark_message"
-  match "/message/reply/:message_id" => "messages#reply", :via => [:get, :post], :as => "reply_message"
-  post "/message/delete/:message_id" => "messages#destroy", :as => "destroy_message"
 
   # oauth admin pages (i.e: for setting up new clients, etc...)
   scope "/user/:display_name" do
diff --git a/db/migrate/20181031113522_create_delayed_jobs.rb b/db/migrate/20181031113522_create_delayed_jobs.rb
new file mode 100644 (file)
index 0000000..69c6f1b
--- /dev/null
@@ -0,0 +1,22 @@
+class CreateDelayedJobs < ActiveRecord::Migration[5.2]
+  def self.up
+    create_table :delayed_jobs, :force => true do |table|
+      table.integer :priority, :default => 0, :null => false # Allows some jobs to jump to the front of the queue
+      table.integer :attempts, :default => 0, :null => false # Provides for retries, but still fail eventually.
+      table.text :handler,                    :null => false # YAML-encoded string of the object that will do work
+      table.text :last_error                                 # reason for last failure (See Note below)
+      table.datetime :run_at                                 # When to run. Could be Time.zone.now for immediately, or sometime in the future.
+      table.datetime :locked_at                              # Set when a client is working on this object
+      table.datetime :failed_at                              # Set when all retries have failed (actually, by default, the record is deleted instead)
+      table.string :locked_by                                # Who is working on this object (if locked)
+      table.string :queue                                    # The name of the queue this job is in
+      table.timestamps :null => true
+    end
+
+    add_index :delayed_jobs, [:priority, :run_at], :name => "delayed_jobs_priority"
+  end
+
+  def self.down
+    drop_table :delayed_jobs
+  end
+end
index 48fedeba56b65d1247762f7a35eb29f9a5a1b98b..dcab302bb1c05f943ebe14319e2d7ada68ef7cb0 100644 (file)
@@ -494,6 +494,45 @@ CREATE SEQUENCE current_ways_id_seq
 ALTER SEQUENCE current_ways_id_seq OWNED BY current_ways.id;
 
 
+--
+-- Name: delayed_jobs; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE delayed_jobs (
+    id bigint NOT NULL,
+    priority integer DEFAULT 0 NOT NULL,
+    attempts integer DEFAULT 0 NOT NULL,
+    handler text NOT NULL,
+    last_error text,
+    run_at timestamp without time zone,
+    locked_at timestamp without time zone,
+    failed_at timestamp without time zone,
+    locked_by character varying,
+    queue character varying,
+    created_at timestamp without time zone,
+    updated_at timestamp without time zone
+);
+
+
+--
+-- Name: delayed_jobs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE delayed_jobs_id_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+--
+-- Name: delayed_jobs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE delayed_jobs_id_seq OWNED BY delayed_jobs.id;
+
+
 --
 -- Name: diary_comments; Type: TABLE; Schema: public; Owner: -
 --
@@ -1365,6 +1404,13 @@ ALTER TABLE ONLY current_relations ALTER COLUMN id SET DEFAULT nextval('current_
 ALTER TABLE ONLY current_ways ALTER COLUMN id SET DEFAULT nextval('current_ways_id_seq'::regclass);
 
 
+--
+-- Name: delayed_jobs id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY delayed_jobs ALTER COLUMN id SET DEFAULT nextval('delayed_jobs_id_seq'::regclass);
+
+
 --
 -- Name: diary_comments id; Type: DEFAULT; Schema: public; Owner: -
 --
@@ -1595,6 +1641,14 @@ ALTER TABLE ONLY current_ways
     ADD CONSTRAINT current_ways_pkey PRIMARY KEY (id);
 
 
+--
+-- Name: delayed_jobs delayed_jobs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY delayed_jobs
+    ADD CONSTRAINT delayed_jobs_pkey PRIMARY KEY (id);
+
+
 --
 -- Name: diary_comments diary_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: -
 --
@@ -1918,6 +1972,13 @@ CREATE INDEX current_way_nodes_node_idx ON current_way_nodes USING btree (node_i
 CREATE INDEX current_ways_timestamp_idx ON current_ways USING btree ("timestamp");
 
 
+--
+-- Name: delayed_jobs_priority; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX delayed_jobs_priority ON delayed_jobs USING btree (priority, run_at);
+
+
 --
 -- Name: diary_comment_user_id_created_at_index; Type: INDEX; Schema: public; Owner: -
 --
@@ -2870,6 +2931,7 @@ INSERT INTO "schema_migrations" (version) VALUES
 ('20161011010929'),
 ('20170222134109'),
 ('20180204153242'),
+('20181031113522'),
 ('21'),
 ('22'),
 ('23'),
index 811d09239d0fe5a325e3aca04204d86470434af5..dbeaf5a408e66dfd757b6d63fb5ea639a49c44bc 100644 (file)
@@ -67,17 +67,17 @@ module ActionController
       DEFAULT_OPTIONS = {
         :class_name => nil,
         :singular_name => nil,
-        :per_page   => 10,
+        :per_page => 10,
         :conditions => nil,
-        :order_by   => nil,
-        :order      => nil,
-        :join       => nil,
-        :joins      => nil,
-        :count      => nil,
-        :include    => nil,
-        :select     => nil,
-        :group      => nil,
-        :parameter  => "page"
+        :order_by => nil,
+        :order => nil,
+        :join => nil,
+        :joins => nil,
+        :count => nil,
+        :include => nil,
+        :select => nil,
+        :group => nil,
+        :parameter => "page"
       }.freeze
     end
 
index cb553bfbcad71a095c0940f61b3fb5341d1d4712..e3c533b7af6e8357a1a6b821792b2da6cbb0e3df 100644 (file)
@@ -8,8 +8,8 @@ class DiffReader
 
   # maps each element type to the model class which handles it
   MODELS = {
-    "node"     => Node,
-    "way"      => Way,
+    "node" => Node,
+    "way" => Way,
     "relation" => Relation
   }.freeze
 
index 53252b769739f835a351fb26ce04cbd5601d0879..954acbf227dc1a6309c5d47ff341d9e249ae9f3b 100644 (file)
@@ -6,41 +6,41 @@ if Rails.env.development?
     # You can override any of these by setting an environment variable of the
     # same name.
     Annotate.set_defaults(
-      "routes"                  => "false",
-      "position_in_routes"      => "before",
-      "position_in_class"       => "before",
-      "position_in_test"        => "before",
-      "position_in_fixture"     => "before",
-      "position_in_factory"     => "before",
-      "position_in_serializer"  => "before",
-      "show_foreign_keys"       => "true",
-      "show_indexes"            => "true",
-      "simple_indexes"          => "false",
-      "model_dir"               => "app/models",
-      "root_dir"                => "",
-      "include_version"         => "false",
-      "require"                 => "",
-      "exclude_tests"           => "true",
-      "exclude_fixtures"        => "true",
-      "exclude_factories"       => "true",
-      "exclude_serializers"     => "true",
-      "exclude_scaffolds"       => "true",
-      "exclude_controllers"     => "true",
-      "exclude_helpers"         => "true",
-      "ignore_model_sub_dir"    => "false",
-      "ignore_columns"          => nil,
-      "ignore_routes"           => nil,
-      "ignore_unknown_models"   => "false",
+      "routes" => "false",
+      "position_in_routes" => "before",
+      "position_in_class" => "before",
+      "position_in_test" => "before",
+      "position_in_fixture" => "before",
+      "position_in_factory" => "before",
+      "position_in_serializer" => "before",
+      "show_foreign_keys" => "true",
+      "show_indexes" => "true",
+      "simple_indexes" => "false",
+      "model_dir" => "app/models",
+      "root_dir" => "",
+      "include_version" => "false",
+      "require" => "",
+      "exclude_tests" => "true",
+      "exclude_fixtures" => "true",
+      "exclude_factories" => "true",
+      "exclude_serializers" => "true",
+      "exclude_scaffolds" => "true",
+      "exclude_controllers" => "true",
+      "exclude_helpers" => "true",
+      "ignore_model_sub_dir" => "false",
+      "ignore_columns" => nil,
+      "ignore_routes" => nil,
+      "ignore_unknown_models" => "false",
       "hide_limit_column_types" => "integer,boolean",
-      "skip_on_db_migrate"      => "false",
-      "format_bare"             => "true",
-      "format_rdoc"             => "false",
-      "format_markdown"         => "false",
-      "sort"                    => "false",
-      "force"                   => "false",
-      "trace"                   => "false",
-      "wrapper_open"            => nil,
-      "wrapper_close"           => nil
+      "skip_on_db_migrate" => "false",
+      "format_bare" => "true",
+      "format_rdoc" => "false",
+      "format_markdown" => "false",
+      "sort" => "false",
+      "force" => "false",
+      "trace" => "false",
+      "wrapper_open" => nil,
+      "wrapper_close" => nil
     )
   end
 
diff --git a/test/abilities/abilities_test.rb b/test/abilities/abilities_test.rb
new file mode 100644 (file)
index 0000000..fc37b0e
--- /dev/null
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class AbilityTest < ActiveSupport::TestCase
+end
+
+class GuestAbilityTest < AbilityTest
+  test "geocoder permission for a guest" do
+    ability = Ability.new nil
+
+    [:search, :search_latlon, :search_ca_postcode, :search_osm_nominatim,
+     :search_geonames, :search_osm_nominatim_reverse, :search_geonames_reverse].each do |action|
+      assert ability.can?(action, :geocoder), "should be able to #{action} geocoder"
+    end
+  end
+
+  test "diary permissions for a guest" do
+    ability = Ability.new nil
+    [:index, :rss, :show, :comments].each do |action|
+      assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
+    end
+
+    [:create, :edit, :comment, :subscribe, :unsubscribe, :hide, :hidecomment].each do |action|
+      assert ability.cannot?(action, DiaryEntry), "should not be able to #{action} DiaryEntries"
+      assert ability.cannot?(action, DiaryComment), "should not be able to #{action} DiaryEntries"
+    end
+  end
+end
+
+class UserAbilityTest < AbilityTest
+  test "Diary permissions" do
+    ability = Ability.new create(:user)
+
+    [:index, :rss, :show, :comments, :create, :edit, :comment, :subscribe, :unsubscribe].each do |action|
+      assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
+    end
+
+    [:hide, :hidecomment].each do |action|
+      assert ability.cannot?(action, DiaryEntry), "should not be able to #{action} DiaryEntries"
+      assert ability.cannot?(action, DiaryComment), "should not be able to #{action} DiaryEntries"
+    end
+
+    [:index, :show, :resolve, :ignore, :reopen].each do |action|
+      assert ability.cannot?(action, Issue), "should not be able to #{action} Issues"
+    end
+  end
+end
+
+class ModeratorAbilityTest < AbilityTest
+  test "Issue permissions" do
+    ability = Ability.new create(:moderator_user)
+
+    [:index, :show, :resolve, :ignore, :reopen].each do |action|
+      assert ability.can?(action, Issue), "should be able to #{action} Issues"
+    end
+  end
+end
+
+class AdministratorAbilityTest < AbilityTest
+  test "Diary for an administrator" do
+    ability = Ability.new create(:administrator_user)
+    [:index, :rss, :show, :comments, :create, :edit, :comment, :subscribe, :unsubscribe, :hide, :hidecomment].each do |action|
+      assert ability.can?(action, DiaryEntry), "should be able to #{action} DiaryEntries"
+    end
+
+    [:hide, :hidecomment].each do |action|
+      assert ability.can?(action, DiaryComment), "should be able to #{action} DiaryComment"
+    end
+  end
+end
diff --git a/test/abilities/capability_test.rb b/test/abilities/capability_test.rb
new file mode 100644 (file)
index 0000000..a25c670
--- /dev/null
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+require "test_helper"
+
+class CapabilityTest < ActiveSupport::TestCase
+  def tokens(*toks)
+    AccessToken.new do |token|
+      toks.each do |t|
+        token.public_send("#{t}=", true)
+      end
+    end
+  end
+end
+
+class UserCapabilityTest < CapabilityTest
+  test "user preferences" do
+    # a user with no tokens
+    capability = Capability.new nil
+    [:read, :read_one, :update, :update_one, :delete_one].each do |act|
+      assert capability.cannot? act, UserPreference
+    end
+
+    # A user with empty tokens
+    capability = Capability.new tokens
+
+    [:read, :read_one, :update, :update_one, :delete_one].each do |act|
+      assert capability.cannot? act, UserPreference
+    end
+
+    capability = Capability.new tokens(:allow_read_prefs)
+
+    [:update, :update_one, :delete_one].each do |act|
+      assert capability.cannot? act, UserPreference
+    end
+
+    [:read, :read_one].each do |act|
+      assert capability.can? act, UserPreference
+    end
+
+    capability = Capability.new tokens(:allow_write_prefs)
+    [:read, :read_one].each do |act|
+      assert capability.cannot? act, UserPreference
+    end
+
+    [:update, :update_one, :delete_one].each do |act|
+      assert capability.can? act, UserPreference
+    end
+  end
+end
index 0bdd01bd2e5f2209d22997d176c9007dbfdaffd1..650bf1f8ef031a3b8e19808dd2b32a58e45abb42 100644 (file)
@@ -360,11 +360,11 @@ class AmfControllerTest < ActionController::TestCase
   # into the method args.
   def test_getway_old_invalid
     way_id = create(:way, :with_history, :version => 2).id
-    { "foo"  => "bar",
+    { "foo" => "bar",
       way_id => "not a date",
       way_id => "2009-03-25 00:00:00",                   # <- wrong format
       way_id => "0 Jan 2009 00:00:00",                   # <- invalid date
-      -1     => "1 Jan 2009 00:00:00" }.each do |id, t|  # <- invalid
+      -1 => "1 Jan 2009 00:00:00" }.each do |id, t| # <- invalid
       amf_content "getway_old", "/1", [id, t]
       post :amf_read
       assert_response :success
index 2886780a06d46f370e20f531bba5f07918d47cc0..fdb689978f7fc1cebbc9dad700d81457204af10b 100644 (file)
@@ -1969,11 +1969,11 @@ CHANGESET
   def test_index_user_not_found
     get :index, :params => { :format => "html", :display_name => "Some random user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
 
     get :index, :params => { :format => "html", :display_name => "Some random user", :list => "1" }, :xhr => true
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
   end
 
   ##
@@ -1985,7 +1985,7 @@ CHANGESET
 
     get :index, :params => { :friends => true }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => friend_changesets_path
+    assert_redirected_to :controller => :users, :action => :login, :referer => friend_changesets_path
 
     session[:user] = private_user.id
 
@@ -2009,7 +2009,7 @@ CHANGESET
 
     get :index, :params => { :nearby => true }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => nearby_changesets_path
+    assert_redirected_to :controller => :users, :action => :login, :referer => nearby_changesets_path
 
     session[:user] = private_user.id
 
@@ -2153,7 +2153,9 @@ CHANGESET
 
     assert_difference "ChangesetComment.count", 1 do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :comment, :params => { :id => private_user_closed_changeset.id, :text => "This is a comment" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => private_user_closed_changeset.id, :text => "This is a comment" }
+        end
       end
     end
     assert_response :success
@@ -2166,7 +2168,9 @@ CHANGESET
 
     assert_difference "ChangesetComment.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 1 do
-        post :comment, :params => { :id => changeset.id, :text => "This is a comment" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => changeset.id, :text => "This is a comment" }
+        end
       end
     end
     assert_response :success
@@ -2182,7 +2186,9 @@ CHANGESET
 
     assert_difference "ChangesetComment.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 2 do
-        post :comment, :params => { :id => changeset.id, :text => "This is a comment" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => changeset.id, :text => "This is a comment" }
+        end
       end
     end
     assert_response :success
index edff9062560cb34d596a02b6e44957404c264f94..cec2250476fe17e8c89668f79f90314544261032 100644 (file)
@@ -104,7 +104,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
     # are not logged in
     get :new
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/new"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/diary/new"
   end
 
   def test_new_form
@@ -240,7 +240,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
         :params => { :display_name => user.display_name },
         :session => { :user => user }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :suspended
+    assert_redirected_to :controller => :users, :action => :suspended
   end
 
   def test_edit
@@ -254,7 +254,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
     get :edit,
         :params => { :display_name => entry.user.display_name, :id => entry.id }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}/edit"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/user/#{ERB::Util.u(entry.user.display_name)}/diary/#{entry.id}/edit"
 
     # Verify that you get a not found error, when you pass a bogus id
     get :edit,
@@ -390,9 +390,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
     assert_no_difference "ActionMailer::Base.deliveries.size" do
       assert_no_difference "DiaryComment.count" do
         assert_no_difference "entry.subscribers.count" do
-          post :comment,
-               :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "" } },
-               :session => { :user => other_user }
+          perform_enqueued_jobs do
+            post :comment,
+                 :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "" } },
+                 :session => { :user => other_user }
+          end
         end
       end
     end
@@ -403,9 +405,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
     assert_difference "ActionMailer::Base.deliveries.size", entry.subscribers.count do
       assert_difference "DiaryComment.count", 1 do
         assert_difference "entry.subscribers.count", 1 do
-          post :comment,
-               :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "New comment" } },
-               :session => { :user => other_user }
+          perform_enqueued_jobs do
+            post :comment,
+                 :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => "New comment" } },
+                 :session => { :user => other_user }
+          end
         end
       end
     end
@@ -450,9 +454,11 @@ class DiaryEntryControllerTest < ActionController::TestCase
     # Try creating a spammy comment
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
       assert_difference "DiaryComment.count", 1 do
-        post :comment,
-             :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => spammy_text } },
-             :session => { :user => other_user }
+        perform_enqueued_jobs do
+          post :comment,
+               :params => { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => spammy_text } },
+               :session => { :user => other_user }
+        end
       end
     end
     assert_response :redirect
@@ -474,7 +480,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
         :params => { :display_name => user.display_name },
         :session => { :user => other_user }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :suspended
+    assert_redirected_to :controller => :users, :action => :suspended
 
     # Now show the diary entry, and check the new comment is not present
     get :show,
@@ -508,7 +514,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
     # Try a list of diary entries for an invalid user
     get :index, :params => { :display_name => "No Such User" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
   end
 
   def test_index_friends
@@ -521,7 +527,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
     # Try a list of diary entries for your friends when not logged in
     get :index, :params => { :friends => true }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/friends"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/diary/friends"
 
     # Try a list of diary entries for your friends when logged in
     get :index, :params => { :friends => true }, :session => { :user => user }
@@ -539,7 +545,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
     # Try a list of diary entries for nearby users when not logged in
     get :index, :params => { :nearby => true }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/nearby"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/diary/nearby"
 
     # Try a list of diary entries for nearby users when logged in
     get :index, :params => { :nearby => true }, :session => { :user => nearby_user }
index 940144a174807df8b50742d06da09fc1a12ab7b1..8e4d5eeb27fd0f4cd062c2dc7627fa5dea2997cd 100644 (file)
@@ -25,20 +25,20 @@ class MessagesControllerTest < ActionController::TestCase
       { :controller => "messages", :action => "show", :id => "1" }
     )
     assert_routing(
-      { :path => "/message/mark/1", :method => :post },
+      { :path => "/messages/1/mark", :method => :post },
       { :controller => "messages", :action => "mark", :message_id => "1" }
     )
     assert_routing(
-      { :path => "/message/reply/1", :method => :get },
+      { :path => "/messages/1/reply", :method => :get },
       { :controller => "messages", :action => "reply", :message_id => "1" }
     )
     assert_routing(
-      { :path => "/message/reply/1", :method => :post },
+      { :path => "/messages/1/reply", :method => :post },
       { :controller => "messages", :action => "reply", :message_id => "1" }
     )
     assert_routing(
-      { :path => "/message/delete/1", :method => :post },
-      { :controller => "messages", :action => "destroy", :message_id => "1" }
+      { :path => "/messages/1", :method => :delete },
+      { :controller => "messages", :action => "destroy", :id => "1" }
     )
   end
 
@@ -83,9 +83,11 @@ class MessagesControllerTest < ActionController::TestCase
     # Check that we can't send a message from a GET request
     assert_difference "ActionMailer::Base.deliveries.size", 0 do
       assert_difference "Message.count", 0 do
-        get :new,
-            :params => { :display_name => recipient_user.display_name,
-                         :message => { :title => "Test Message", :body => "Test message body" } }
+        perform_enqueued_jobs do
+          get :new,
+              :params => { :display_name => recipient_user.display_name,
+                           :message => { :title => "Test Message", :body => "Test message body" } }
+        end
       end
     end
     assert_response :success
@@ -112,9 +114,11 @@ class MessagesControllerTest < ActionController::TestCase
     # Check that the subject is preserved over errors
     assert_difference "ActionMailer::Base.deliveries.size", 0 do
       assert_difference "Message.count", 0 do
-        post :new,
-             :params => { :display_name => recipient_user.display_name,
-                          :message => { :title => "Test Message", :body => "" } }
+        perform_enqueued_jobs do
+          post :new,
+               :params => { :display_name => recipient_user.display_name,
+                            :message => { :title => "Test Message", :body => "" } }
+        end
       end
     end
     assert_response :success
@@ -141,9 +145,11 @@ class MessagesControllerTest < ActionController::TestCase
     # Check that the body text is preserved over errors
     assert_difference "ActionMailer::Base.deliveries.size", 0 do
       assert_difference "Message.count", 0 do
-        post :new,
-             :params => { :display_name => recipient_user.display_name,
-                          :message => { :title => "", :body => "Test message body" } }
+        perform_enqueued_jobs do
+          post :new,
+               :params => { :display_name => recipient_user.display_name,
+                            :message => { :title => "", :body => "Test message body" } }
+        end
       end
     end
     assert_response :success
@@ -170,9 +176,11 @@ class MessagesControllerTest < ActionController::TestCase
     # Check that sending a message works
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
       assert_difference "Message.count", 1 do
-        post :create,
-             :params => { :display_name => recipient_user.display_name,
-                          :message => { :title => "Test Message", :body => "Test message body" } }
+        perform_enqueued_jobs do
+          post :create,
+               :params => { :display_name => recipient_user.display_name,
+                            :message => { :title => "Test Message", :body => "Test message body" } }
+        end
       end
     end
     assert_redirected_to inbox_messages_path
@@ -195,7 +203,7 @@ class MessagesControllerTest < ActionController::TestCase
     # Asking to send a message with a bogus user name should fail
     get :new, :params => { :display_name => "non_existent_user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
   end
 
@@ -211,12 +219,14 @@ class MessagesControllerTest < ActionController::TestCase
     assert_no_difference "ActionMailer::Base.deliveries.size" do
       assert_no_difference "Message.count" do
         with_message_limit(0) do
-          post :create,
-               :params => { :display_name => recipient_user.display_name,
-                            :message => { :title => "Test Message", :body => "Test message body" } }
-          assert_response :success
-          assert_template "new"
-          assert_select ".error", /wait a while/
+          perform_enqueued_jobs do
+            post :create,
+                 :params => { :display_name => recipient_user.display_name,
+                              :message => { :title => "Test Message", :body => "Test message body" } }
+            assert_response :success
+            assert_template "new"
+            assert_select ".error", /wait a while/
+          end
         end
       end
     end
@@ -232,14 +242,14 @@ class MessagesControllerTest < ActionController::TestCase
 
     # Check that the message reply page requires us to login
     get :reply, :params => { :message_id => unread_message.id }
-    assert_redirected_to login_path(:referer => reply_message_path(:message_id => unread_message.id))
+    assert_redirected_to login_path(:referer => message_reply_path(:message_id => unread_message.id))
 
     # Login as the wrong user
     session[:user] = other_user.id
 
     # Check that we can't reply to somebody else's message
     get :reply, :params => { :message_id => unread_message.id }
-    assert_redirected_to login_path(:referer => reply_message_path(:message_id => unread_message.id))
+    assert_redirected_to login_path(:referer => message_reply_path(:message_id => unread_message.id))
     assert_equal "You are logged in as `#{other_user.display_name}' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply.", flash[:notice]
 
     # Login as the right user
@@ -429,14 +439,14 @@ class MessagesControllerTest < ActionController::TestCase
     sent_message = create(:message, :unread, :recipient => second_user, :sender => user)
 
     # Check that destroying a message requires us to login
-    post :destroy, :params => { :message_id => read_message.id }
+    delete :destroy, :params => { :id => read_message.id }
     assert_response :forbidden
 
     # Login as a user with no messages
     session[:user] = other_user.id
 
     # Check that destroying a message we didn't send or receive fails
-    post :destroy, :params => { :message_id => read_message.id }
+    delete :destroy, :params => { :id => read_message.id }
     assert_response :not_found
     assert_template "no_such_message"
 
@@ -444,7 +454,7 @@ class MessagesControllerTest < ActionController::TestCase
     session[:user] = user.id
 
     # Check that the destroy a received message works
-    post :destroy, :params => { :message_id => read_message.id }
+    delete :destroy, :params => { :id => read_message.id }
     assert_redirected_to inbox_messages_path
     assert_equal "Message deleted", flash[:notice]
     m = Message.find(read_message.id)
@@ -452,7 +462,7 @@ class MessagesControllerTest < ActionController::TestCase
     assert_equal false, m.to_user_visible
 
     # Check that the destroying a sent message works
-    post :destroy, :params => { :message_id => sent_message.id, :referer => outbox_messages_path }
+    delete :destroy, :params => { :id => sent_message.id, :referer => outbox_messages_path }
     assert_redirected_to outbox_messages_path
     assert_equal "Message deleted", flash[:notice]
     m = Message.find(sent_message.id)
@@ -465,7 +475,7 @@ class MessagesControllerTest < ActionController::TestCase
     end
 
     # Asking to destroy a message with a bogus ID should fail
-    post :destroy, :params => { :message_id => 99999 }
+    delete :destroy, :params => { :id => 99999 }
     assert_response :not_found
     assert_template "no_such_message"
   end
index 1ebce60b53dcfa8659612e0f31a0b7061005e9f7..a1c32333224337f95e238c024d540fa222d1fb42 100644 (file)
@@ -228,7 +228,9 @@ class NotesControllerTest < ActionController::TestCase
     open_note_with_comment = create(:note_with_comments)
     assert_difference "NoteComment.count", 1 do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :comment, :params => { :id => open_note_with_comment.id, :text => "This is an additional comment", :format => "json" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => open_note_with_comment.id, :text => "This is an additional comment", :format => "json" }
+        end
       end
     end
     assert_response :success
@@ -265,7 +267,9 @@ class NotesControllerTest < ActionController::TestCase
     end
     assert_difference "NoteComment.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 2 do
-        post :comment, :params => { :id => note_with_comments_by_users.id, :text => "This is an additional comment", :format => "json" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => note_with_comments_by_users.id, :text => "This is an additional comment", :format => "json" }
+        end
       end
     end
     assert_response :success
@@ -307,7 +311,9 @@ class NotesControllerTest < ActionController::TestCase
 
     assert_difference "NoteComment.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 2 do
-        post :comment, :params => { :id => note_with_comments_by_users.id, :text => "This is an additional comment", :format => "json" }
+        perform_enqueued_jobs do
+          post :comment, :params => { :id => note_with_comments_by_users.id, :text => "This is an additional comment", :format => "json" }
+        end
       end
     end
     assert_response :success
@@ -876,6 +882,84 @@ class NotesControllerTest < ActionController::TestCase
     end
   end
 
+  def test_search_by_display_name_success
+    user = create(:user)
+
+    create(:note) do |note|
+      create(:note_comment, :note => note, :author => user)
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 1
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 1, js["features"].count
+
+    get :search, :params => { :display_name => user.display_name, :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 1
+      end
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 1
+    end
+  end
+
+  def test_search_by_user_success
+    user = create(:user)
+
+    create(:note) do |note|
+      create(:note_comment, :note => note, :author => user)
+    end
+
+    get :search, :params => { :user => user.id, :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 1
+    end
+
+    get :search, :params => { :user => user.id, :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 1, js["features"].count
+
+    get :search, :params => { :user => user.id, :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 1
+      end
+    end
+
+    get :search, :params => { :user => user.id, :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 1
+    end
+  end
+
   def test_search_no_match
     create(:note_with_comments)
 
@@ -911,15 +995,59 @@ class NotesControllerTest < ActionController::TestCase
     end
   end
 
-  def test_search_bad_params
-    get :search
-    assert_response :bad_request
+  def test_search_by_time_no_match
+    create(:note_with_comments)
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 0
+    end
 
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 0, js["features"].count
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 0
+      end
+    end
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 0
+    end
+  end
+
+  def test_search_bad_params
     get :search, :params => { :q => "no match", :limit => "0", :format => "json" }
     assert_response :bad_request
 
     get :search, :params => { :q => "no match", :limit => "10001", :format => "json" }
     assert_response :bad_request
+
+    get :search, :params => { :display_name => "non-existent" }
+    assert_response :bad_request
+
+    get :search, :params => { :user => "-1" }
+    assert_response :bad_request
+
+    get :search, :params => { :from => "wrong-date", :to => "wrong-date" }
+    assert_response :bad_request
+
+    get :search, :params => { :from => "01.01.2010", :to => "2010.01.2010" }
+    assert_response :bad_request
   end
 
   def test_feed_success
index b8941ed30f1a4a24c1f474ab33e6bfb27d2b5f4a..c4e1a5a66309bfc96ddaec3244c8e649cad60002 100644 (file)
@@ -165,7 +165,7 @@ class SiteControllerTest < ActionController::TestCase
   def test_edit
     get :edit
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/edit"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/edit"
   end
 
   # Test the right editor gets used when the user hasn't set a preference
@@ -315,7 +315,7 @@ class SiteControllerTest < ActionController::TestCase
   def test_welcome
     get :welcome
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => "/welcome"
+    assert_redirected_to :controller => :users, :action => :login, :referer => "/welcome"
 
     get :welcome, :session => { :user => create(:user) }
     assert_response :success
index add7483a329b7f20bccc449140a36ee94b65e925..2c01ef6f1ce4b28ff1430969fa3e1f2c0ad77ebb 100644 (file)
@@ -210,7 +210,7 @@ class TracesControllerTest < ActionController::TestCase
 
     # First try to get it when not logged in
     get :mine
-    assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine"
+    assert_redirected_to :controller => "users", :action => "login", :referer => "/traces/mine"
 
     # Now try when logged in
     get :mine, :session => { :user => user }
@@ -255,7 +255,7 @@ class TracesControllerTest < ActionController::TestCase
     # Should get an error if the user does not exist
     get :index, :params => { :display_name => "UnknownUser" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
   end
 
   # Check a multi-page index
@@ -547,7 +547,7 @@ class TracesControllerTest < ActionController::TestCase
     # First with no auth
     get :new
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => new_trace_path
+    assert_redirected_to :controller => :users, :action => :login, :referer => new_trace_path
 
     # Now authenticated as a user with gps.trace.visibility set
     user = create(:user)
@@ -628,7 +628,7 @@ class TracesControllerTest < ActionController::TestCase
     # First with no auth
     get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
+    assert_redirected_to :controller => :users, :action => :login, :referer => edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
 
     # Now with some other user, which should fail
     get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
index 62eee71a6fccfd80bf299eaf6c223fcba943a221..77b17519ea184ea946e02b97d67fa055230e350f 100644 (file)
@@ -165,13 +165,13 @@ class UserBlocksControllerTest < ActionController::TestCase
     # We should get an error if no user is specified
     get :new
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user  does not exist"
 
     # We should get an error if the user doesn't exist
     get :new, :params => { :display_name => "non_existent_user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
   end
 
@@ -268,13 +268,13 @@ class UserBlocksControllerTest < ActionController::TestCase
     # We should get an error if no user is specified
     post :create
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user  does not exist"
 
     # We should get an error if the user doesn't exist
     post :create, :params => { :display_name => "non_existent_user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
   end
 
@@ -412,7 +412,7 @@ class UserBlocksControllerTest < ActionController::TestCase
     # Asking for a list of blocks with a bogus user name should fail
     get :blocks_on, :params => { :display_name => "non_existent_user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
 
     # Check the list of blocks for a user that has never been blocked
@@ -476,7 +476,7 @@ class UserBlocksControllerTest < ActionController::TestCase
     # Asking for a list of blocks with a bogus user name should fail
     get :blocks_by, :params => { :display_name => "non_existent_user" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
     assert_select "h1", "The user non_existent_user does not exist"
 
     # Check the list of blocks given by one moderator
index 705f06a1c469e281122e1f0ecfd80fe1f0093d37..e9aadcc3a31a356ac21dc7781294060f6c44df3f 100644 (file)
@@ -43,7 +43,7 @@ class UserRolesControllerTest < ActionController::TestCase
         post :grant, :params => { :display_name => "non_existent_user", :role => role }
       end
       assert_response :not_found
-      assert_template "user/no_such_user"
+      assert_template "users/no_such_user"
       assert_select "h1", "The user non_existent_user does not exist"
 
       # Granting a role to a user that already has it should fail
@@ -104,7 +104,7 @@ class UserRolesControllerTest < ActionController::TestCase
         post :revoke, :params => { :display_name => "non_existent_user", :role => role }
       end
       assert_response :not_found
-      assert_template "user/no_such_user"
+      assert_template "users/no_such_user"
       assert_select "h1", "The user non_existent_user does not exist"
 
       # Removing a role from a user that doesn't have it should fail
similarity index 91%
rename from test/controllers/user_controller_test.rb
rename to test/controllers/users_controller_test.rb
index ffae32d0c89acf59501d1478f5dde63be6dadcd5..20a04e90b86d50f9eb47658c4a9afd8898b20fef 100644 (file)
@@ -1,6 +1,6 @@
 require "test_helper"
 
-class UserControllerTest < ActionController::TestCase
+class UsersControllerTest < ActionController::TestCase
   def setup
     stub_hostip_requests
   end
@@ -10,179 +10,179 @@ class UserControllerTest < ActionController::TestCase
   def test_routes
     assert_routing(
       { :path => "/api/0.6/user/1", :method => :get },
-      { :controller => "user", :action => "api_read", :id => "1" }
+      { :controller => "users", :action => "api_read", :id => "1" }
     )
     assert_routing(
       { :path => "/api/0.6/user/details", :method => :get },
-      { :controller => "user", :action => "api_details" }
+      { :controller => "users", :action => "api_details" }
     )
     assert_routing(
       { :path => "/api/0.6/user/gpx_files", :method => :get },
-      { :controller => "user", :action => "api_gpx_files" }
+      { :controller => "users", :action => "api_gpx_files" }
     )
     assert_routing(
       { :path => "/api/0.6/users", :method => :get },
-      { :controller => "user", :action => "api_users" }
+      { :controller => "users", :action => "api_users" }
     )
 
     assert_routing(
       { :path => "/login", :method => :get },
-      { :controller => "user", :action => "login" }
+      { :controller => "users", :action => "login" }
     )
     assert_routing(
       { :path => "/login", :method => :post },
-      { :controller => "user", :action => "login" }
+      { :controller => "users", :action => "login" }
     )
     assert_recognizes(
-      { :controller => "user", :action => "login", :format => "html" },
+      { :controller => "users", :action => "login", :format => "html" },
       { :path => "/login.html", :method => :get }
     )
 
     assert_routing(
       { :path => "/logout", :method => :get },
-      { :controller => "user", :action => "logout" }
+      { :controller => "users", :action => "logout" }
     )
     assert_routing(
       { :path => "/logout", :method => :post },
-      { :controller => "user", :action => "logout" }
+      { :controller => "users", :action => "logout" }
     )
     assert_recognizes(
-      { :controller => "user", :action => "logout", :format => "html" },
+      { :controller => "users", :action => "logout", :format => "html" },
       { :path => "/logout.html", :method => :get }
     )
 
     assert_routing(
       { :path => "/user/new", :method => :get },
-      { :controller => "user", :action => "new" }
+      { :controller => "users", :action => "new" }
     )
 
     assert_routing(
       { :path => "/user/new", :method => :post },
-      { :controller => "user", :action => "create" }
+      { :controller => "users", :action => "create" }
     )
 
     assert_routing(
       { :path => "/user/terms", :method => :get },
-      { :controller => "user", :action => "terms" }
+      { :controller => "users", :action => "terms" }
     )
 
     assert_routing(
       { :path => "/user/save", :method => :post },
-      { :controller => "user", :action => "save" }
+      { :controller => "users", :action => "save" }
     )
 
     assert_routing(
       { :path => "/user/username/confirm", :method => :get },
-      { :controller => "user", :action => "confirm", :display_name => "username" }
+      { :controller => "users", :action => "confirm", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/confirm", :method => :post },
-      { :controller => "user", :action => "confirm", :display_name => "username" }
+      { :controller => "users", :action => "confirm", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/confirm/resend", :method => :get },
-      { :controller => "user", :action => "confirm_resend", :display_name => "username" }
+      { :controller => "users", :action => "confirm_resend", :display_name => "username" }
     )
 
     assert_routing(
       { :path => "/user/confirm", :method => :get },
-      { :controller => "user", :action => "confirm" }
+      { :controller => "users", :action => "confirm" }
     )
     assert_routing(
       { :path => "/user/confirm", :method => :post },
-      { :controller => "user", :action => "confirm" }
+      { :controller => "users", :action => "confirm" }
     )
     assert_routing(
       { :path => "/user/confirm-email", :method => :get },
-      { :controller => "user", :action => "confirm_email" }
+      { :controller => "users", :action => "confirm_email" }
     )
     assert_routing(
       { :path => "/user/confirm-email", :method => :post },
-      { :controller => "user", :action => "confirm_email" }
+      { :controller => "users", :action => "confirm_email" }
     )
 
     assert_routing(
       { :path => "/user/go_public", :method => :post },
-      { :controller => "user", :action => "go_public" }
+      { :controller => "users", :action => "go_public" }
     )
 
     assert_routing(
       { :path => "/user/forgot-password", :method => :get },
-      { :controller => "user", :action => "lost_password" }
+      { :controller => "users", :action => "lost_password" }
     )
     assert_routing(
       { :path => "/user/forgot-password", :method => :post },
-      { :controller => "user", :action => "lost_password" }
+      { :controller => "users", :action => "lost_password" }
     )
     assert_routing(
       { :path => "/user/reset-password", :method => :get },
-      { :controller => "user", :action => "reset_password" }
+      { :controller => "users", :action => "reset_password" }
     )
     assert_routing(
       { :path => "/user/reset-password", :method => :post },
-      { :controller => "user", :action => "reset_password" }
+      { :controller => "users", :action => "reset_password" }
     )
 
     assert_routing(
       { :path => "/user/suspended", :method => :get },
-      { :controller => "user", :action => "suspended" }
+      { :controller => "users", :action => "suspended" }
     )
 
     assert_routing(
       { :path => "/user/username", :method => :get },
-      { :controller => "user", :action => "show", :display_name => "username" }
+      { :controller => "users", :action => "show", :display_name => "username" }
     )
 
     assert_routing(
       { :path => "/user/username/account", :method => :get },
-      { :controller => "user", :action => "account", :display_name => "username" }
+      { :controller => "users", :action => "account", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/account", :method => :post },
-      { :controller => "user", :action => "account", :display_name => "username" }
+      { :controller => "users", :action => "account", :display_name => "username" }
     )
 
     assert_routing(
       { :path => "/user/username/make_friend", :method => :get },
-      { :controller => "user", :action => "make_friend", :display_name => "username" }
+      { :controller => "users", :action => "make_friend", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/make_friend", :method => :post },
-      { :controller => "user", :action => "make_friend", :display_name => "username" }
+      { :controller => "users", :action => "make_friend", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/remove_friend", :method => :get },
-      { :controller => "user", :action => "remove_friend", :display_name => "username" }
+      { :controller => "users", :action => "remove_friend", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/remove_friend", :method => :post },
-      { :controller => "user", :action => "remove_friend", :display_name => "username" }
+      { :controller => "users", :action => "remove_friend", :display_name => "username" }
     )
 
     assert_routing(
       { :path => "/user/username/set_status", :method => :get },
-      { :controller => "user", :action => "set_status", :display_name => "username" }
+      { :controller => "users", :action => "set_status", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/delete", :method => :get },
-      { :controller => "user", :action => "delete", :display_name => "username" }
+      { :controller => "users", :action => "delete", :display_name => "username" }
     )
 
     assert_routing(
       { :path => "/users", :method => :get },
-      { :controller => "user", :action => "index" }
+      { :controller => "users", :action => "index" }
     )
     assert_routing(
       { :path => "/users", :method => :post },
-      { :controller => "user", :action => "index" }
+      { :controller => "users", :action => "index" }
     )
     assert_routing(
       { :path => "/users/status", :method => :get },
-      { :controller => "user", :action => "index", :status => "status" }
+      { :controller => "users", :action => "index", :status => "status" }
     )
     assert_routing(
       { :path => "/users/status", :method => :post },
-      { :controller => "user", :action => "index", :status => "status" }
+      { :controller => "users", :action => "index", :status => "status" }
     )
   end
 
@@ -237,7 +237,9 @@ class UserControllerTest < ActionController::TestCase
 
     assert_difference "User.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 1 do
-        post :save, :session => { :new_user => user }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user }
+        end
       end
     end
 
@@ -259,7 +261,9 @@ class UserControllerTest < ActionController::TestCase
 
     assert_no_difference "User.count" do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :save, :session => { :new_user => user }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user }
+        end
       end
     end
 
@@ -274,7 +278,9 @@ class UserControllerTest < ActionController::TestCase
 
     assert_no_difference "User.count" do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :save, :session => { :new_user => user }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user }
+        end
       end
     end
 
@@ -289,7 +295,9 @@ class UserControllerTest < ActionController::TestCase
 
     assert_no_difference "User.count" do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :save, :session => { :new_user => user }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user }
+        end
       end
     end
 
@@ -304,7 +312,9 @@ class UserControllerTest < ActionController::TestCase
 
     assert_no_difference "User.count" do
       assert_no_difference "ActionMailer::Base.deliveries.size" do
-        post :save, :session => { :new_user => user }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user }
+        end
       end
     end
 
@@ -318,8 +328,10 @@ class UserControllerTest < ActionController::TestCase
 
     assert_difference "User.count", 1 do
       assert_difference "ActionMailer::Base.deliveries.size", 1 do
-        post :save, :session => { :new_user => user,
-                                  :referer => "/edit?editor=id#map=1/2/3" }
+        perform_enqueued_jobs do
+          post :save, :session => { :new_user => user,
+                                    :referer => "/edit?editor=id#map=1/2/3" }
+        end
       end
     end
 
@@ -489,7 +501,9 @@ class UserControllerTest < ActionController::TestCase
     session[:token] = user.tokens.create.token
 
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      get :confirm_resend, :params => { :display_name => user.display_name }
+      perform_enqueued_jobs do
+        get :confirm_resend, :params => { :display_name => user.display_name }
+      end
     end
 
     assert_response :redirect
@@ -506,7 +520,9 @@ class UserControllerTest < ActionController::TestCase
   def test_confirm_resend_no_token
     user = create(:user, :pending)
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      get :confirm_resend, :params => { :display_name => user.display_name }
+      perform_enqueued_jobs do
+        get :confirm_resend, :params => { :display_name => user.display_name }
+      end
     end
 
     assert_response :redirect
@@ -516,7 +532,9 @@ class UserControllerTest < ActionController::TestCase
 
   def test_confirm_resend_unknown_user
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      get :confirm_resend, :params => { :display_name => "No Such User" }
+      perform_enqueued_jobs do
+        get :confirm_resend, :params => { :display_name => "No Such User" }
+      end
     end
 
     assert_response :redirect
@@ -674,7 +692,9 @@ class UserControllerTest < ActionController::TestCase
     uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
 
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :lost_password, :params => { :user => { :email => user.email } }
+      perform_enqueued_jobs do
+        post :lost_password, :params => { :user => { :email => user.email } }
+      end
     end
     assert_response :redirect
     assert_redirected_to :action => :login
@@ -687,7 +707,9 @@ class UserControllerTest < ActionController::TestCase
     # Test resetting using an address that matches a different user
     # that has the same address in a different case
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :lost_password, :params => { :user => { :email => user.email.upcase } }
+      perform_enqueued_jobs do
+        post :lost_password, :params => { :user => { :email => user.email.upcase } }
+      end
     end
     assert_response :redirect
     assert_redirected_to :action => :login
@@ -700,7 +722,9 @@ class UserControllerTest < ActionController::TestCase
     # Test resetting using an address that is a case insensitive match
     # for more than one user but not an exact match for either
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :lost_password, :params => { :user => { :email => user.email.titlecase } }
+      perform_enqueued_jobs do
+        post :lost_password, :params => { :user => { :email => user.email.titlecase } }
+      end
     end
     assert_response :success
     assert_template :lost_password
@@ -710,7 +734,9 @@ class UserControllerTest < ActionController::TestCase
     # address which is case insensitively unique
     third_user = create(:user)
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :lost_password, :params => { :user => { :email => third_user.email } }
+      perform_enqueued_jobs do
+        post :lost_password, :params => { :user => { :email => third_user.email } }
+      end
     end
     assert_response :redirect
     assert_redirected_to :action => :login
@@ -723,7 +749,9 @@ class UserControllerTest < ActionController::TestCase
     # Test resetting using an address that matches a user that has the
     # same (case insensitively unique) address in a different case
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :lost_password, :params => { :user => { :email => third_user.email.upcase } }
+      perform_enqueued_jobs do
+        post :lost_password, :params => { :user => { :email => third_user.email.upcase } }
+      end
     end
     assert_response :redirect
     assert_redirected_to :action => :login
@@ -782,7 +810,7 @@ class UserControllerTest < ActionController::TestCase
     # you are not logged in
     get :account, :params => { :display_name => user.display_name }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => "login", :referer => "/user/#{ERB::Util.u(user.display_name)}/account"
+    assert_redirected_to :action => "login", :referer => "/user/#{ERB::Util.u(user.display_name)}/account"
 
     # Make sure that you are blocked when not logged in as the right user
     get :account, :params => { :display_name => user.display_name }, :session => { :user => create(:user) }
@@ -898,7 +926,9 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that exists should fail
     user.new_email = create(:user).email
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      end
     end
     assert_response :success
     assert_template :account
@@ -909,7 +939,9 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that exists should fail, regardless of case
     user.new_email = create(:user).email.upcase
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      end
     end
     assert_response :success
     assert_template :account
@@ -920,7 +952,9 @@ class UserControllerTest < ActionController::TestCase
     # Changing email to one that doesn't exist should work
     user.new_email = "new_tester@example.com"
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :account, :params => { :display_name => user.display_name, :user => user.attributes }, :session => { :user => user }
+      end
     end
     assert_response :success
     assert_template :account
@@ -941,8 +975,9 @@ class UserControllerTest < ActionController::TestCase
     assert_response :not_found
 
     # Test a normal user
-    user = create(:user)
-    create(:friend, :befriender => user)
+    user = create(:user, :home_lon => 1.1, :home_lat => 1.1)
+    friend_user = create(:user, :home_lon => 1.2, :home_lat => 1.2)
+    create(:friend, :befriender => user, :befriendee => friend_user)
     get :show, :params => { :display_name => user.display_name }
     assert_response :success
     assert_select "div#userinformation" do
@@ -1238,7 +1273,7 @@ class UserControllerTest < ActionController::TestCase
 
     # When not logged in a GET should ask us to login
     get :make_friend, :params => { :display_name => friend.display_name }
-    assert_redirected_to :controller => :user, :action => "login", :referer => make_friend_path(:display_name => friend.display_name)
+    assert_redirected_to :action => "login", :referer => make_friend_path(:display_name => friend.display_name)
 
     # When not logged in a POST should error
     post :make_friend, :params => { :display_name => friend.display_name }
@@ -1257,7 +1292,9 @@ class UserControllerTest < ActionController::TestCase
 
     # When logged in a POST should add the friendship
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :make_friend, :params => { :display_name => friend.display_name }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :make_friend, :params => { :display_name => friend.display_name }, :session => { :user => user }
+      end
     end
     assert_redirected_to user_path(friend)
     assert_match(/is now your friend/, flash[:notice])
@@ -1269,7 +1306,9 @@ class UserControllerTest < ActionController::TestCase
 
     # A second POST should report that the friendship already exists
     assert_no_difference "ActionMailer::Base.deliveries.size" do
-      post :make_friend, :params => { :display_name => friend.display_name }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :make_friend, :params => { :display_name => friend.display_name }, :session => { :user => user }
+      end
     end
     assert_redirected_to user_path(friend)
     assert_match(/You are already friends with/, flash[:warning])
@@ -1296,7 +1335,9 @@ class UserControllerTest < ActionController::TestCase
 
     # When logged in a POST should add the friendship and refer us
     assert_difference "ActionMailer::Base.deliveries.size", 1 do
-      post :make_friend, :params => { :display_name => friend.display_name, :referer => "/test" }, :session => { :user => user }
+      perform_enqueued_jobs do
+        post :make_friend, :params => { :display_name => friend.display_name, :referer => "/test" }, :session => { :user => user }
+      end
     end
     assert_redirected_to "/test"
     assert_match(/is now your friend/, flash[:notice])
@@ -1325,7 +1366,7 @@ class UserControllerTest < ActionController::TestCase
 
     # When not logged in a GET should ask us to login
     get :remove_friend, :params => { :display_name => friend.display_name }
-    assert_redirected_to :controller => :user, :action => "login", :referer => remove_friend_path(:display_name => friend.display_name)
+    assert_redirected_to :action => "login", :referer => remove_friend_path(:display_name => friend.display_name)
 
     # When not logged in a POST should error
     post :remove_friend, :params => { :display_name => friend.display_name }
index c786b4f4a87eee2092a287f3cee3bd1eed7645f0..b50a990c688a1b5e54960682fa1a9ad7a2c94444 100644 (file)
@@ -9,17 +9,17 @@ class ClientApplicationsTest < ActionDispatch::IntegrationTest
 
     get "/login"
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true"
     follow_redirect!
     assert_response :success
     post "/login", :params => { "username" => user.email, "password" => "test", :referer => "/user/#{ERB::Util.u(user.display_name)}" }
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/show"
+    assert_template "users/show"
     get "/user/#{ERB::Util.u(user.display_name)}/account"
     assert_response :success
-    assert_template "user/account"
+    assert_template "users/account"
 
     # check that the form to allow new client application creations exists
     assert_in_heading do
index 5f655c4811ebb7856ff988a9622b5c5acf5baf20..2953f5fe2a98661653384fffb4c362f69033337d 100644 (file)
@@ -30,7 +30,7 @@ class UserChangesetCommentsTest < ActionDispatch::IntegrationTest
     follow_redirect!
     # We should now be at the login page
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     # We can now login
     post "/login", :params => { "username" => user.email, "password" => "test" }
     assert_response :redirect
index fbec2fb9338ce4e42a62e3e6ed4dab14a061eb76..144a45a45ad990af426dd413dc8f62164da1e96f 100644 (file)
@@ -27,7 +27,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest
       get "/user/new", :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
       follow_redirect!
       assert_response :success
-      assert_template "user/new"
+      assert_template "users/new"
     end
   end
 
@@ -37,13 +37,15 @@ class UserCreationTest < ActionDispatch::IntegrationTest
       display_name = "#{locale}_new_tester"
       assert_difference("User.count", 0) do
         assert_difference("ActionMailer::Base.deliveries.size", 0) do
-          post "/user/new",
-               :params => { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
-               :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
+          perform_enqueued_jobs do
+            post "/user/new",
+                 :params => { :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
+                 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
+          end
         end
       end
       assert_response :success
-      assert_template "user/new"
+      assert_template "users/new"
       assert_equal locale.to_s, response.headers["Content-Language"] unless locale == :root
       assert_select "form > fieldset > div.form-row > input.field_with_errors#user_email"
       assert_no_missing_translations
@@ -56,13 +58,15 @@ class UserCreationTest < ActionDispatch::IntegrationTest
       email = "#{locale}_new_tester"
       assert_difference("User.count", 0) do
         assert_difference("ActionMailer::Base.deliveries.size", 0) do
-          post "/user/new",
-               :params => { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
-               :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
+          perform_enqueued_jobs do
+            post "/user/new",
+                 :params => { :user => { :email => email, :email_confirmation => email, :display_name => dup_display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } },
+                 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
+          end
         end
       end
       assert_response :success
-      assert_template "user/new"
+      assert_template "users/new"
       assert_select "form > fieldset > div.form-row > input.field_with_errors#user_display_name"
       assert_no_missing_translations
     end
@@ -75,8 +79,10 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
       assert_difference("User.count", 0) do
         assert_difference("ActionMailer::Base.deliveries.size", 0) do
-          post "/user/new",
-               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          perform_enqueued_jobs do
+            post "/user/new",
+                 :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          end
         end
       end
 
@@ -84,9 +90,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
       assert_difference("User.count") do
         assert_difference("ActionMailer::Base.deliveries.size", 1) do
-          post "/user/save",
-               :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
-          follow_redirect!
+          perform_enqueued_jobs do
+            post "/user/save",
+                 :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
+            follow_redirect!
+          end
         end
       end
 
@@ -99,7 +107,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
       # Check the page
       assert_response :success
-      assert_template "user/confirm"
+      assert_template "users/confirm"
 
       ActionMailer::Base.deliveries.clear
     end
@@ -122,12 +130,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer }
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password }, :referer => referer }
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :pass_crypt => password, :pass_crypt_confirmation => password } }
+          follow_redirect!
+        end
       end
     end
 
@@ -144,14 +154,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -168,26 +178,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -199,21 +211,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-openid2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -229,19 +243,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "openid", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -258,14 +274,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -284,26 +300,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "google")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "google")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -315,21 +333,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-google2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "google")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "google")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -347,19 +367,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "google")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "google")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "google", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -376,14 +398,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -400,26 +422,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "facebook")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "facebook")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -431,21 +455,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-facebook2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "facebook")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "facebook")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -461,19 +487,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "facebook")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "facebook")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "facebook", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -490,14 +518,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -514,26 +542,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "windowslive")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "windowslive")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -545,21 +575,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-windowslive2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "windowslive")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "windowslive")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -575,19 +607,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "windowslive")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "windowslive")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "windowslive", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -604,14 +638,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -628,26 +662,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "github")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "github")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -659,21 +695,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-github2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "github")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "github")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -689,19 +727,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "github")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "github")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "github", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -718,14 +758,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
@@ -742,26 +782,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     password = "testtest"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
-        assert_response :redirect
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password } }
+          assert_response :redirect
+          follow_redirect!
+        end
       end
     end
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
   end
@@ -773,21 +815,23 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     display_name = "new_tester-wikipedia2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        follow_redirect!
-        assert_response :success
-        assert_template "user/new"
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" } }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          follow_redirect!
+          assert_response :success
+          assert_template "users/new"
+        end
       end
     end
 
@@ -803,19 +847,21 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     referer = "/traces/mine"
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
-        post "/user/new",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
-        assert_response :redirect
-        assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
-        follow_redirect!
-        assert_response :redirect
-        assert_redirected_to "/user/terms"
-        post "/user/save",
-             :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
-        follow_redirect!
+        perform_enqueued_jobs do
+          post "/user/new",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer }
+          assert_response :redirect
+          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
+          follow_redirect!
+          assert_response :redirect
+          assert_redirected_to "/user/terms"
+          post "/user/save",
+               :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :auth_provider => "wikipedia", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" } }
+          follow_redirect!
+        end
       end
     end
 
@@ -832,14 +878,14 @@ class UserCreationTest < ActionDispatch::IntegrationTest
 
     # Check the page
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     ActionMailer::Base.deliveries.clear
 
     # Go to the confirmation page
     get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :success
-    assert_template "user/confirm"
+    assert_template "users/confirm"
 
     post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
     assert_response :redirect
index 2c1e651450a30d3246c1acee890591f760cf8399..57b4a8b0c97d3bb68604ef3d498cc4355f459713 100644 (file)
@@ -11,7 +11,7 @@ class UserDiariesTest < ActionDispatch::IntegrationTest
     follow_redirect!
     # We should now be at the login page
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     # We can now login
     post "/login", :params => { "username" => user.email, "password" => "test", :referer => "/diary/new" }
     assert_response :redirect
index 2c3e61be67aeef01a5e88752bcc03789d9726bed..feaa920659ddbc8147507827c4e8dca810796dbf 100644 (file)
@@ -355,10 +355,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true, :referer => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     post "/login", :params => { :openid_url => "http://localhost:1123/john.doe", :referer => "/history" }
     assert_response :redirect
     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -379,10 +379,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true, :referer => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     post "/login", :params => { :openid_url => user.auth_uid, :remember_me_openid => true, :referer => "/history" }
     assert_response :redirect
     assert_redirected_to auth_path(:provider => "openid", :openid_url => user.auth_uid, :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -404,10 +404,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true, :referer => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     post "/login", :params => { :openid_url => user.auth_uid, :referer => "/history" }
     assert_response :redirect
     assert_redirected_to auth_path(:provider => "openid", :openid_url => user.auth_uid, :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -432,10 +432,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true, :referer => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     post "/login", :params => { :openid_url => user.auth_uid, :referer => "/history" }
     assert_response :redirect
     assert_redirected_to auth_path(:provider => "openid", :openid_url => user.auth_uid, :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -459,10 +459,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true, :referer => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     post "/login", :params => { :openid_url => "http://localhost:1123/fred.bloggs", :referer => "/history" }
     assert_response :redirect
     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -473,7 +473,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -485,10 +485,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "google")
@@ -505,10 +505,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "google")
@@ -529,10 +529,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "google")
@@ -555,10 +555,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "google")
@@ -566,7 +566,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -578,10 +578,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "google")
@@ -603,10 +603,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "facebook")
@@ -623,10 +623,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "facebook")
@@ -647,10 +647,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "facebook")
@@ -671,10 +671,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "facebook")
@@ -682,7 +682,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -692,10 +692,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "windowslive")
@@ -712,10 +712,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "windowslive")
@@ -736,10 +736,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "windowslive")
@@ -760,10 +760,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "windowslive")
@@ -771,7 +771,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -781,10 +781,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "github")
@@ -801,10 +801,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "github")
@@ -825,10 +825,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "github")
@@ -849,10 +849,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "github")
@@ -860,7 +860,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -870,10 +870,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -890,10 +890,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -914,10 +914,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -938,10 +938,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest
 
     get "/login", :params => { :referer => "/history" }
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true", "referer" => "/history"
     follow_redirect!
     assert_response :success
-    assert_template "user/login"
+    assert_template "users/login"
     get auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
     assert_response :redirect
     assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
@@ -949,7 +949,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
     assert_response :redirect
     follow_redirect!
     assert_response :success
-    assert_template "user/new"
+    assert_template "users/new"
     assert_select "span.username", false
   end
 
@@ -958,7 +958,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest
   def try_password_login(username, password, remember_me = nil)
     get "/login"
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
+    assert_redirected_to :controller => :users, :action => :login, :cookie_test => true
     follow_redirect!
     assert_response :success
     assert_template "login"
index 7001abd3dc9c2a30c2860bf416a0be5ec682daea..9d367150dd9d4baba4406f7856d66e5169ec6b72 100644 (file)
@@ -23,7 +23,7 @@ class UserRolesTest < ActionDispatch::IntegrationTest
   def check_fail(action, user, role)
     get "/login"
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true"
     follow_redirect!
     assert_response :success
     post "/login", :params => { "username" => create(user).email, "password" => "test", :referer => "/" }
@@ -41,7 +41,7 @@ class UserRolesTest < ActionDispatch::IntegrationTest
   def check_success(action, user, role)
     get "/login"
     assert_response :redirect
-    assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
+    assert_redirected_to "controller" => "users", "action" => "login", "cookie_test" => "true"
     follow_redirect!
     assert_response :success
     post "/login", :params => { "username" => create(user).email, "password" => "test", :referer => "/" }
index 811883f5fb8d17554c415ee3e507210ffec4b281..03e8c6f54d7978e494c2d155ee05074e615d3ebd 100644 (file)
@@ -29,11 +29,11 @@ class UserTermsSeenTest < ActionDispatch::IntegrationTest
       get "/login"
       follow_redirect!
       assert_response :success
-      assert_template "user/login"
+      assert_template "users/login"
       post "/login", :params => { :username => user.email, :password => "test", :referer => "/diary/new" }
       assert_response :redirect
       # but now we need to look at the terms
-      assert_redirected_to :controller => :user, :action => :terms, :referer => "/diary/new"
+      assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
       follow_redirect!
       assert_response :success
 
@@ -56,18 +56,18 @@ class UserTermsSeenTest < ActionDispatch::IntegrationTest
       get "/login"
       follow_redirect!
       assert_response :success
-      assert_template "user/login"
+      assert_template "users/login"
       post "/login", :params => { :username => user.email, :password => "test", :referer => "/diary/new" }
       assert_response :redirect
       # but now we need to look at the terms
-      assert_redirected_to :controller => :user, :action => :terms, :referer => "/diary/new"
+      assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
 
       # check that if we go somewhere else now, it redirects
       # back to the terms page.
       get "/traces/mine"
-      assert_redirected_to :controller => :user, :action => :terms, :referer => "/traces/mine"
+      assert_redirected_to :controller => :users, :action => :terms, :referer => "/traces/mine"
       get "/traces/mine", :params => { :referer => "/diary/new" }
-      assert_redirected_to :controller => :user, :action => :terms, :referer => "/diary/new"
+      assert_redirected_to :controller => :users, :action => :terms, :referer => "/diary/new"
     end
   end
 
index e6d0c0abdcdaa99e2a3112c4ca6b0a7c0c30952d..6b76d82a49fe623fe4516bd23e5ce9616d4ffa45 100644 (file)
@@ -207,4 +207,29 @@ class RelationTest < ActiveSupport::TestCase
     assert_equal 39, changeset.min_lat
     assert_equal 39, changeset.max_lat
   end
+
+  def test_changeset_bbox_delete_relation
+    orig_relation = create(:relation)
+    node1 = create(:node, :longitude => 116, :latitude => 39)
+    node2 = create(:node, :longitude => 39, :latitude => 116)
+    create(:relation_member, :relation => orig_relation, :member_type => "Node", :member_id => node1.id)
+    create(:relation_member, :relation => orig_relation, :member_type => "Node", :member_id => node2.id)
+    user = create(:user)
+    changeset = create(:changeset, :user => user)
+    assert_nil changeset.min_lon
+    assert_nil changeset.max_lon
+    assert_nil changeset.max_lat
+    assert_nil changeset.min_lat
+
+    new_relation = Relation.new
+    new_relation.id = orig_relation.id
+    new_relation.version = orig_relation.version
+    new_relation.changeset_id = changeset.id
+    orig_relation.delete_with_history!(new_relation, user)
+    changeset.reload
+    assert_equal 39, changeset.min_lon
+    assert_equal 116, changeset.max_lon
+    assert_equal 39, changeset.min_lat
+    assert_equal 116, changeset.max_lat
+  end
 end
index 9aee867a9c498353b9b868236f3be363feb54265..138de272168e1289c52297b0648b43934b9e0019 100644 (file)
@@ -5,7 +5,7 @@ class IssuesTest < ApplicationSystemTestCase
 
   def test_view_issues_not_logged_in
     visit issues_path
-    assert page.has_content?(I18n.t("user.login.title"))
+    assert page.has_content?(I18n.t("users.login.title"))
   end
 
   def test_view_issues_normal_user
index 9d919523b5bbba4fd4495f9321cd591e016c65d3..7b49f2997109b4e3738f5e553609718ba8519d61 100644 (file)
@@ -6,7 +6,7 @@ class ReportUserTest < ApplicationSystemTestCase
     visit browse_note_path(note)
     assert page.has_content?(note.comments.first.body)
 
-    assert_not page.has_content?(I18n.t("user.show.report"))
+    assert_not page.has_content?(I18n.t("users.show.report"))
   end
 
   def test_can_report_user
@@ -14,7 +14,7 @@ class ReportUserTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit user_path(user)
 
-    click_on I18n.t("user.show.report")
+    click_on I18n.t("users.show.report")
     assert page.has_content? "Report"
     assert page.has_content? I18n.t("reports.new.disclaimer.intro")
 
@@ -35,7 +35,7 @@ class ReportUserTest < ApplicationSystemTestCase
     sign_in_as(create(:user))
     visit user_path(user)
 
-    click_on I18n.t("user.show.report")
+    click_on I18n.t("users.show.report")
     assert page.has_content? "Report"
     assert page.has_content? I18n.t("reports.new.disclaimer.intro")
 
@@ -52,7 +52,7 @@ class ReportUserTest < ApplicationSystemTestCase
 
     visit user_path(user)
 
-    click_on I18n.t("user.show.report")
+    click_on I18n.t("users.show.report")
     assert page.has_content? "Report"
     assert page.has_content? I18n.t("reports.new.disclaimer.intro")
 
index 83cf909dd94f208c5b89c20e024f8e6941e040f4..fca1f64c958adf887b42c53b491fab454447a56e 100644 (file)
@@ -11,6 +11,7 @@ WebMock.disable_net_connect!(:allow_localhost => true)
 module ActiveSupport
   class TestCase
     include FactoryBot::Syntax::Methods
+    include ActiveJob::TestHelper
 
     ##
     # takes a block which is executed in the context of a different