]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/5667'
authorTom Hughes <tom@compton.nu>
Sun, 2 Mar 2025 10:54:39 +0000 (10:54 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 2 Mar 2025 10:54:39 +0000 (10:54 +0000)
256 files changed:
.annotaterb.yml [new file with mode: 0644]
.github/workflows/danger.yml
.github/workflows/lint.yml
.github/workflows/tests.yml
.overcommit.yml
.rubocop.yml
.rubocop_todo.yml
.vscode/settings.json
CONTRIBUTING.md
Dockerfile
Gemfile
Gemfile.lock
INSTALL.md
app/abilities/ability.rb
app/abilities/api_ability.rb
app/assets/favicons/manifest.json.erb
app/assets/javascripts/application.js
app/assets/javascripts/auth_providers.js
app/assets/javascripts/diary_entry.js
app/assets/javascripts/edit/id.js.erb
app/assets/javascripts/embed.js.erb
app/assets/javascripts/fixthemap.js
app/assets/javascripts/index.js
app/assets/javascripts/index/changeset.js
app/assets/javascripts/index/directions-endpoint.js
app/assets/javascripts/index/directions.js
app/assets/javascripts/index/directions/fossgis_osrm.js
app/assets/javascripts/index/directions/fossgis_valhalla.js
app/assets/javascripts/index/directions/graphhopper.js
app/assets/javascripts/index/history.js
app/assets/javascripts/index/note.js
app/assets/javascripts/index/query.js
app/assets/javascripts/index/search.js
app/assets/javascripts/leaflet.key.js
app/assets/javascripts/leaflet.map.js
app/assets/javascripts/leaflet.share.js
app/assets/javascripts/login.js
app/assets/javascripts/matomo.js
app/assets/javascripts/messages.js
app/assets/javascripts/osm.js.erb
app/assets/javascripts/richtext.js
app/assets/javascripts/router.js
app/assets/javascripts/social_share_button.js
app/assets/javascripts/user.js
app/assets/javascripts/welcome.js
app/assets/stylesheets/common.scss
app/controllers/accounts/pd_declarations_controller.rb
app/controllers/accounts/terms_controller.rb
app/controllers/accounts_controller.rb
app/controllers/api/changeset_comments/visibilities_controller.rb [new file with mode: 0644]
app/controllers/api/changeset_comments_controller.rb
app/controllers/api/changesets/downloads_controller.rb [new file with mode: 0644]
app/controllers/api/changesets_controller.rb
app/controllers/confirmations_controller.rb
app/controllers/dashboards_controller.rb
app/controllers/notes_controller.rb
app/controllers/user_mutes_controller.rb
app/controllers/users/lists_controller.rb
app/controllers/users_controller.rb
app/helpers/note_helper.rb
app/helpers/svg_helper.rb
app/models/acl.rb
app/models/changeset.rb
app/models/changeset_comment.rb
app/models/changeset_tag.rb
app/models/diary_comment.rb
app/models/diary_entry.rb
app/models/diary_entry_subscription.rb
app/models/follow.rb
app/models/message.rb
app/models/node.rb
app/models/node_tag.rb
app/models/note.rb
app/models/note_comment.rb
app/models/note_subscription.rb
app/models/oauth2_application.rb
app/models/old_node.rb
app/models/old_node_tag.rb
app/models/old_relation.rb
app/models/old_relation_member.rb
app/models/old_relation_tag.rb
app/models/old_way.rb
app/models/old_way_node.rb
app/models/old_way_tag.rb
app/models/redaction.rb
app/models/relation.rb
app/models/relation_member.rb
app/models/relation_tag.rb
app/models/trace.rb
app/models/tracepoint.rb
app/models/tracetag.rb
app/models/user.rb
app/models/user_block.rb
app/models/user_mute.rb
app/models/user_preference.rb
app/models/user_role.rb
app/models/way.rb
app/models/way_node.rb
app/models/way_tag.rb
app/views/accounts/deletions/show.html.erb
app/views/accounts/show.html.erb [moved from app/views/accounts/edit.html.erb with 100% similarity]
app/views/accounts/terms/_terms.html.erb
app/views/api/changeset_comments/visibilities/create.json.jbuilder [new file with mode: 0644]
app/views/api/changeset_comments/visibilities/create.xml.builder [new file with mode: 0644]
app/views/api/changeset_comments/visibilities/destroy.json.jbuilder [new file with mode: 0644]
app/views/api/changeset_comments/visibilities/destroy.xml.builder [new file with mode: 0644]
app/views/api/changesets/downloads/show.xml.builder [moved from app/views/api/changesets/download.xml.builder with 55% similarity]
app/views/application/_auth_providers.html.erb
app/views/application/_settings_menu.html.erb
app/views/changesets/index.atom.builder
app/views/changesets/show.html.erb
app/views/dashboards/_contact.html.erb
app/views/dashboards/show.html.erb
app/views/layouts/_header.html.erb
app/views/layouts/_search.html.erb
app/views/notes/index.html.erb
app/views/notes/show.html.erb
app/views/site/_id.html.erb
app/views/site/_not_public_flash.erb
app/views/users/lists/show.html.erb
app/views/users/show.html.erb
bin/setup
config/eslint.config.mjs [moved from config/eslint.js with 94% similarity]
config/initializers/cors.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/ba.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/fit.yml
config/locales/fr.yml
config/locales/fur.yml
config/locales/fy.yml
config/locales/ga.yml
config/locales/gcf.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/gu.yml
config/locales/he.yml
config/locales/hi.yml
config/locales/hr.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/id.yml
config/locales/is.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ka.yml
config/locales/kab.yml
config/locales/kk-cyrl.yml
config/locales/km.yml
config/locales/kn.yml
config/locales/ko.yml
config/locales/ksh.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/my.yml
config/locales/nb.yml
config/locales/nds.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/nn.yml
config/locales/nqo.yml
config/locales/oc.yml
config/locales/pa.yml
config/locales/pl.yml
config/locales/pnb.yml
config/locales/ps.yml
config/locales/pt-PT.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sat.yml
config/locales/sc.yml
config/locales/scn.yml
config/locales/sco.yml
config/locales/sh.yml
config/locales/sk.yml
config/locales/skr-arab.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/tt.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/xmf.yml
config/locales/zh-CN.yml
config/locales/zh-HK.yml
config/locales/zh-TW.yml
config/routes.rb
lib/osm.rb
lib/rich_text.rb
lib/short_link.rb
lib/tasks/annotate_rb.rake [new file with mode: 0644]
lib/tasks/auto_annotate_models.rake [deleted file]
lib/tasks/eslint.rake
package.json
test/abilities/api_capability_test.rb
test/controllers/accounts/pd_declarations_controller_test.rb
test/controllers/accounts/terms_controller_test.rb
test/controllers/accounts_controller_test.rb
test/controllers/api/changeset_comments/visibilities_controller_test.rb [new file with mode: 0644]
test/controllers/api/changeset_comments_controller_test.rb
test/controllers/api/changesets/downloads_controller_test.rb [new file with mode: 0644]
test/controllers/api/changesets_controller_test.rb
test/controllers/api/relations_controller_test.rb
test/controllers/confirmations_controller_test.rb
test/controllers/dashboards_controller_test.rb
test/controllers/notes_controller_test.rb
test/controllers/users/lists_controller_test.rb
test/controllers/users_controller_test.rb
test/javascripts/osm_test.js
test/system/account_deletion_test.rb
test/system/user_email_change_test.rb
test/system/user_muting_test.rb
test/system/user_suspension_test.rb
yarn.lock

diff --git a/.annotaterb.yml b/.annotaterb.yml
new file mode 100644 (file)
index 0000000..eab2bb9
--- /dev/null
@@ -0,0 +1,58 @@
+---
+:position: before
+:position_in_additional_file_patterns: before
+:position_in_class: before
+:position_in_factory: before
+:position_in_fixture: before
+:position_in_routes: before
+:position_in_serializer: before
+:position_in_test: before
+:classified_sort: false
+:exclude_controllers: true
+:exclude_factories: true
+:exclude_fixtures: true
+:exclude_helpers: true
+:exclude_scaffolds: true
+:exclude_serializers: true
+:exclude_sti_subclasses: false
+:exclude_tests: true
+:force: false
+:format_markdown: false
+:format_rdoc: false
+:format_yard: false
+:frozen: false
+:ignore_model_sub_dir: false
+:ignore_unknown_models: false
+:include_version: false
+:show_check_constraints: false
+:show_complete_foreign_keys: false
+:show_foreign_keys: true
+:show_indexes: true
+:simple_indexes: false
+:sort: false
+:timestamp: false
+:trace: false
+:with_comment: true
+:with_column_comments: true
+:with_table_comments: true
+:active_admin: false
+:command:
+:debug: false
+:hide_default_column_types: ''
+:hide_limit_column_types: 'integer,bigint,boolean'
+:ignore_columns:
+:ignore_routes:
+:models: true
+:routes: false
+:skip_on_db_migrate: false
+:target_action: :do_annotations
+:wrapper:
+:wrapper_close:
+:wrapper_open:
+:classes_default_to_s: []
+:additional_file_patterns: []
+:model_dir:
+- app/models
+:require: []
+:root_dir:
+- ''
index 66c2aca5113f870efe89bfbb72290a4d3e032dac..8c6680bdc998d3176422c6729b3121c55b0006a4 100644 (file)
@@ -19,7 +19,7 @@ jobs:
       - name: Setup ruby
         uses: ruby/setup-ruby@v1
         with:
-          ruby-version: 3.1
+          ruby-version: 3.2
           rubygems: 3.4.10
           bundler-cache: true
       - name: Create base branch
index 8383068b3f08d9e8893a1692334f51f55f254cdd..099d0abf8352c9e386c35bbe4c132b51a3bc49fa 100644 (file)
@@ -6,7 +6,7 @@ concurrency:
   group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
   cancel-in-progress: true
 env:
-  ruby: '3.1'
+  ruby: '3.2'
 jobs:
   rubocop:
     name: RuboCop
@@ -86,14 +86,17 @@ jobs:
         ruby-version: ${{ env.ruby }}
         rubygems: 3.4.10
         bundler-cache: true
+    - name: Configure rails
+      run: |
+        cp config/github.database.yml config/database.yml
+        cp config/example.storage.yml config/storage.yml
     - name: Setup database
       run: |
         sudo systemctl start postgresql
         sudo -u postgres createuser -s $(id -un)
         createdb openstreetmap
-        cp config/github.database.yml config/database.yml
         bundle exec rails db:schema:load
     - name: Run Annotate Models
-      run: bundle exec rails annotate_models
+      run: bundle exec annotaterb models
     - name: Fail if model annotations are out of date
       run: git diff --exit-code
index d1cf73eaefc7d239a7fe5af072007ee702f3d236..841155bf643da3dcdee31b4ae284211dd9ed122a 100644 (file)
@@ -10,7 +10,7 @@ jobs:
     name: Ruby ${{ matrix.ruby }}
     strategy:
       matrix:
-        ruby: ['3.1', '3.2', '3.3', '3.4']
+        ruby: ['3.2', '3.3', '3.4']
     runs-on: ubuntu-latest
     env:
       RAILS_ENV: test
index eab8eb2ae90e02dff71964c8710457473be82439..18bd5851f4526d8850cd736180fd80c027cfcdaa 100644 (file)
@@ -22,7 +22,7 @@ PreCommit:
     enabled: true
   EsLint:
     enabled: true
-    command: ["bin/yarn", "eslint", "-c", "config/eslint.js"]
+    command: ["bin/yarn", "eslint", "-c", "config/eslint.config.mjs"]
     exclude:
       - vendor/**/*.js
   RailsSchemaUpToDate:
index 0f15cb9a8fb64fee5ce5b970625605db7d8d464b..64a8d0a0f04509b6dad14174ab882718d524f452 100644 (file)
@@ -1,16 +1,18 @@
 inherit_from: .rubocop_todo.yml
 
-require:
-  - rubocop-capybara
-  - rubocop-factory_bot
+plugins:
   - rubocop-minitest
   - rubocop-performance
   - rubocop-rails
   - rubocop-rake
+
+require:
+  - rubocop-capybara
+  - rubocop-factory_bot
   - ./.rubocop/specific_action_names.rb
 
 AllCops:
-  TargetRubyVersion: 3.1
+  TargetRubyVersion: 3.2
   NewCops: enable
   Exclude:
     - 'vendor/**/*'
@@ -106,6 +108,10 @@ Style/MixinUsage:
     - 'bin/setup'
     - 'bin/update'
 
+Style/RaiseArgs:
+  Exclude:
+    - 'lib/osm.rb'
+
 Style/StringLiterals:
   EnforcedStyle: double_quotes
 
@@ -127,7 +133,6 @@ Rails/SpecificActionNames:
     - app/controllers/**/*.rb
   Exclude:
     # This is a todo list, but is currently too long for `rubocop --auto-gen-config`
-    - 'app/controllers/api/changeset_comments_controller.rb'
     - 'app/controllers/api/changesets_controller.rb'
     - 'app/controllers/api/notes_controller.rb'
     - 'app/controllers/api/user_preferences_controller.rb'
index 3d7cea500fec5826176e028bf5e13d19ec0ae79a..a60cd94428a3c45e8291299455fd275e8e409374 100644 (file)
@@ -6,14 +6,6 @@
 # Note that changes in the inspected code, or installation of new
 # versions of RuboCop, may require this file to be generated again.
 
-# Work around erblint issues.
-# https://github.com/openstreetmap/openstreetmap-website/issues/2472
-require:
-  - rubocop-minitest
-  - rubocop-performance
-  - rubocop-rails
-  - rubocop-rake
-
 # Offense count: 13
 # Configuration parameters: Include, MaxAmount.
 # Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
index 8a3d341d48ce67d2541e9255b90bc5d7b6c18729..3545f07279b2b802c2be21b034336862152aa504 100644 (file)
@@ -1,5 +1,5 @@
 {
   "eslint.options": {
-    "overrideConfigFile": "config/eslint.js"
+    "overrideConfigFile": "config/eslint.config.mjs"
   }
 }
index 46fe63bb2b101595fe02b0ea2fb40e43f0553a40..20debf4d1dd7d5c143e3d23b28a552a6a578bbe8 100644 (file)
@@ -55,7 +55,7 @@ bundle exec rails test:all
 You can run javascript tests with:
 
 ```
-bundle exec teaspoon
+RAILS_ENV=test bundle exec teaspoon
 ```
 
 You can view test coverage statistics by browsing the `coverage` directory.
index dae25be3fcc3b848d15b02844f3687aaecbf7914..5df13d717e9cd655eec5c639315e282061725b43 100644 (file)
@@ -1,4 +1,4 @@
-FROM debian:bookworm
+FROM ruby:3.2-bookworm
 
 ENV DEBIAN_FRONTEND=noninteractive
 
diff --git a/Gemfile b/Gemfile
index 2765b1ae71fe39b643993629b70adc69dc0bec7a..ad6b3b3ef2637cc257b7d973de8c1c4eff23d674 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -55,7 +55,6 @@ gem "bootstrap_form", "~> 5.0"
 gem "cancancan"
 gem "config"
 gem "delayed_job_active_record"
-gem "dry-schema", "< 1.14.0" # see https://github.com/openstreetmap/openstreetmap-website/issues/5482
 gem "dry-validation"
 gem "frozen_record"
 gem "http_accept_language", "~> 2.1.1"
@@ -139,9 +138,6 @@ gem "image_processing"
 # Used to validate widths
 gem "unicode-display_width"
 
-# Lock some modules to old versions for ruby 3.1 support
-gem "zeitwerk", "< 2.7"
-
 # Gems useful for development
 group :development do
   gem "better_errors"
@@ -180,7 +176,7 @@ group :test do
 end
 
 group :development, :test do
-  gem "annotate"
+  gem "annotaterb"
   gem "teaspoon"
   gem "teaspoon-mocha", "~> 2.3.3"
 
index 0ca767c00a12e851e429b91aa2bafc4f515be6f5..38328c2807c91cb08ed08b5c56a4088131778ae1 100644 (file)
@@ -82,9 +82,7 @@ GEM
       tzinfo (~> 2.0, >= 2.0.5)
     addressable (2.8.7)
       public_suffix (>= 2.0.2, < 7.0)
-    annotate (3.2.0)
-      activerecord (>= 3.2, < 8.0)
-      rake (>= 10.4, < 14.0)
+    annotaterb (4.14.0)
     argon2 (2.3.2)
       ffi (~> 1.15)
       ffi-compiler (~> 1.0)
@@ -92,17 +90,17 @@ GEM
     autoprefixer-rails (10.4.19.0)
       execjs (~> 2)
     aws-eventstream (1.3.1)
-    aws-partitions (1.1050.0)
-    aws-sdk-core (3.218.1)
+    aws-partitions (1.1054.0)
+    aws-sdk-core (3.219.0)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.992.0)
       aws-sigv4 (~> 1.9)
       base64
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.98.0)
+    aws-sdk-kms (1.99.0)
       aws-sdk-core (~> 3, >= 3.216.0)
       aws-sigv4 (~> 1.5)
-    aws-sdk-s3 (1.181.0)
+    aws-sdk-s3 (1.182.0)
       aws-sdk-core (~> 3, >= 3.216.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.5)
@@ -231,13 +229,13 @@ GEM
       concurrent-ruby (~> 1.0)
       dry-core (~> 1.1)
       zeitwerk (~> 2.6)
-    dry-schema (1.13.4)
+    dry-schema (1.14.0)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 1.0, >= 1.0.1)
-      dry-core (~> 1.0, < 2)
-      dry-initializer (~> 3.0)
-      dry-logic (>= 1.4, < 2)
-      dry-types (>= 1.7, < 2)
+      dry-core (~> 1.1)
+      dry-initializer (~> 3.2)
+      dry-logic (~> 1.5)
+      dry-types (~> 1.8)
       zeitwerk (~> 2.6)
     dry-types (1.8.2)
       bigdecimal (~> 3.0)
@@ -246,11 +244,11 @@ GEM
       dry-inflector (~> 1.0)
       dry-logic (~> 1.4)
       zeitwerk (~> 2.6)
-    dry-validation (1.10.0)
+    dry-validation (1.11.1)
       concurrent-ruby (~> 1.0)
-      dry-core (~> 1.0, < 2)
-      dry-initializer (~> 3.0)
-      dry-schema (>= 1.12, < 2)
+      dry-core (~> 1.1)
+      dry-initializer (~> 3.2)
+      dry-schema (~> 1.14)
       zeitwerk (~> 2.6)
     erb_lint (0.9.0)
       activesupport
@@ -372,7 +370,7 @@ GEM
     marcel (1.0.4)
     matrix (0.4.2)
     maxminddb (0.1.22)
-    mini_magick (5.1.2)
+    mini_magick (5.2.0)
       benchmark
       logger
     mini_mime (1.1.5)
@@ -399,7 +397,7 @@ GEM
     net-smtp (0.5.1)
       net-protocol
     nio4r (2.7.4)
-    nokogiri (1.18.2)
+    nokogiri (1.18.3)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     oauth (1.1.0)
@@ -456,7 +454,7 @@ GEM
     open4 (1.3.4)
     openstreetmap-deadlock_retry (1.3.1)
     ostruct (0.6.1)
-    overcommit (0.66.0)
+    overcommit (0.67.0)
       childprocess (>= 0.6.3, < 6)
       iniparse (~> 1.4)
       rexml (>= 3.3.9)
@@ -548,13 +546,13 @@ GEM
       io-console (~> 0.5)
     request_store (1.7.0)
       rack (>= 1.4)
-    rexml (3.4.0)
+    rexml (3.4.1)
     rinku (2.0.6)
     rotp (6.3.0)
     rouge (4.5.1)
     rtlcss (0.2.1)
       mini_racer (>= 0.6.3)
-    rubocop (1.72.0)
+    rubocop (1.72.2)
       json (~> 2.3)
       language_server-protocol (~> 3.17.0.2)
       lint_roller (~> 1.1.0)
@@ -571,19 +569,23 @@ GEM
       rubocop (~> 1.41)
     rubocop-factory_bot (2.26.1)
       rubocop (~> 1.61)
-    rubocop-minitest (0.36.0)
-      rubocop (>= 1.61, < 2.0)
-      rubocop-ast (>= 1.31.1, < 2.0)
-    rubocop-performance (1.23.1)
-      rubocop (>= 1.48.1, < 2.0)
-      rubocop-ast (>= 1.31.1, < 2.0)
-    rubocop-rails (2.29.1)
+    rubocop-minitest (0.37.1)
+      lint_roller (~> 1.1)
+      rubocop (>= 1.72.1, < 2.0)
+      rubocop-ast (>= 1.38.0, < 2.0)
+    rubocop-performance (1.24.0)
+      lint_roller (~> 1.1)
+      rubocop (>= 1.72.1, < 2.0)
+      rubocop-ast (>= 1.38.0, < 2.0)
+    rubocop-rails (2.30.2)
       activesupport (>= 4.2.0)
+      lint_roller (~> 1.1)
       rack (>= 1.1)
-      rubocop (>= 1.52.0, < 2.0)
-      rubocop-ast (>= 1.31.1, < 2.0)
-    rubocop-rake (0.6.0)
-      rubocop (~> 1.0)
+      rubocop (>= 1.72.1, < 2.0)
+      rubocop-ast (>= 1.38.0, < 2.0)
+    rubocop-rake (0.7.1)
+      lint_roller (~> 1.1)
+      rubocop (>= 1.72.1)
     ruby-openid (2.9.2)
     ruby-progressbar (1.13.0)
     ruby-vips (2.2.3)
@@ -628,7 +630,7 @@ GEM
       actionpack (>= 6.1)
       activesupport (>= 6.1)
       sprockets (>= 3.0.0)
-    stringio (3.1.3)
+    stringio (3.1.5)
     strong_migrations (1.8.0)
       activerecord (>= 5.2)
     teaspoon (1.4.0)
@@ -654,7 +656,7 @@ GEM
       i18n (>= 0.8.0)
       simpleidn
     vendorer (0.2.0)
-    version_gem (1.1.4)
+    version_gem (1.1.6)
     webmock (3.25.0)
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
@@ -667,7 +669,7 @@ GEM
     websocket-extensions (0.1.5)
     xpath (3.2.0)
       nokogiri (~> 1.8)
-    zeitwerk (2.6.18)
+    zeitwerk (2.7.2)
 
 PLATFORMS
   ruby
@@ -678,7 +680,7 @@ DEPENDENCIES
   active_record_union
   activerecord-import
   addressable (~> 2.8)
-  annotate
+  annotaterb
   argon2
   autoprefixer-rails
   aws-sdk-s3
@@ -704,7 +706,6 @@ DEPENDENCIES
   doorkeeper
   doorkeeper-i18n
   doorkeeper-openid_connect
-  dry-schema (< 1.14.0)
   dry-validation
   erb_lint
   factory_bot_rails
@@ -778,7 +779,6 @@ DEPENDENCIES
   validates_email_format_of (>= 1.5.1)
   vendorer
   webmock
-  zeitwerk (< 2.7)
 
 BUNDLED WITH
    2.5.22
index 8667fb5129161efca38295559202e64fd86475b4..cb54cb5433af361824a542220ae8850636ea36db 100644 (file)
@@ -22,7 +22,7 @@ of packages required before you can get the various gems installed.
 
 ## Minimum requirements
 
-* Ruby 3.1+
+* Ruby 3.2+
 * PostgreSQL 13+
 * Bundler (see note below about [developer Ruby setup](#rbenv))
 * Javascript Runtime
index dd377a727c817d275fa97d5339aef32904c178ab..7f47b578cb5f9bffb2e8b5805f1a591c8acd2322 100644 (file)
@@ -36,7 +36,7 @@ class Ability
         can [:read, :create, :update, :destroy], :oauth2_application
         can [:read, :destroy], :oauth2_authorized_application
         can [:read, :create, :destroy], :oauth2_authorization
-        can [:update, :destroy], :account
+        can [:read, :update, :destroy], :account
         can :update, :account_terms
         can :create, :account_pd_declaration
         can :read, :dashboard
index edf051faeb8f324b1a1767bbafeff07149dd222b..ef852b69fe72f48cde9434c74235f54fd0fff0a4 100644 (file)
@@ -10,7 +10,7 @@ class ApiAbility
       can [:read, :feed, :search], Note
       can :create, Note unless user
 
-      can [:read, :download], Changeset
+      can :read, Changeset
       can :read, ChangesetComment
       can :read, Tracepoint
       can :read, User
@@ -40,7 +40,7 @@ class ApiAbility
         end
 
         if user.moderator?
-          can [:destroy, :restore], ChangesetComment if scopes.include?("write_changeset_comments")
+          can [:create, :destroy], :changeset_comment_visibility if scopes.include?("write_changeset_comments")
 
           can :destroy, Note if scopes.include?("write_notes")
 
index 0826e884111722c8073ed11e9a6e0aa4f2831c4b..2e97cebc3247e3f4ac25aa90401d67dec766422c 100644 (file)
@@ -1,43 +1,18 @@
 {
        "name": "OpenStreetMap",
-       "icons": [
-               {
-                       "src": "<%= image_path("android-chrome-36x36.png").gsub("/", "\\/") %>",
-                       "sizes": "36x36",
-                       "type": "image\/png",
-                       "density": "0.75"
-               },
-               {
-                       "src": "<%= image_path("android-chrome-48x48.png").gsub("/", "\\/") %>",
-                       "sizes": "48x48",
-                       "type": "image\/png",
-                       "density": "1.0"
-               },
-               {
-                       "src": "<%= image_path("android-chrome-72x72.png").gsub("/", "\\/") %>",
-                       "sizes": "72x72",
-                       "type": "image\/png",
-                       "density": "1.5"
-               },
-               {
-                       "src": "<%= image_path("android-chrome-96x96.png").gsub("/", "\\/") %>",
-                       "sizes": "96x96",
-                       "type": "image\/png",
-                       "density": "2.0"
-               },
-               {
-                       "src": "<%= image_path("android-chrome-144x144.png").gsub("/", "\\/") %>",
-                       "sizes": "144x144",
-                       "type": "image\/png",
-                       "density": "3.0"
-               },
-               {
-                       "src": "<%= image_path("android-chrome-192x192.png").gsub("/", "\\/") %>",
-                       "sizes": "192x192",
-                       "type": "image\/png",
-                       "density": "4.0"
-               }
-       ],
+       "short_name": "OSM",
+       "icons": <%= [36, 48, 72, 96, 144, 192].map { |res| {
+                       src: image_path("android-chrome-#{res}x#{res}.png"),
+                       sizes: "#{res}x#{res}",
+                       type: "image/png",
+                       density: res.to_f / 48
+               } }.push({
+                       src: image_path("../images/osm_logo.svg"),
+                       sizes: "any",
+                       type: "image/svg+xml"
+               }).to_json %>,
        "start_url": "/",
+       "theme_color": "#7ebc6f",
+       "background_color": "#fff",
        "display": "minimal-ui"
 }
index a3fd93e27c1daaa3cd08a5881f6d266cf6e16e1b..e07830d4ea7c7a010ffe5426732298997c5249aa 100644 (file)
@@ -84,7 +84,7 @@ window.updateLinks = function (loc, zoom, layers, object) {
     .toggleClass("disabled", editDisabled);
 };
 
-$(document).ready(function () {
+$(function () {
   // NB: Turns Turbo Drive off by default. Turbo Drive must be opt-in on a per-link and per-form basis
   // See https://turbo.hotwired.dev/reference/drive#turbo.session.drive
   Turbo.session.drive = false;
@@ -95,6 +95,9 @@ $(document).ready(function () {
         breakpointWidth = 768;
   let moreItemWidth = 0;
 
+  OSM.csrf = {};
+  OSM.csrf[($("meta[name=csrf-param]").attr("content"))] = $("meta[name=csrf-token]").attr("content");
+
   function updateHeader() {
     const windowWidth = $(window).width();
 
index 18c3e38e0776d85228ce73af56dbc5ee6a16fe61..3c294825374c79b675b243fcf090a9c1b502e276 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   // Attach referer to authentication buttons
   $(".auth_button").each(function () {
     const params = new URLSearchParams(this.search);
index e55d0900d0b13a9e7d6081a6998043fa74784aeb..a87eb35f18664ad1ac61248024c7fa57937109da 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   let marker, map;
 
   function setLocation(e) {
index 7c907ed3a3496d2419179de705791c5f2182f740..7d13dcfbba518b25a21ceb3afc1846e3c738d223 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   const id = $("#id-embed"),
         idData = id.data();
 
@@ -13,15 +13,18 @@ $(document).ready(function () {
   const hashArgs = OSM.parseHash(location.hash);
   const mapParams = OSM.mapParams();
   const params = new URLSearchParams();
-  let { zoom, lat, lon } = mapParams;
+  let zoom, lat, lon;
 
+  if (idData.lat && idData.lon) {
+    ({ zoom, lat, lon } = idData);
+  } else if (!mapParams.object) {
+    ({ zoom, lat, lon } = mapParams);
+  }
   if (mapParams.object) {
     params.set("id", mapParams.object.type + "/" + mapParams.object.id);
     if (hashArgs.center) ({ zoom, center: { lat, lng: lon } } = hashArgs);
-  } else if (idData.lat && idData.lon) {
-    ({ zoom, lat, lon } = { zoom: 16, ...idData });
   }
-  params.set("map", [zoom || 17, lat, lon].join("/"));
+  if (lat && lon) params.set("map", [zoom || 17, lat, lon].join("/"));
 
   const passThroughKeys = ["background", "comment", "disable_features", "gpx", "hashtags", "locale", "maprules", "notes", "offset", "photo", "photo_dates", "photo_overlay", "photo_username", "presets", "source", "validationDisable", "validationWarning", "validationError", "walkthrough"];
   for (const key of passThroughKeys) {
index aff13add80debee64834bcf9b8852a0c4201840e..7596e89a438dd3aa29ff17dedc4057167f05a12c 100644 (file)
@@ -16,7 +16,7 @@ I18n.default_locale = <%= I18n.default_locale.to_json %>;
 I18n.fallbacks = true;
 
 window.onload = function () {
-  const args = Object.fromEntries(new URLSearchParams(window.location.search));
+  const args = Object.fromEntries(new URLSearchParams(location.search));
 
   const tileOptions = {
     mapnik: {
index 2b3101db4bdab0fc90f587735b288a0d53c1539c..46afb0f6896a80807e59ee8841c56640f7299bbd 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   const params = OSM.params();
 
   let url = "/note/new";
index 96870f600869ab92c99a550820eeaecf499edebc..c5bddbaec058a714d2f01ded486cee431a3a1955 100644 (file)
@@ -24,7 +24,7 @@
 //= require index/home
 //= require router
 
-$(document).ready(function () {
+$(function () {
   const map = new L.OSM.Map("map", {
     zoomControl: false,
     layerControl: false,
@@ -311,7 +311,7 @@ $(document).ready(function () {
     };
 
     function addObject(type, id, version, center) {
-      const hashParams = OSM.parseHash(window.location.hash);
+      const hashParams = OSM.parseHash(location.hash);
       map.addObject({ type: type, id: parseInt(id, 10), version: version && parseInt(version, 10) }, function (bounds) {
         if (!hashParams.center && bounds.isValid() &&
             (center || !map.getBounds().contains(bounds))) {
@@ -363,7 +363,7 @@ $(document).ready(function () {
     "/account/home": OSM.Home(map)
   });
 
-  if (OSM.preferred_editor === "remote" && document.location.pathname === "/edit") {
+  if (OSM.preferred_editor === "remote" && location.pathname === "/edit") {
     remoteEditHandler(map.getBounds(), params.object);
     OSM.router.setCurrentPath("/");
   }
index 6c1c6a2df7a2df382120f7c23da38b2cf4be859f..6feefbc2dc0217d7645de3f0b8464a8b1d355a19 100644 (file)
@@ -12,7 +12,7 @@ OSM.Changeset = function (map) {
     const changesetData = content.find("[data-changeset]").data("changeset");
     changesetData.type = "changeset";
 
-    const hashParams = OSM.parseHash(window.location.hash);
+    const hashParams = OSM.parseHash(location.hash);
     initialize();
     map.addObject(changesetData, function (bounds) {
       if (!hashParams.center && bounds.isValid()) {
@@ -45,7 +45,7 @@ OSM.Changeset = function (map) {
         });
       })
       .then(() => {
-        OSM.loadSidebarContent(window.location.pathname, page.load);
+        OSM.loadSidebarContent(location.pathname, page.load);
       })
       .catch(error => {
         content.find("button[data-method][data-url]").prop("disabled", false);
index 90e95857ff9dcd5c50a21df6c4999e80ecf83605..0b52d3d4c2c41b3063278207199d0bd9935d5e70 100644 (file)
@@ -104,7 +104,13 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
     const viewbox = map.getBounds().toBBoxString(), // <sw lon>,<sw lat>,<ne lon>,<ne lat>
           geocodeUrl = OSM.NOMINATIM_URL + "search?" + new URLSearchParams({ q: endpoint.value, format: "json", viewbox });
 
-    endpoint.geocodeRequest = $.getJSON(geocodeUrl, function (json) {
+    endpoint.geocodeRequest = new AbortController();
+    fetch(geocodeUrl, { signal: endpoint.geocodeRequest.signal })
+      .then(r => r.json())
+      .then(success)
+      .catch(() => {});
+
+    function success(json) {
       delete endpoint.geocodeRequest;
       if (json.length === 0) {
         input.addClass("is-invalid");
@@ -119,7 +125,7 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
       input.val(json[0].display_name);
 
       changeCallback();
-    });
+    }
   }
 
   function getReverseGeocode() {
@@ -127,7 +133,13 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
           { lat, lng } = latlng,
           reverseGeocodeUrl = OSM.NOMINATIM_URL + "reverse?" + new URLSearchParams({ lat, lon: lng, format: "json" });
 
-    endpoint.geocodeRequest = $.getJSON(reverseGeocodeUrl, function (json) {
+    endpoint.geocodeRequest = new AbortController();
+    fetch(reverseGeocodeUrl, { signal: endpoint.geocodeRequest.signal })
+      .then(r => r.json())
+      .then(success)
+      .catch(() => {});
+
+    function success(json) {
       delete endpoint.geocodeRequest;
       if (!json || !json.display_name) {
         endpoint.cachedReverseGeocode = { latlng: latlng, notFound: true };
@@ -137,7 +149,7 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
       endpoint.value = json.display_name;
       input.val(json.display_name);
       endpoint.cachedReverseGeocode = { latlng: latlng, value: endpoint.value };
-    });
+    }
   }
 
   function setLatLng(ll) {
index 2338f537f581224b3e141636e83b662857de8236..40ca85d960fc6f0d29504761a1bb8eeb2b4ab581 100644 (file)
@@ -4,6 +4,7 @@
 
 OSM.Directions = function (map) {
   let controller = null; // the AbortController for the current route request if a route request is in progress
+  let lastLocation = [];
   let chosenEngine;
 
   const popup = L.popup({ autoPanPadding: [100, 100] });
@@ -36,23 +37,14 @@ OSM.Directions = function (map) {
     OSM.DirectionsEndpoint(map, $("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointChangeCallback)
   ];
 
+  let downloadURL = null;
+
   const expiry = new Date();
   expiry.setYear(expiry.getFullYear() + 10);
 
-  const engines = OSM.Directions.engines;
-
-  engines.sort(function (a, b) {
-    const localised_a = I18n.t("javascripts.directions.engines." + a.id),
-          localised_b = I18n.t("javascripts.directions.engines." + b.id);
-    return localised_a.localeCompare(localised_b);
-  });
-
+  const modeGroup = $(".routing_modes");
   const select = $("select.routing_engines");
 
-  engines.forEach(function (engine, i) {
-    select.append("<option value='" + i + "'>" + I18n.t("javascripts.directions.engines." + engine.id) + "</option>");
-  });
-
   $(".directions_form .reverse_directions").on("click", function () {
     const coordFrom = endpoints[0].latlng,
           coordTo = endpoints[1].latlng;
@@ -73,8 +65,8 @@ OSM.Directions = function (map) {
 
   $(".directions_form .btn-close").on("click", function (e) {
     e.preventDefault();
-    $(".describe_location").toggle(!endpoints[0].value);
-    $(".search_form input[name='query']").val(endpoints[0].value);
+    $(".describe_location").toggle(!endpoints[1].value);
+    $(".search_form input[name='query']").val(endpoints[1].value);
     OSM.router.route("/" + OSM.formatHash(map));
   });
 
@@ -96,15 +88,33 @@ OSM.Directions = function (map) {
     return h + ":" + (m < 10 ? "0" : "") + m;
   }
 
-  function findEngine(id) {
-    return engines.findIndex(function (engine) {
-      return engine.id === id;
-    });
-  }
+  function setEngine(id) {
+    const engines = OSM.Directions.engines;
+    const desired = engines.find(engine => engine.id === id);
+    if (!desired || (chosenEngine && chosenEngine.id === id)) return;
+    chosenEngine = desired;
+
+    const modes = engines
+      .filter(engine => engine.provider === chosenEngine.provider)
+      .map(engine => engine.mode);
+    modeGroup
+      .find("input[id]")
+      .prop("disabled", function () {
+        return !modes.includes(this.id);
+      })
+      .prop("checked", function () {
+        return this.id === chosenEngine.mode;
+      });
 
-  function setEngine(index) {
-    chosenEngine = engines[index];
-    select.val(index);
+    const providers = engines
+      .filter(engine => engine.mode === chosenEngine.mode)
+      .map(engine => engine.provider);
+    select
+      .find("option[value]")
+      .prop("disabled", function () {
+        return !providers.includes(this.value);
+      });
+    select.val(chosenEngine.provider);
   }
 
   function getRoute(fitRoute, reportErrors) {
@@ -189,6 +199,16 @@ OSM.Directions = function (map) {
         turnByTurnTable.append(row);
       });
 
+      const blob = new Blob([JSON.stringify(polyline.toGeoJSON())], { type: "application/json" });
+      URL.revokeObjectURL(downloadURL);
+      downloadURL = URL.createObjectURL(blob);
+
+      $("#sidebar_content").append(`<p class="text-center"><a href="${downloadURL}" download="${
+        I18n.t("javascripts.directions.filename")
+      }">${
+        I18n.t("javascripts.directions.download")
+      }</a></p>`);
+
       $("#sidebar_content").append("<p class=\"text-center\">" +
         I18n.t("javascripts.directions.instructions.courtesy", { link: chosenEngine.creditline }) +
         "</p>");
@@ -218,14 +238,17 @@ OSM.Directions = function (map) {
     }
   }
 
-  let chosenEngineIndex = findEngine("fossgis_osrm_car");
-  if (Cookies.get("_osm_directions_engine")) {
-    chosenEngineIndex = findEngine(Cookies.get("_osm_directions_engine"));
-  }
-  setEngine(chosenEngineIndex);
+  setEngine("fossgis_osrm_car");
+  setEngine(Cookies.get("_osm_directions_engine"));
+
+  modeGroup.on("change", "input[name='modes']", function (e) {
+    setEngine(chosenEngine.provider + "_" + e.target.id);
+    Cookies.set("_osm_directions_engine", chosenEngine.id, { secure: true, expires: expiry, path: "/", samesite: "lax" });
+    getRoute(true, true);
+  });
 
   select.on("change", function (e) {
-    chosenEngine = engines[e.target.selectedIndex];
+    setEngine(e.target.value + "_" + chosenEngine.mode);
     Cookies.set("_osm_directions_engine", chosenEngine.id, { secure: true, expires: expiry, path: "/", samesite: "lax" });
     getRoute(true, true);
   });
@@ -246,6 +269,21 @@ OSM.Directions = function (map) {
     }
   });
 
+  function sendstartinglocation({ latlng: { lat, lng } }) {
+    map.fire("startinglocation", { latlng: [lat, lng] });
+  }
+
+  function startingLocationListener({ latlng }) {
+    if (endpoints[0].value) return;
+    endpoints[0].setValue(latlng.join(", "));
+  }
+
+  map.on("locationfound", ({ latlng: { lat, lng } }) =>
+    lastLocation = [lat, lng]
+  ).on("locateactivate", () => {
+    map.once("startinglocation", startingLocationListener);
+  });
+
   const page = {};
 
   page.pushstate = page.popstate = function () {
@@ -268,21 +306,17 @@ OSM.Directions = function (map) {
       endpoints[type === "from" ? 0 : 1].setValue(llWithPrecision.join(", "));
     });
 
+    map.on("locationfound", sendstartinglocation);
+
     endpoints[0].enable();
     endpoints[1].enable();
 
     const params = new URLSearchParams(location.search),
           route = (params.get("route") || "").split(";");
 
-    if (params.has("engine")) {
-      const engineIndex = findEngine(params.get("engine"));
-
-      if (engineIndex >= 0) {
-        setEngine(engineIndex);
-      }
-    }
+    if (params.has("engine")) setEngine(params.get("engine"));
 
-    endpoints[0].setValue(params.get("from") || route[0] || "");
+    endpoints[0].setValue(params.get("from") || route[0] || lastLocation.join(", "));
     endpoints[1].setValue(params.get("to") || route[1] || "");
 
     map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng);
@@ -296,6 +330,7 @@ OSM.Directions = function (map) {
     $(".search_form").show();
     $(".directions_form").hide();
     $("#map").off("dragend dragover drop");
+    map.off("locationfound", sendstartinglocation);
 
     endpoints[0].disable();
     endpoints[1].disable();
@@ -311,7 +346,8 @@ OSM.Directions = function (map) {
 OSM.Directions.engines = [];
 
 OSM.Directions.addEngine = function (engine, supportsHTTPS) {
-  if (document.location.protocol === "http:" || supportsHTTPS) {
+  if (location.protocol === "http:" || supportsHTTPS) {
+    engine.id = engine.provider + "_" + engine.mode;
     OSM.Directions.engines.push(engine);
   }
 };
index cd1731247f70c650e3bd49c5341f5f589fd92f4a..2332049befc14691a1843b4d6e78bb3804132122 100644 (file)
@@ -2,7 +2,7 @@
 // Doesn't yet support hints
 
 (function () {
-  function FOSSGISOSRMEngine(id, vehicleType) {
+  function FOSSGISOSRMEngine(modeId, vehicleType) {
     let cachedHints = [];
 
     function _processDirections(route) {
     }
 
     return {
-      id: id,
+      mode: modeId,
+      provider: "fossgis_osrm",
       creditline: "<a href=\"https://routing.openstreetmap.de/about.html\" target=\"_blank\">OSRM (FOSSGIS)</a>",
       draggable: true,
 
     };
   }
 
-  OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_car", "car"), true);
-  OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_bike", "bike"), true);
-  OSM.Directions.addEngine(new FOSSGISOSRMEngine("fossgis_osrm_foot", "foot"), true);
+  OSM.Directions.addEngine(new FOSSGISOSRMEngine("car", "car"), true);
+  OSM.Directions.addEngine(new FOSSGISOSRMEngine("bicycle", "bike"), true);
+  OSM.Directions.addEngine(new FOSSGISOSRMEngine("foot", "foot"), true);
 }());
index 41ad6a9725fcb332b3ec63030f36fad0f3c60343..11aa4470b4dfbf64d7204d3dd0aec78890e26168 100644 (file)
@@ -1,5 +1,5 @@
 (function () {
-  function FOSSGISValhallaEngine(id, costing) {
+  function FOSSGISValhallaEngine(modeId, costing) {
     const INSTR_MAP = [
       0, // kNone = 0;
       8, // kStart = 1;
@@ -82,7 +82,8 @@
     }
 
     return {
-      id: id,
+      mode: modeId,
+      provider: "fossgis_valhalla",
       creditline:
       "<a href='https://gis-ops.com/global-open-valhalla-server-online/' target='_blank'>Valhalla (FOSSGIS)</a>",
       draggable: false,
     };
   }
 
-  OSM.Directions.addEngine(new FOSSGISValhallaEngine("fossgis_valhalla_car", "auto"), true);
-  OSM.Directions.addEngine(new FOSSGISValhallaEngine("fossgis_valhalla_bicycle", "bicycle"), true);
-  OSM.Directions.addEngine(new FOSSGISValhallaEngine("fossgis_valhalla_foot", "pedestrian"), true);
+  OSM.Directions.addEngine(new FOSSGISValhallaEngine("car", "auto"), true);
+  OSM.Directions.addEngine(new FOSSGISValhallaEngine("bicycle", "bicycle"), true);
+  OSM.Directions.addEngine(new FOSSGISValhallaEngine("foot", "pedestrian"), true);
 }());
index 729618f2d596441597482dea5f159f99f09357b4..b3194d16c17388240663b18e2a3dcc258fda3ac4 100644 (file)
@@ -1,5 +1,5 @@
 (function () {
-  function GraphHopperEngine(id, vehicleType) {
+  function GraphHopperEngine(modeId, vehicleType) {
     const GH_INSTR_MAP = {
       "-3": 7, // sharp left
       "-2": 6, // left
@@ -47,7 +47,8 @@
     }
 
     return {
-      id: id,
+      mode: modeId,
+      provider: "graphhopper",
       creditline: "<a href=\"https://www.graphhopper.com/\" target=\"_blank\">GraphHopper</a>",
       draggable: false,
 
@@ -73,7 +74,7 @@
     };
   }
 
-  OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_car", "car"), true);
-  OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_bicycle", "bike"), true);
-  OSM.Directions.addEngine(new GraphHopperEngine("graphhopper_foot", "foot"), true);
+  OSM.Directions.addEngine(new GraphHopperEngine("car", "car"), true);
+  OSM.Directions.addEngine(new GraphHopperEngine("bicycle", "bike"), true);
+  OSM.Directions.addEngine(new GraphHopperEngine("foot", "foot"), true);
 }());
index c36ae5f185683d58eddf99946e90bab7bd1bcc3c..6e4e73a23fa7e5564bcad943a6b78f4111a96680 100644 (file)
@@ -58,7 +58,7 @@ OSM.History = function (map) {
   function update() {
     const data = new URLSearchParams();
 
-    if (window.location.pathname === "/history") {
+    if (location.pathname === "/history") {
       data.set("bbox", map.getBounds().wrap().toBBoxString());
       const feedLink = $("link[type=\"application/atom+xml\"]"),
             feedHref = feedLink.attr("href").split("?")[0];
@@ -67,7 +67,7 @@ OSM.History = function (map) {
 
     data.set("list", "1");
 
-    fetch(window.location.pathname + "?" + data)
+    fetch(location.pathname + "?" + data)
       .then(response => response.text())
       .then(function (html) {
         displayFirstChangesets(html);
@@ -137,7 +137,7 @@ OSM.History = function (map) {
 
     updateBounds();
 
-    if (window.location.pathname !== "/history") {
+    if (location.pathname !== "/history") {
       const bounds = group.getBounds();
       if (bounds.isValid()) map.fitBounds(bounds);
     }
@@ -150,7 +150,7 @@ OSM.History = function (map) {
   page.load = function () {
     map.addLayer(group);
 
-    if (window.location.pathname === "/history") {
+    if (location.pathname === "/history") {
       map.on("moveend", update);
     }
 
index b9310a1af9e159d159dcef7254988d8623dc3983..3e8cbce1ba7870da38c2d4e070222a84c154a806 100644 (file)
@@ -79,7 +79,7 @@ OSM.Note = function (map) {
     const data = $(".details").data();
 
     if (data) {
-      const hashParams = OSM.parseHash(window.location.hash);
+      const hashParams = OSM.parseHash(location.hash);
       map.addObject({
         type: "note",
         id: parseInt(id, 10),
index ee9d3f41560c9a6ef9441b9fcac2d36dc1c13154..c0395c70182438a55854a8ce2068f552807d2f6b 100644 (file)
@@ -326,7 +326,7 @@ OSM.Query = function (map) {
     const params = new URLSearchParams(path.substring(path.indexOf("?"))),
           latlng = L.latLng(params.get("lat"), params.get("lon"));
 
-    if (!window.location.hash && !noCentre && !map.getBounds().contains(latlng)) {
+    if (!location.hash && !noCentre && !map.getBounds().contains(latlng)) {
       OSM.router.withoutMoveListener(function () {
         map.setView(latlng, 15);
       });
index 42294576b7bb0fba584a1c181107b9c66f06db7a..b3ef3ceb3c13de3d4a7dbad7b4d8f7a313719000 100644 (file)
@@ -11,7 +11,7 @@ OSM.Search = function (map) {
     e.preventDefault();
     const query = $(this).closest("form").find("input[name=query]").val();
     let search = "";
-    if (query) search = "?" + new URLSearchParams({ from: query });
+    if (query) search = "?" + new URLSearchParams({ to: query });
     OSM.router.route("/directions" + search + OSM.formatHash(map));
   });
 
@@ -44,19 +44,14 @@ OSM.Search = function (map) {
     e.preventDefault();
     e.stopPropagation();
 
-    const div = $(this).parents(".search_more"),
-          csrf_param = $("meta[name=csrf-param]").attr("content"),
-          csrf_token = $("meta[name=csrf-token]").attr("content"),
-          params = new URLSearchParams();
+    const div = $(this).parents(".search_more");
 
     $(this).hide();
     div.find(".loader").show();
 
-    params.set(csrf_param, csrf_token);
-
     fetch($(this).attr("href"), {
       method: "POST",
-      body: params
+      body: new URLSearchParams(OSM.csrf)
     })
       .then(response => response.text())
       .then(data => div.replaceWith(data));
@@ -120,20 +115,17 @@ OSM.Search = function (map) {
 
   page.load = function () {
     $(".search_results_entry").each(function (index) {
-      const entry = $(this),
-            csrf_param = $("meta[name=csrf-param]").attr("content"),
-            csrf_token = $("meta[name=csrf-token]").attr("content"),
-            params = new URLSearchParams({
-              zoom: map.getZoom(),
-              minlon: map.getBounds().getWest(),
-              minlat: map.getBounds().getSouth(),
-              maxlon: map.getBounds().getEast(),
-              maxlat: map.getBounds().getNorth()
-            });
-      params.set(csrf_param, csrf_token);
+      const entry = $(this);
       fetch(entry.data("href"), {
         method: "POST",
-        body: params
+        body: new URLSearchParams({
+          zoom: map.getZoom(),
+          minlon: map.getBounds().getWest(),
+          minlat: map.getBounds().getSouth(),
+          maxlon: map.getBounds().getEast(),
+          maxlat: map.getBounds().getNorth(),
+          ...OSM.csrf
+        })
       })
         .then(response => response.text())
         .then(function (html) {
index 937d9b0528127754462ac1b71874446507f4712d..45d22feede8f2eec566bbd05a996d195410b4327 100644 (file)
@@ -16,7 +16,10 @@ L.OSM.key = function (options) {
 
     function shown() {
       map.on("zoomend baselayerchange", update);
-      $section.load("/key", update);
+      fetch("/key")
+        .then(r => r.text())
+        .then(html => { $section.html(html); })
+        .then(update);
     }
 
     function hidden() {
index 34c0bd449174a962e61124d3bd14f575999112ce..6adf2138d79c65c3826a10bce5b82a9617e0e3eb 100644 (file)
@@ -155,7 +155,7 @@ L.OSM.Map = L.Map.extend({
       [params.mlat, params.mlon] = OSM.cropLocation(marker.getLatLng(), this.getZoom());
     }
 
-    let url = window.location.protocol + "//" + OSM.SERVER_URL + "/";
+    let url = location.protocol + "//" + OSM.SERVER_URL + "/";
     const query = new URLSearchParams(params),
           hash = OSM.formatHash(this);
 
@@ -176,7 +176,7 @@ L.OSM.Map = L.Map.extend({
           // and drops the last 4 bits of the full 64 bit Morton code.
           c1 = interlace(x >>> 17, y >>> 17),
           c2 = interlace((x >>> 2) & 0x7fff, (y >>> 2) & 0x7fff);
-    let str = window.location.protocol + "//" + window.location.hostname.replace(/^www\.openstreetmap\.org/i, "osm.org") + "/go/";
+    let str = location.protocol + "//" + location.hostname.replace(/^www\.openstreetmap\.org/i, "osm.org") + "/go/";
 
     for (let i = 0; i < Math.ceil((zoom + 8) / 3.0) && i < 5; ++i) {
       const digit = (c1 >> (24 - (6 * i))) & 0x3f;
index 325b168b2637aaf973da902cab3a5fe69f8b1b85..d84f8820e3e0a37966470cc8ac43c88bf9dabd1f 100644 (file)
@@ -159,6 +159,7 @@ L.OSM.share = function (options) {
           .attr("class", "form-select w-auto")
           .append($("<option>").val("png").text("PNG").prop("selected", true))
           .append($("<option>").val("jpeg").text("JPEG"))
+          .append($("<option>").val("webp").text("WEBP"))
           .append($("<option>").val("svg").text("SVG"))
           .append($("<option>").val("pdf").text("PDF"))));
 
@@ -227,13 +228,11 @@ L.OSM.share = function (options) {
         .appendTo($form);
     }
 
-    const csrf_param = $("meta[name=csrf-param]").attr("content"),
-          csrf_token = $("meta[name=csrf-token]").attr("content");
+    const csrfAttrs = { type: "hidden" };
+    [[csrfAttrs.name, csrfAttrs.value]] = Object.entries(OSM.csrf);
 
     $("<input>")
-      .attr("name", csrf_param)
-      .attr("value", csrf_token)
-      .attr("type", "hidden")
+      .attr(csrfAttrs)
       .appendTo($form);
 
     const args = {
index 83ca4d440dd3b238797529b252a6684b5729dca6..8297944f3720ff769043899715adcd655d765b80 100644 (file)
@@ -1,6 +1,6 @@
-$(document).ready(function () {
+$(function () {
   // Preserve location hash in referer
-  if (window.location.hash) {
-    $("#referer").val($("#referer").val() + window.location.hash);
+  if (location.hash) {
+    $("#referer").val($("#referer").val() + location.hash);
   }
 });
index 4ed3de941bfc05255f5bc33f228a00fb2c822c76..239cf12807c04cfce356dac5b91c7ca07f953006 100644 (file)
@@ -1,6 +1,6 @@
 if (OSM.MATOMO) {
-  $(document).ready(function () {
-    const base = document.location.protocol + "//" + OSM.MATOMO.location + "/";
+  $(function () {
+    const base = location.protocol + "//" + OSM.MATOMO.location + "/";
     let matomoTracker;
 
     const matomoLoader = $.ajax({
index 0f5933eba5425582ecc516affc7d92e775cbd480..bd6e921b6f44571f08fe8bf1db885a1580883dee 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   $(".messages-table .destroy-message").on("turbo:submit-end", function (event) {
     if (event.detail.success) {
       event.target.dataset.isDestroyed = true;
index 25d6596c2cd6fb160ef54bdba6641ee79e6c8a76..a40ae6eb87995c1d031cf03330bcae422af0a58b 100644 (file)
@@ -57,7 +57,7 @@ OSM = {
   },
 
   params: function (search) {
-    const query = search || window.location.search;
+    const query = search || location.search;
     return Object.fromEntries(new URLSearchParams(query));
   },
 
index eb13392eb5039c22b9694d10810748d199cb715f..d4b59cadc8241047b2520f9a4831514ba18d9599 100644 (file)
     if (preview.children(".richtext").contents().length === 0) {
       preview.children(".richtext_placeholder").removeAttr("hidden").addClass("delayed-fade-in");
 
-      preview.children(".richtext").load(editor.data("previewUrl"), { text: editor.val() }, function () {
-        preview.children(".richtext_placeholder").attr("hidden", true).removeClass("delayed-fade-in");
-      });
+      fetch(editor.data("previewUrl"), {
+        method: "POST",
+        body: new URLSearchParams({ text: editor.val(), ...OSM.csrf })
+      })
+        .then(r => r.text())
+        .then(html => {
+          preview.children(".richtext").html(html);
+          preview.children(".richtext_placeholder").attr("hidden", true).removeClass("delayed-fade-in");
+        });
     }
   });
 
index 2e4b375d79691b0bd7253fce4bcf8671530465b9..22795195cd06660c2593aa44abc741e7fb7c40a4 100644 (file)
@@ -93,7 +93,7 @@ OSM.Router = function (map, rts) {
     }
   };
 
-  let currentPath = window.location.pathname.replace(/(.)\/$/, "$1") + window.location.search,
+  let currentPath = location.pathname.replace(/(.)\/$/, "$1") + location.search,
       currentRoute = routes.recognize(currentPath),
       currentHash = location.hash || OSM.formatHash(map);
 
@@ -101,7 +101,7 @@ OSM.Router = function (map, rts) {
 
   function updateSecondaryNav() {
     $("header nav.secondary > ul > li > a").each(function () {
-      const active = $(this).attr("href") === window.location.pathname;
+      const active = $(this).attr("href") === location.pathname;
 
       $(this)
         .toggleClass("text-secondary", !active)
@@ -111,7 +111,7 @@ OSM.Router = function (map, rts) {
 
   $(window).on("popstate", function (e) {
     if (!e.originalEvent.state) return; // Is it a real popstate event or just a hash change?
-    const path = window.location.pathname + window.location.search,
+    const path = location.pathname + location.search,
           route = routes.recognize(path);
     if (path === currentPath) return;
     currentRoute.run("unload", null, route === currentRoute);
@@ -142,7 +142,7 @@ OSM.Router = function (map, rts) {
   };
 
   router.stateChange = function (state) {
-    const url = state.center ? OSM.formatHash(state) : window.location;
+    const url = state.center ? OSM.formatHash(state) : location;
     window.history.replaceState(state, document.title, url);
   };
 
index b118c1d3b7f1e9ad302ce97a893fa4a172b581a0..1731945217731acbea478c10e94e1f10345fd43c 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   function openShareUrl(url, initialWidth = 640, initialHeight = 480) {
     const width = Math.max(100, Math.min(screen.width, initialWidth));
     const height = Math.max(100, Math.min(screen.height, initialHeight));
index 2af9e18cbd06b37b2e9f8165bc2aad7baae08ce4..f3fe02e0c55ac714435ca5b04046385e44b2da29 100644 (file)
@@ -6,7 +6,7 @@
   });
 }());
 
-$(document).ready(function () {
+$(function () {
   const defaultHomeZoom = 12;
   let map, marker, deleted_lat, deleted_lon;
 
@@ -210,10 +210,10 @@ $(document).ready(function () {
   });
 
   $("input[name=legale]").change(function () {
-    const url = $(this).data("url");
-
     $("#contributorTerms").html("<div class='spinner-border' role='status'><span class='visually-hidden'>" + I18n.t("browse.start_rjs.loading") + "</span></div>");
-    $("#contributorTerms").load(url);
+    fetch($(this).data("url"))
+      .then(r => r.text())
+      .then(html => { $("#contributorTerms").html(html); });
   });
 
   $("#read_ct").on("click", function () {
index 3e2845bb3bda0e8a0404a30661cd1e07f27f377c..aa94ca295e941720c483fbe6bbb65ac95675821f 100644 (file)
@@ -1,4 +1,4 @@
-$(document).ready(function () {
+$(function () {
   const params = OSM.params();
 
   if (params.lat && params.lon) {
@@ -27,7 +27,7 @@ $(document).ready(function () {
   }
 
   function geoSuccess(position) {
-    window.location = "/edit" + OSM.formatHash({
+    location = "/edit" + OSM.formatHash({
       zoom: 17,
       lat: position.coords.latitude,
       lon: position.coords.longitude
@@ -35,6 +35,6 @@ $(document).ready(function () {
   }
 
   function manualEdit() {
-    window.location = "/?edit_help=1";
+    location = "/?edit_help=1";
   }
 });
index a27976854f99dc90af33a7878e326ccdff9413f8..c1728f870220b78a4229a10a9fc2b118d0d14fe0 100644 (file)
@@ -233,6 +233,7 @@ body.small-nav {
 
     > ul {
       height: auto;
+      justify-content: center;
     }
 
     .user-menu, .login-menu {
index 2d2569d62b0adb342a50ce35f53289745b4d3652..4a636a8880c76275f598ecc6e740a05e35008850 100644 (file)
@@ -22,7 +22,7 @@ module Accounts
         end
       end
 
-      redirect_to edit_account_path
+      redirect_to account_path
     end
   end
 end
index 03007a5323f6788152d37eeb43eff5aa40a9dde0..568abcdb96d84a8ab74360c237c0084a71616680 100644 (file)
@@ -21,7 +21,7 @@ module Accounts
 
         if current_user.terms_agreed?
           # Already agreed to terms, so just show settings
-          redirect_to edit_account_path
+          redirect_to account_path
         end
       end
     end
@@ -43,7 +43,7 @@ module Accounts
 
       referer = safe_referer(params[:referer]) if params[:referer]
 
-      redirect_to referer || edit_account_path
+      redirect_to referer || account_path
     end
   end
 end
index d02943640147a37476832d74fed15a107a314af2..e2a82c20edc154b8c4c4aa625ac583e153d8be2c 100644 (file)
@@ -12,10 +12,10 @@ class AccountsController < ApplicationController
   before_action :check_database_readable
   before_action :check_database_writable, :only => [:update]
 
-  allow_thirdparty_images :only => [:edit, :update]
-  allow_social_login :only => [:edit, :update]
+  allow_thirdparty_images :only => [:show, :update]
+  allow_social_login :only => [:show, :update]
 
-  def edit
+  def show
     if errors = session.delete(:user_errors)
       errors.each do |attribute, error|
         current_user.errors.add(attribute, error)
@@ -32,9 +32,9 @@ class AccountsController < ApplicationController
         params[:user][:auth_uid] == current_user.auth_uid)
       update_user(current_user, user_params)
       if current_user.errors.empty?
-        redirect_to edit_account_path
+        redirect_to account_path
       else
-        render :edit
+        render :show
       end
     else
       session[:new_user_settings] = user_params.to_h
diff --git a/app/controllers/api/changeset_comments/visibilities_controller.rb b/app/controllers/api/changeset_comments/visibilities_controller.rb
new file mode 100644 (file)
index 0000000..397872c
--- /dev/null
@@ -0,0 +1,60 @@
+module Api
+  module ChangesetComments
+    class VisibilitiesController < ApiController
+      before_action :check_api_writable
+      before_action :authorize
+
+      authorize_resource :class => :changeset_comment_visibility
+
+      before_action :set_request_formats
+
+      ##
+      # Sets visible flag on comment to true
+      def create
+        # Check the arguments are sane
+        raise OSM::APIBadUserInput, "No id was given" unless params[:changeset_comment_id]
+
+        # Extract the arguments
+        changeset_comment_id = params[:changeset_comment_id].to_i
+
+        # Find the changeset
+        comment = ChangesetComment.find(changeset_comment_id)
+
+        # Unhide the comment
+        comment.update(:visible => true)
+
+        # Return a copy of the updated changeset
+        @changeset = comment.changeset
+
+        respond_to do |format|
+          format.xml
+          format.json
+        end
+      end
+
+      ##
+      # Sets visible flag on comment to false
+      def destroy
+        # Check the arguments are sane
+        raise OSM::APIBadUserInput, "No id was given" unless params[:changeset_comment_id]
+
+        # Extract the arguments
+        changeset_comment_id = params[:changeset_comment_id].to_i
+
+        # Find the changeset
+        comment = ChangesetComment.find(changeset_comment_id)
+
+        # Hide the comment
+        comment.update(:visible => false)
+
+        # Return a copy of the updated changeset
+        @changeset = comment.changeset
+
+        respond_to do |format|
+          format.xml
+          format.json
+        end
+      end
+    end
+  end
+end
index 808ac97ea3418257445177caeb8615cc2574ff78..2f4a361baa47b58f5f44f9ca0aa6db45359a403e 100644 (file)
@@ -24,16 +24,16 @@ module Api
     # Add a comment to a changeset
     def create
       # Check the arguments are sane
-      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
+      raise OSM::APIBadUserInput, "No id was given" unless params[:changeset_id]
       raise OSM::APIBadUserInput, "No text was given" if params[:text].blank?
       raise OSM::APIRateLimitExceeded if rate_limit_exceeded?
 
       # Extract the arguments
-      id = params[:id].to_i
+      changeset_id = params[:changeset_id].to_i
       body = params[:text]
 
       # Find the changeset and check it is valid
-      changeset = Changeset.find(id)
+      changeset = Changeset.find(changeset_id)
       raise OSM::APIChangesetNotYetClosedError, changeset if changeset.open?
 
       # Add a comment to the changeset
@@ -59,56 +59,6 @@ module Api
       end
     end
 
-    ##
-    # Sets visible flag on comment to false
-    def destroy
-      # Check the arguments are sane
-      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
-
-      # Extract the arguments
-      id = params[:id].to_i
-
-      # Find the changeset
-      comment = ChangesetComment.find(id)
-
-      # Hide the comment
-      comment.update(:visible => false)
-
-      # Return a copy of the updated changeset
-      @changeset = comment.changeset
-      render "api/changesets/show"
-
-      respond_to do |format|
-        format.xml
-        format.json
-      end
-    end
-
-    ##
-    # Sets visible flag on comment to true
-    def restore
-      # Check the arguments are sane
-      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
-
-      # Extract the arguments
-      id = params[:id].to_i
-
-      # Find the changeset
-      comment = ChangesetComment.find(id)
-
-      # Unhide the comment
-      comment.update(:visible => true)
-
-      # Return a copy of the updated changeset
-      @changeset = comment.changeset
-      render "api/changesets/show"
-
-      respond_to do |format|
-        format.xml
-        format.json
-      end
-    end
-
     private
 
     ##
diff --git a/app/controllers/api/changesets/downloads_controller.rb b/app/controllers/api/changesets/downloads_controller.rb
new file mode 100644 (file)
index 0000000..1abc9e4
--- /dev/null
@@ -0,0 +1,75 @@
+module Api
+  module Changesets
+    class DownloadsController < ApiController
+      before_action :setup_user_auth
+
+      authorize_resource :changeset
+
+      before_action :set_request_formats
+
+      ##
+      # download the changeset as an osmChange document.
+      #
+      # to make it easier to revert diffs it would be better if the osmChange
+      # format were reversible, i.e: contained both old and new versions of
+      # modified elements. but it doesn't at the moment...
+      #
+      # this method cannot order the database changes fully (i.e: timestamp and
+      # version number may be too coarse) so the resulting diff may not apply
+      # to a different database. however since changesets are not atomic this
+      # behaviour cannot be guaranteed anyway and is the result of a design
+      # choice.
+      def show
+        changeset = Changeset.find(params[:changeset_id])
+
+        # get all the elements in the changeset which haven't been redacted
+        # and stick them in a big array.
+        elements = if show_redactions?
+                     [changeset.old_nodes,
+                      changeset.old_ways,
+                      changeset.old_relations].flatten
+                   else
+                     [changeset.old_nodes.unredacted,
+                      changeset.old_ways.unredacted,
+                      changeset.old_relations.unredacted].flatten
+                   end
+
+        # sort the elements by timestamp and version number, as this is the
+        # almost sensible ordering available. this would be much nicer if
+        # global (SVN-style) versioning were used - then that would be
+        # unambiguous.
+        elements.sort_by! { |e| [e.timestamp, e.version] }
+
+        # generate an output element for each operation. note: we avoid looking
+        # at the history because it is simpler - but it would be more correct to
+        # check these assertions.
+        @created = []
+        @modified = []
+        @deleted = []
+
+        elements.each do |elt|
+          if elt.version == 1
+            # first version, so it must be newly-created.
+            @created << elt
+          elsif elt.visible
+            # must be a modify
+            @modified << elt
+          else
+            # if the element isn't visible then it must have been deleted
+            @deleted << elt
+          end
+        end
+
+        respond_to do |format|
+          format.xml
+        end
+      end
+
+      private
+
+      def show_redactions?
+        current_user&.moderator? && params[:show_redactions] == "true"
+      end
+    end
+  end
+end
index 3df7b75cea752aeb11a0681b728377d6f6a0d0e0..7f0ee1276752d8b986ff3ab0d7b274c6ae657886 100644 (file)
@@ -63,7 +63,7 @@ module Api
       @changeset = Changeset.find(params[:id])
       if params[:include_discussion].presence
         @comments = @changeset.comments
-        @comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:restore, ChangesetComment)
+        @comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:create, :changeset_comment_visibility)
         @comments = @comments.includes(:author)
       end
 
@@ -130,58 +130,6 @@ module Api
       end
     end
 
-    ##
-    # download the changeset as an osmChange document.
-    #
-    # to make it easier to revert diffs it would be better if the osmChange
-    # format were reversible, i.e: contained both old and new versions of
-    # modified elements. but it doesn't at the moment...
-    #
-    # this method cannot order the database changes fully (i.e: timestamp and
-    # version number may be too coarse) so the resulting diff may not apply
-    # to a different database. however since changesets are not atomic this
-    # behaviour cannot be guaranteed anyway and is the result of a design
-    # choice.
-    def download
-      changeset = Changeset.find(params[:id])
-
-      # get all the elements in the changeset which haven't been redacted
-      # and stick them in a big array.
-      elements = [changeset.old_nodes.unredacted,
-                  changeset.old_ways.unredacted,
-                  changeset.old_relations.unredacted].flatten
-
-      # sort the elements by timestamp and version number, as this is the
-      # almost sensible ordering available. this would be much nicer if
-      # global (SVN-style) versioning were used - then that would be
-      # unambiguous.
-      elements.sort_by! { |e| [e.timestamp, e.version] }
-
-      # generate an output element for each operation. note: we avoid looking
-      # at the history because it is simpler - but it would be more correct to
-      # check these assertions.
-      @created = []
-      @modified = []
-      @deleted = []
-
-      elements.each do |elt|
-        if elt.version == 1
-          # first version, so it must be newly-created.
-          @created << elt
-        elsif elt.visible
-          # must be a modify
-          @modified << elt
-        else
-          # if the element isn't visible then it must have been deleted
-          @deleted << elt
-        end
-      end
-
-      respond_to do |format|
-        format.xml
-      end
-    end
-
     ##
     # updates a changeset's tags. none of the changeset's attributes are
     # user-modifiable, so they will be ignored.
index 72c1955e039ebf225f862752dff681b978fc2e78..27f2c949ebae500426aa1a7b76474382236faf43 100644 (file)
@@ -91,7 +91,7 @@ class ConfirmationsController < ApplicationController
         flash[:error] = t ".unknown_token"
       end
 
-      redirect_to edit_account_path
+      redirect_to account_path
     end
   end
 
index 540683d25ea0e89c2ed63b55f8d7949d5cdbfe9d..cb73cc38f35baaa76214ca5f15c19d12c400140d 100644 (file)
@@ -9,6 +9,7 @@ class DashboardsController < ApplicationController
   before_action :check_database_readable
 
   def show
-    @user = current_user
+    @followings = current_user.followings
+    @nearby_users = current_user.nearby - @followings
   end
 end
index 5d817c9c6cf3f525d4669de10174332978f3e6f0..fbeb01b76425b890f4b69dd603ddf96e255abf8c 100644 (file)
@@ -43,7 +43,7 @@ class NotesController < ApplicationController
 
     @note_includes_anonymous = @note.author.nil? || @note_comments.find { |comment| comment.author.nil? }
 
-    @note_comments = @note_comments.drop(1) if @note.author.nil? || @note.author.active?
+    @note_comments = @note_comments.drop(1) if @note_comments.first&.event == "opened"
   rescue ActiveRecord::RecordNotFound
     render :template => "browse/not_found", :status => :not_found
   end
index 2068ab6a33bcf531e58068a7a04cf790edf904d9..dfd89083e10228d3972fa3276e09b62f4a5fa39a 100644 (file)
@@ -16,7 +16,7 @@ class UserMutesController < ApplicationController
     @muted_users = current_user.muted_users
     @title = t ".title"
 
-    redirect_to edit_account_path unless @muted_users.any?
+    redirect_to account_path unless @muted_users.any?
   end
 
   def create
index a2f35e9b213a8f5ea91a4a8ecbbe76ca1e889c97..7e3fa2a32801cb70854c8e4fc8b3f0dea9d70d66 100644 (file)
@@ -13,10 +13,11 @@ module Users
     ##
     # display a list of users matching specified criteria
     def show
-      @params = params.permit(:status, :ip, :before, :after)
+      @params = params.permit(:status, :username, :ip, :before, :after)
 
       users = User.all
       users = users.where(:status => @params[:status]) if @params[:status].present?
+      users = users.where("LOWER(email) = LOWER(?) OR LOWER(NORMALIZE(display_name, NFKC)) = LOWER(NORMALIZE(?, NFKC))", @params[:username], @params[:username]) if @params[:username].present?
       users = users.where("creation_address <<= ?", @params[:ip]) if @params[:ip].present?
 
       @users_count = users.limit(501).count
index 0df971bd4f39dd55d2f1eba2307143a41f2aae5a..7f6619eab664f4b08dd9836fbee1b165b73dc125 100644 (file)
@@ -101,7 +101,7 @@ class UsersController < ApplicationController
     current_user.data_public = true
     current_user.save
     flash[:notice] = t ".flash success"
-    redirect_to edit_account_path
+    redirect_to account_path
   end
 
   ##
@@ -135,7 +135,7 @@ class UsersController < ApplicationController
 
       session[:user_errors] = current_user.errors.as_json
 
-      redirect_to edit_account_path
+      redirect_to account_path
     else
       user = User.find_by(:auth_provider => provider, :auth_uid => uid)
 
index 0ba5032288b7c7b7ebb9803a00fc230506372775..7a75a4ff53c22ea2b0da5816978e03bf8846ea1a 100644 (file)
@@ -1,9 +1,11 @@
 module NoteHelper
   include ActionView::Helpers::TranslationHelper
 
-  def note_description(author, description)
+  def note_description(author, description, first_comment)
     if !author.nil? && author.status == "deleted"
       RichText.new("text", t("notes.show.description_when_author_is_deleted"))
+    elsif first_comment&.event != "opened"
+      RichText.new("text", t("notes.show.description_when_there_is_no_opening_comment"))
     else
       description
     end
index b04ab1b0d56439a7b921c341bc2a4e731c365e12..7fb6b4321fcafe96deb631d9fa4699b224779d3e 100644 (file)
@@ -5,12 +5,12 @@ module SvgHelper
     tag.svg path_tag, :width => 16, :height => 16
   end
 
-  def previous_page_svg_tag(**options)
-    adjacent_page_svg_tag(dir == "rtl" ? 1 : -1, **options)
+  def previous_page_svg_tag(**)
+    adjacent_page_svg_tag(dir == "rtl" ? 1 : -1, **)
   end
 
-  def next_page_svg_tag(**options)
-    adjacent_page_svg_tag(dir == "rtl" ? -1 : 1, **options)
+  def next_page_svg_tag(**)
+    adjacent_page_svg_tag(dir == "rtl" ? -1 : 1, **)
   end
 
   def key_svg_tag(**options)
index aa503f40c539647dfb9d66aea990b57e6f8c76c6..81e720159b09ad38ff2c6c3e7aa882f19f199341 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: acls
 #
-#  id      :bigint(8)        not null, primary key
+#  id      :bigint           not null, primary key
 #  address :inet
 #  k       :string           not null
 #  v       :string
index e6bde19a50d8562f63e12e44be146a72e5905ac9..50b30c1a4c6c409fd890f343f5f62503095a0cdd 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: changesets
 #
-#  id          :bigint(8)        not null, primary key
-#  user_id     :bigint(8)        not null
+#  id          :bigint           not null, primary key
+#  user_id     :bigint           not null
 #  created_at  :datetime         not null
 #  min_lat     :integer
 #  max_lat     :integer
index d825c9ed58d4fe1f3ef99937278238848585a654..09eabe8938d182654a0557ffcf9d516f395264a2 100644 (file)
@@ -3,8 +3,8 @@
 # Table name: changeset_comments
 #
 #  id           :integer          not null, primary key
-#  changeset_id :bigint(8)        not null
-#  author_id    :bigint(8)        not null
+#  changeset_id :bigint           not null
+#  author_id    :bigint           not null
 #  body         :text             not null
 #  created_at   :datetime         not null
 #  visible      :boolean          not null
index da9fbce51a4732833cd86f0349caf1aab5a2e530..6b848e1c98f7db33ce181385b2873b7bc940c51d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: changeset_tags
 #
-#  changeset_id :bigint(8)        not null, primary key
+#  changeset_id :bigint           not null, primary key
 #  k            :string           default(""), not null, primary key
 #  v            :string           default(""), not null
 #
index ad23c9f65f3b6435814a3e6484ab1e7b41cc7b6b..539e7532cca3f74107429697a439eaf05ded264b 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: diary_comments
 #
-#  id             :bigint(8)        not null, primary key
-#  diary_entry_id :bigint(8)        not null
-#  user_id        :bigint(8)        not null
+#  id             :bigint           not null, primary key
+#  diary_entry_id :bigint           not null
+#  user_id        :bigint           not null
 #  body           :text             not null
 #  created_at     :datetime         not null
 #  updated_at     :datetime         not null
index 089c7e6c60fecb1ebcc92238a00eb0d1e37a7c9e..ad9659438d71e6a0b176f8b649b8fed49161f896 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: diary_entries
 #
-#  id            :bigint(8)        not null, primary key
-#  user_id       :bigint(8)        not null
+#  id            :bigint           not null, primary key
+#  user_id       :bigint           not null
 #  title         :string           not null
 #  body          :text             not null
 #  created_at    :datetime         not null
index 93b8847f433f655ee673ad339053f5dd460ec126..31a5806ebf924ad8fc5b7c2611885274affd4ea9 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: diary_entry_subscriptions
 #
-#  user_id        :bigint(8)        not null, primary key
-#  diary_entry_id :bigint(8)        not null, primary key
+#  user_id        :bigint           not null, primary key
+#  diary_entry_id :bigint           not null, primary key
 #
 # Indexes
 #
index ebf3ad735da1c5dd2f3fa050506060aa1cdc888c..6dd1bfe03162ca0173f613bfb86a3522c3767bbb 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: friends
 #
-#  id             :bigint(8)        not null, primary key
-#  user_id        :bigint(8)        not null
-#  friend_user_id :bigint(8)        not null
+#  id             :bigint           not null, primary key
+#  user_id        :bigint           not null
+#  friend_user_id :bigint           not null
 #  created_at     :datetime
 #
 # Indexes
index 665e2d721376b897738691c73cf4a62c0bc3bd4b..28320af78f3c8de52746ecab86ef09b3f49cf409 100644 (file)
@@ -2,13 +2,13 @@
 #
 # Table name: messages
 #
-#  id                :bigint(8)        not null, primary key
-#  from_user_id      :bigint(8)        not null
+#  id                :bigint           not null, primary key
+#  from_user_id      :bigint           not null
 #  title             :string           not null
 #  body              :text             not null
 #  sent_on           :datetime         not null
 #  message_read      :boolean          default(FALSE), not null
-#  to_user_id        :bigint(8)        not null
+#  to_user_id        :bigint           not null
 #  to_user_visible   :boolean          default(TRUE), not null
 #  from_user_visible :boolean          default(TRUE), not null
 #  body_format       :enum             default("markdown"), not null
index 1bec9a33cfa05968c040904182ab12b14e8e588f..baf0c180f3f069260a960e5e56c11670442116df 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: current_nodes
 #
-#  id           :bigint(8)        not null, primary key
+#  id           :bigint           not null, primary key
 #  latitude     :integer          not null
 #  longitude    :integer          not null
-#  changeset_id :bigint(8)        not null
+#  changeset_id :bigint           not null
 #  visible      :boolean          not null
 #  timestamp    :datetime         not null
-#  tile         :bigint(8)        not null
-#  version      :bigint(8)        not null
+#  tile         :bigint           not null
+#  version      :bigint           not null
 #
 # Indexes
 #
index 18e502439b18499fe505eeaee239a1b2b5d4e5ed..fa82b6a3c52b9a73be64967c065efa33f5429e39 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: current_node_tags
 #
-#  node_id :bigint(8)        not null, primary key
+#  node_id :bigint           not null, primary key
 #  k       :string           default(""), not null, primary key
 #  v       :string           default(""), not null
 #
index b7215d6f7706084318ecefcd845d303771f14fc9..2ec72a03ac6fd5bf228d3319546fd6700e140995 100644 (file)
@@ -2,16 +2,16 @@
 #
 # Table name: notes
 #
-#  id          :bigint(8)        not null, primary key
+#  id          :bigint           not null, primary key
 #  latitude    :integer          not null
 #  longitude   :integer          not null
-#  tile        :bigint(8)        not null
+#  tile        :bigint           not null
 #  updated_at  :datetime         not null
 #  created_at  :datetime         not null
 #  status      :enum             not null
 #  closed_at   :datetime
 #  description :text             default(""), not null
-#  user_id     :bigint(8)
+#  user_id     :bigint
 #  user_ip     :inet
 #
 # Indexes
@@ -95,7 +95,7 @@ class Note < ApplicationRecord
   # Return the note's description, derived from the first comment
   def description
     if user_ip.nil? && user_id.nil?
-      all_comments.first.body
+      all_comments.first.body if all_comments.first&.event == "opened"
     else
       RichText.new("text", super)
     end
@@ -104,7 +104,7 @@ class Note < ApplicationRecord
   # Return the note's author object, derived from the first comment
   def author
     if user_ip.nil? && user_id.nil?
-      all_comments.first.author
+      all_comments.first.author if all_comments.first&.event == "opened"
     else
       super
     end
index d318c5e95aa8272332765437da303c1234970fd6..3f34368fa8073608723656f1043b0462945772c0 100644 (file)
@@ -2,12 +2,12 @@
 #
 # Table name: note_comments
 #
-#  id         :bigint(8)        not null, primary key
-#  note_id    :bigint(8)        not null
+#  id         :bigint           not null, primary key
+#  note_id    :bigint           not null
 #  visible    :boolean          not null
 #  created_at :datetime         not null
 #  author_ip  :inet
-#  author_id  :bigint(8)
+#  author_id  :bigint
 #  body       :text
 #  event      :enum
 #
index 76e8a226cb73a1a47037fd1f979524fc49406358..2532738bc79653eebf3278257f59f6ab974fead8 100644 (file)
@@ -2,8 +2,8 @@
 #
 # Table name: note_subscriptions
 #
-#  user_id :bigint(8)        not null, primary key
-#  note_id :bigint(8)        not null, primary key
+#  user_id :bigint           not null, primary key
+#  note_id :bigint           not null, primary key
 #
 # Indexes
 #
index 834f1ded54393b6d8587f5fbc241f6980bee3b9a..9a099e30415dd9705ee4cc458bdc49f3b3003858 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: oauth_applications
 #
-#  id           :bigint(8)        not null, primary key
+#  id           :bigint           not null, primary key
 #  owner_type   :string           not null
-#  owner_id     :bigint(8)        not null
+#  owner_id     :bigint           not null
 #  name         :string           not null
 #  uid          :string           not null
 #  secret       :string           not null
index f29eed9dda9cbaf7d3532fde9cd22432eca08b1f..bb4022ba33aee65cba3d2d2951fbd1f31cf2ef17 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: nodes
 #
-#  node_id      :bigint(8)        not null, primary key
+#  node_id      :bigint           not null, primary key
 #  latitude     :integer          not null
 #  longitude    :integer          not null
-#  changeset_id :bigint(8)        not null
+#  changeset_id :bigint           not null
 #  visible      :boolean          not null
 #  timestamp    :datetime         not null
-#  tile         :bigint(8)        not null
-#  version      :bigint(8)        not null, primary key
+#  tile         :bigint           not null
+#  version      :bigint           not null, primary key
 #  redaction_id :integer
 #
 # Indexes
index 503ecf27adaee5820f6b53bb003e3272531b3e20..cae61a2c5ef4f82bd12fe070d4a7ab36dffd6630 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: node_tags
 #
-#  node_id :bigint(8)        not null, primary key
-#  version :bigint(8)        not null, primary key
+#  node_id :bigint           not null, primary key
+#  version :bigint           not null, primary key
 #  k       :string           default(""), not null, primary key
 #  v       :string           default(""), not null
 #
 # Foreign Keys
 #
-#  node_tags_id_fkey  (["node_id", "version"] => nodes.["node_id", "version"])
+#  node_tags_id_fkey  ([node_id, version] => nodes[node_id, version])
 #
 
 class OldNodeTag < ApplicationRecord
index 9f551d839fc2c57be000f37f67ccd952ec9a313c..42f363f0ef2c5b5e216bc4439f207d978c863909 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: relations
 #
-#  relation_id  :bigint(8)        not null, primary key
-#  changeset_id :bigint(8)        not null
+#  relation_id  :bigint           not null, primary key
+#  changeset_id :bigint           not null
 #  timestamp    :datetime         not null
-#  version      :bigint(8)        not null, primary key
+#  version      :bigint           not null, primary key
 #  visible      :boolean          default(TRUE), not null
 #  redaction_id :integer
 #
index 6d5aaf5c9653861db673981fd73b5eb5fcba12c6..2e723c5bd5c8eefb47d6aae0bf489888e788c2ff 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: relation_members
 #
-#  relation_id :bigint(8)        not null, primary key
+#  relation_id :bigint           not null, primary key
 #  member_type :enum             not null
-#  member_id   :bigint(8)        not null
+#  member_id   :bigint           not null
 #  member_role :string           not null
-#  version     :bigint(8)        default(0), not null, primary key
+#  version     :bigint           default(0), not null, primary key
 #  sequence_id :integer          default(0), not null, primary key
 #
 # Indexes
@@ -15,7 +15,7 @@
 #
 # Foreign Keys
 #
-#  relation_members_id_fkey  (["relation_id", "version"] => relations.["relation_id", "version"])
+#  relation_members_id_fkey  ([relation_id, version] => relations[relation_id, version])
 #
 
 class OldRelationMember < ApplicationRecord
index 39566aeb97b2c321636f30b19eb8a850bc36bcc8..0817454129b7feb1ac1bc4cd006fb71ddc466fc7 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: relation_tags
 #
-#  relation_id :bigint(8)        not null, primary key
+#  relation_id :bigint           not null, primary key
 #  k           :string           default(""), not null, primary key
 #  v           :string           default(""), not null
-#  version     :bigint(8)        not null, primary key
+#  version     :bigint           not null, primary key
 #
 # Foreign Keys
 #
-#  relation_tags_id_fkey  (["relation_id", "version"] => relations.["relation_id", "version"])
+#  relation_tags_id_fkey  ([relation_id, version] => relations[relation_id, version])
 #
 
 class OldRelationTag < ApplicationRecord
index 0c53f90bdbe2f84f1fc885499fe05cb27bbf4311..a9c55cf3064b73f48ef4a95162f9492d62c4b1ed 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: ways
 #
-#  way_id       :bigint(8)        not null, primary key
-#  changeset_id :bigint(8)        not null
+#  way_id       :bigint           not null, primary key
+#  changeset_id :bigint           not null
 #  timestamp    :datetime         not null
-#  version      :bigint(8)        not null, primary key
+#  version      :bigint           not null, primary key
 #  visible      :boolean          default(TRUE), not null
 #  redaction_id :integer
 #
index b2a16c16b39af7cefe8646e0c17bde05953641b3..714b38648de0d13b304132e7131064e023912f06 100644 (file)
@@ -2,10 +2,10 @@
 #
 # Table name: way_nodes
 #
-#  way_id      :bigint(8)        not null, primary key
-#  node_id     :bigint(8)        not null
-#  version     :bigint(8)        not null, primary key
-#  sequence_id :bigint(8)        not null, primary key
+#  way_id      :bigint           not null, primary key
+#  node_id     :bigint           not null
+#  version     :bigint           not null, primary key
+#  sequence_id :bigint           not null, primary key
 #
 # Indexes
 #
@@ -13,7 +13,7 @@
 #
 # Foreign Keys
 #
-#  way_nodes_id_fkey  (["way_id", "version"] => ways.["way_id", "version"])
+#  way_nodes_id_fkey  ([way_id, version] => ways[way_id, version])
 #
 
 class OldWayNode < ApplicationRecord
index 82ce132ec8bf8051399bc246f6752f5a532c9811..32aea5b1588f5c7c57cc50b55a099aa986ed4569 100644 (file)
@@ -2,14 +2,14 @@
 #
 # Table name: way_tags
 #
-#  way_id  :bigint(8)        not null, primary key
+#  way_id  :bigint           not null, primary key
 #  k       :string           not null, primary key
 #  v       :string           not null
-#  version :bigint(8)        not null, primary key
+#  version :bigint           not null, primary key
 #
 # Foreign Keys
 #
-#  way_tags_id_fkey  (["way_id", "version"] => ways.["way_id", "version"])
+#  way_tags_id_fkey  ([way_id, version] => ways[way_id, version])
 #
 
 class OldWayTag < ApplicationRecord
index 5e9e0decde935a87b1514e3a8ffec16085026b79..7b25c6323195026b90e39d102be6bb504ebfbbe1 100644 (file)
@@ -7,7 +7,7 @@
 #  description        :text             not null
 #  created_at         :datetime
 #  updated_at         :datetime
-#  user_id            :bigint(8)        not null
+#  user_id            :bigint           not null
 #  description_format :enum             default("markdown"), not null
 #
 # Foreign Keys
index 69e2acfd19ce3222f425c9734d983ede7b630101..0742976e8d125c937eea66afcb4bfe787f90dcc3 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: current_relations
 #
-#  id           :bigint(8)        not null, primary key
-#  changeset_id :bigint(8)        not null
+#  id           :bigint           not null, primary key
+#  changeset_id :bigint           not null
 #  timestamp    :datetime         not null
 #  visible      :boolean          not null
-#  version      :bigint(8)        not null
+#  version      :bigint           not null
 #
 # Indexes
 #
index 2b72cd2b182595bd6f6abb2d138559c700572103..c9723e48b5b2cab776060d9606866e807856ccf5 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: current_relation_members
 #
-#  relation_id :bigint(8)        not null, primary key
+#  relation_id :bigint           not null, primary key
 #  member_type :enum             not null
-#  member_id   :bigint(8)        not null
+#  member_id   :bigint           not null
 #  member_role :string           not null
 #  sequence_id :integer          default(0), not null, primary key
 #
index 500b7d910825338fa3ec452b3b184b45a9b706a6..d23192b8e71584b11193c25475fdad272228fc11 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: current_relation_tags
 #
-#  relation_id :bigint(8)        not null, primary key
+#  relation_id :bigint           not null, primary key
 #  k           :string           default(""), not null, primary key
 #  v           :string           default(""), not null
 #
index 4d71b4b2933d02fdd63453147970f36d8369b24e..3001d052c0e8783f7d159cbd5a49677598dba485 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: gpx_files
 #
-#  id          :bigint(8)        not null, primary key
-#  user_id     :bigint(8)        not null
+#  id          :bigint           not null, primary key
+#  user_id     :bigint           not null
 #  visible     :boolean          default(TRUE), not null
 #  name        :string           default(""), not null
-#  size        :bigint(8)
+#  size        :bigint
 #  latitude    :float
 #  longitude   :float
 #  timestamp   :datetime         not null
index d36ceb8c3c52606f21e74489ef2eabfeddc97169..198d8cd3e8914566ee0baf12d12abcf3d7502de5 100644 (file)
@@ -6,9 +6,9 @@
 #  trackid   :integer          not null
 #  latitude  :integer          not null
 #  longitude :integer          not null
-#  gpx_id    :bigint(8)        not null
+#  gpx_id    :bigint           not null
 #  timestamp :datetime
-#  tile      :bigint(8)
+#  tile      :bigint
 #
 # Indexes
 #
index b1dde095c18f7793e524a704f0d7db8550b0f51a..0e9fe126d43dedd182dccffdd661b9ca0f9fd849 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: gpx_file_tags
 #
-#  gpx_id :bigint(8)        not null
+#  gpx_id :bigint           not null
 #  tag    :string           not null
-#  id     :bigint(8)        not null, primary key
+#  id     :bigint           not null, primary key
 #
 # Indexes
 #
index 8d061e26bb626cd7c1a42fe9d6c6fb8e72e044fe..a63846e421f917044560852bb3c07ded3ed00649 100644 (file)
@@ -3,7 +3,7 @@
 # Table name: users
 #
 #  email                :string           not null
-#  id                   :bigint(8)        not null, primary key
+#  id                   :bigint           not null, primary key
 #  pass_crypt           :string           not null
 #  creation_time        :datetime         not null
 #  display_name         :string           default(""), not null
@@ -28,7 +28,7 @@
 #  diary_entries_count  :integer          default(0), not null
 #  image_use_gravatar   :boolean          default(FALSE), not null
 #  auth_provider        :string
-#  home_tile            :bigint(8)
+#  home_tile            :bigint
 #  tou_agreed           :datetime
 #  diary_comments_count :integer          default(0)
 #  note_comments_count  :integer          default(0)
index 61235c418d079a34944aff3c4f0de93ae5e1b121..f25bd47b87d768b9d0ed0f3867f7e4e5695e898b 100644 (file)
@@ -3,12 +3,12 @@
 # Table name: user_blocks
 #
 #  id             :integer          not null, primary key
-#  user_id        :bigint(8)        not null
-#  creator_id     :bigint(8)        not null
+#  user_id        :bigint           not null
+#  creator_id     :bigint           not null
 #  reason         :text             not null
 #  ends_at        :datetime         not null
 #  needs_view     :boolean          default(FALSE), not null
-#  revoker_id     :bigint(8)
+#  revoker_id     :bigint
 #  created_at     :datetime
 #  updated_at     :datetime
 #  reason_format  :enum             default("markdown"), not null
index 9bee39b8d8e15828a698c66513b6d11de54d418d..68f3bb67961d6a0ee59bc5faf09b27dde2ffbf1a 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: user_mutes
 #
-#  id         :bigint(8)        not null, primary key
-#  owner_id   :bigint(8)        not null
-#  subject_id :bigint(8)        not null
+#  id         :bigint           not null, primary key
+#  owner_id   :bigint           not null
+#  subject_id :bigint           not null
 #  created_at :datetime         not null
 #  updated_at :datetime         not null
 #
index 5b91bbda91badfe4f4242c9fc6a5a563b4cdcd19..35412c9e783afb83cc8e6da0b8dc8243610a4ae9 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: user_preferences
 #
-#  user_id :bigint(8)        not null, primary key
+#  user_id :bigint           not null, primary key
 #  k       :string           not null, primary key
 #  v       :string           not null
 #
index 332848e420ffec509d270267e81f281ee4502bef..d374b4084e08e8fef0385c74fdfba82393ddb473 100644 (file)
@@ -3,11 +3,11 @@
 # Table name: user_roles
 #
 #  id         :integer          not null, primary key
-#  user_id    :bigint(8)        not null
-#  role       :enum             not null
+#  user_id    :bigint           not null
 #  created_at :datetime
 #  updated_at :datetime
-#  granter_id :bigint(8)        not null
+#  role       :enum             not null
+#  granter_id :bigint           not null
 #
 # Indexes
 #
index 203d3b7036f4c78d4b844b8219f14acfd73e59e6..7357a280f52eda40f2004d028763a4696c524076 100644 (file)
@@ -2,11 +2,11 @@
 #
 # Table name: current_ways
 #
-#  id           :bigint(8)        not null, primary key
-#  changeset_id :bigint(8)        not null
+#  id           :bigint           not null, primary key
+#  changeset_id :bigint           not null
 #  timestamp    :datetime         not null
 #  visible      :boolean          not null
-#  version      :bigint(8)        not null
+#  version      :bigint           not null
 #
 # Indexes
 #
index c57d3be79a8a4b1651ec24354970e2bcdda2e954..b77827ada35a5605d8641502000c99f5d6622bf5 100644 (file)
@@ -2,9 +2,9 @@
 #
 # Table name: current_way_nodes
 #
-#  way_id      :bigint(8)        not null, primary key
-#  node_id     :bigint(8)        not null
-#  sequence_id :bigint(8)        not null, primary key
+#  way_id      :bigint           not null, primary key
+#  node_id     :bigint           not null
+#  sequence_id :bigint           not null, primary key
 #
 # Indexes
 #
index 04ce7abf552e9c2ed4f1565761dd2e531991358c..2bf7fa887cd01e176b33f61b7a477694650ee51d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: current_way_tags
 #
-#  way_id :bigint(8)        not null, primary key
+#  way_id :bigint           not null, primary key
 #  k      :string           default(""), not null, primary key
 #  v      :string           default(""), not null
 #
index 9b9b0f182ccd88caae6844096ce887594294c257..5a22aa67b8097decd63eceb2565e057fc3d49162 100644 (file)
@@ -40,4 +40,4 @@
   <button class="btn btn-secondary" disabled><%= t(".delete_account") %></button>
 <% end %>
 
-<%= link_to t(".cancel"), edit_account_path, :class => "btn btn-link" %>
+<%= link_to t(".cancel"), account_path, :class => "btn btn-link" %>
index 6a70a88f19fe9113370f7e764376b5fa70d5eb47..20c6a7a8e12d13dab0f96088518e047ed669abde 100644 (file)
@@ -23,7 +23,6 @@
     <p><%= @text["section_3"] %></p>
     <p><%= @text["active_defn_1"] %></p>
     <p><%= @text["active_defn_2"] %></p>
-    </ul>
   </li>
   <li>
     <p><%= @text["section_4"] %></p>
diff --git a/app/views/api/changeset_comments/visibilities/create.json.jbuilder b/app/views/api/changeset_comments/visibilities/create.json.jbuilder
new file mode 100644 (file)
index 0000000..c245cd1
--- /dev/null
@@ -0,0 +1,5 @@
+json.partial! "api/root_attributes"
+
+json.changeset do
+  json.partial! "api/changesets/changeset", :changeset => @changeset
+end
diff --git a/app/views/api/changeset_comments/visibilities/create.xml.builder b/app/views/api/changeset_comments/visibilities/create.xml.builder
new file mode 100644 (file)
index 0000000..84892f7
--- /dev/null
@@ -0,0 +1,5 @@
+xml.instruct! :xml, :version => "1.0"
+
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
+  osm << render(:partial => "api/changesets/changeset", :object => @changeset)
+end
diff --git a/app/views/api/changeset_comments/visibilities/destroy.json.jbuilder b/app/views/api/changeset_comments/visibilities/destroy.json.jbuilder
new file mode 100644 (file)
index 0000000..c245cd1
--- /dev/null
@@ -0,0 +1,5 @@
+json.partial! "api/root_attributes"
+
+json.changeset do
+  json.partial! "api/changesets/changeset", :changeset => @changeset
+end
diff --git a/app/views/api/changeset_comments/visibilities/destroy.xml.builder b/app/views/api/changeset_comments/visibilities/destroy.xml.builder
new file mode 100644 (file)
index 0000000..84892f7
--- /dev/null
@@ -0,0 +1,5 @@
+xml.instruct! :xml, :version => "1.0"
+
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
+  osm << render(:partial => "api/changesets/changeset", :object => @changeset)
+end
similarity index 55%
rename from app/views/api/changesets/download.xml.builder
rename to app/views/api/changesets/downloads/show.xml.builder
index 1e400cd9feceef34b4d857e31fa0a6d6497418c9..88e05b587c4c08600cabef92efdf8770169c1453 100644 (file)
@@ -3,17 +3,17 @@ xml.instruct! :xml, :version => "1.0"
 xml.osmChange(OSM::API.new.xml_root_attributes) do |osm|
   @created.each do |elt|
     osm.create do |create|
-      create << render(elt)
+      create << render(:partial => "api/#{elt.to_partial_path}", :object => elt)
     end
   end
   @modified.each do |elt|
     osm.modify do |modify|
-      modify << render(elt)
+      modify << render(:partial => "api/#{elt.to_partial_path}", :object => elt)
     end
   end
   @deleted.each do |elt|
     osm.delete do |delete|
-      delete << render(elt)
+      delete << render(:partial => "api/#{elt.to_partial_path}", :object => elt)
     end
   end
 end
index 3edc6edd2476d9a8fd195867f7d01b832c7f29eb..221e704728491b456ffca127e503de559b390b15 100644 (file)
@@ -37,7 +37,7 @@
       </label>
       <%= hidden_field_tag("referer", params[:referer], :autocomplete => "off") %>
       <%= text_field_tag("openid_url", "https://", :tabindex => 20, :autocomplete => "on", :class => "form-control") %>
-      <span class="form-text text-body-secondary">(<a href="<%= t "accounts.edit.openid.link" %>" target="_new"><%= t "accounts.edit.openid.link text" %></a>)</span>
+      <span class="form-text text-body-secondary">(<a href="<%= t "accounts.show.openid.link" %>" target="_new"><%= t "accounts.show.openid.link text" %></a>)</span>
     </div>
 
     <%= submit_tag t(".openid_login_button"), :tabindex => 21, :class => "btn btn-primary" %>
index 14f1c2927b69321afd10fa6942bff48cf28a2e4f..a0d3c0ad4cd597cb1ef8d940fae4ae1560510188 100644 (file)
@@ -3,7 +3,7 @@
 <% content_for :heading do %>
   <ul class="nav nav-tabs flex-column flex-sm-row">
     <li class="nav-item">
-      <%= link_to t(".account_settings"), edit_account_path, :class => "nav-link #{'active' if %w[accounts deletions].include?(controller_name)}" %>
+      <%= link_to t(".account_settings"), account_path, :class => "nav-link #{'active' if %w[accounts deletions].include?(controller_name)}" %>
     </li>
     <li class="nav-item">
       <%= link_to t(".oauth2_applications"), oauth_applications_path, :class => "nav-link #{'active' if controller_name == 'oauth2_applications'}" %>
index c8ffe1a81c973a852af251c1147fa4e8d024094d..6556f12bfe1641f54d79522abfb71510a2d3fb9b 100644 (file)
@@ -18,10 +18,10 @@ atom_feed(:language => I18n.locale, :schema_date => 2009,
   @changesets.each do |changeset|
     feed.entry(changeset, :updated => changeset.closed_at, :id => changeset_url(changeset.id, :only_path => false)) do |entry|
       entry.link :rel => "alternate",
-                 :href => changeset_show_url(changeset, :only_path => false),
+                 :href => api_changeset_url(changeset, :only_path => false),
                  :type => "application/osm+xml"
       entry.link :rel => "alternate",
-                 :href => changeset_download_url(changeset, :only_path => false),
+                 :href => api_changeset_download_url(changeset, :only_path => false),
                  :type => "application/osmChange+xml"
 
       if !changeset.tags.empty? && changeset.tags.key?("comment")
index 167bcb5cb807d5fc2d147a049853b2284125d25b..70b1877b5a0bb4789001e5d2ef9ebdb4a470f502 100644 (file)
@@ -49,8 +49,8 @@
               —
               <%= tag.button t(".#{comment.visible ? 'hide' : 'unhide'}_comment"),
                              :class => "btn btn-sm small btn-link link-secondary p-0 align-baseline",
-                             :data => { :method => "POST",
-                                        :url => comment.visible ? changeset_comment_hide_url(comment) : changeset_comment_unhide_url(comment) } %>
+                             :data => { :method => comment.visible ? "DELETE" : "POST",
+                                        :url => api_changeset_comment_visibility_path(comment) } %>
             <% end %>
           </small>
           <div class="mx-2">
@@ -81,7 +81,7 @@
                          :name => "comment",
                          :disabled => true,
                          :data => { :method => "POST",
-                                    :url => changeset_comment_url(@changeset) } %>
+                                    :url => api_changeset_changeset_comments_path(@changeset) } %>
         </div>
       </form>
     <% else %>
 </div>
 
 <div class='secondary-actions'>
-  <%= link_to(t(".changesetxml"), :controller => "api/changesets", :action => "show") %>
+  <%= link_to t(".changesetxml"), api_changeset_path(@changeset) %>
   &middot;
-  <%= link_to(t(".osmchangexml"), :controller => "api/changesets", :action => "download") %>
+  <%= link_to t(".osmchangexml"), api_changeset_download_path(@changeset) %>
 </div>
 
 <% if @next_by_user || @prev_by_user %>
index 8e78524decb463730cfc2f863151aba6639b8fa1..021f1a33585e7e5dac88e25bdfe894eb211c310b 100644 (file)
@@ -11,8 +11,8 @@
   <div class="col">
     <p class='text-body-secondary mb-0'>
       <%= link_to contact.display_name, contact %>
-      <% if @user.home_location? and contact.home_location? %>
-        <% distance = @user.distance(contact) %>
+      <% if current_user.home_location? and contact.home_location? %>
+        <% distance = current_user.distance(contact) %>
         <% if distance < 1 %>
           (<%= t ".m away", :count => (distance * 1000).round %>)
         <% else %>
index 70dae774e86eef0a3e5e9567b2f75d46d9791755..e110ad531f1f11ad66b4464e24a39a3e52f7ead9 100644 (file)
@@ -3,63 +3,58 @@
 <% end %>
 
 <div class="row">
-  <% if current_user and @user.id == current_user.id %>
-    <div class="col-md order-md-last">
-      <% if !@user.home_location? %>
-        <div id="map" class="content_map border border-secondary-subtle">
-          <p class="m-3"><%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %></p>
-        </div>
-      <% else %>
-        <% content_for :head do %>
-          <%= javascript_include_tag "user" %>
-        <% end %>
-        <% user_data = {
-             :lon => current_user.home_lon,
-             :lat => current_user.home_lat,
-             :icon => image_path("marker-red.png"),
-             :description => render(:partial => "popup", :object => current_user, :locals => { :type => "your location" })
-           } %>
-        <%= tag.div "", :id => "map", :class => "content_map border border-secondary-subtle rounded z-0", :data => { :user => user_data } %>
+  <div class="col-md order-md-last">
+    <% if !current_user.home_location? %>
+      <div id="map" class="content_map border border-secondary-subtle">
+        <p class="m-3"><%= t(".no_home_location_html", :edit_profile_link => link_to(t(".edit_your_profile"), edit_profile_path)) %></p>
+      </div>
+    <% else %>
+      <% content_for :head do %>
+        <%= javascript_include_tag "user" %>
       <% end %>
+      <% user_data = {
+           :lon => current_user.home_lon,
+           :lat => current_user.home_lat,
+           :icon => image_path("marker-red.png"),
+           :description => render(:partial => "popup", :object => current_user, :locals => { :type => "your location" })
+         } %>
+      <%= tag.div "", :id => "map", :class => "content_map border border-secondary-subtle rounded z-0", :data => { :user => user_data } %>
+    <% end %>
+  </div>
 
-      <% followings = @user.followings %>
-      <% nearby = @user.nearby - followings %>
-    </div>
+  <div class="col-md">
+    <h2><%= t ".followings" %></h2>
 
-    <div class="col-md">
-      <h2><%= t ".followings" %></h2>
+    <% if @followings.empty? %>
+      <%= t ".no followings" %>
+    <% else %>
+      <nav class='secondary-actions mb-3'>
+        <ul class='clearfix'>
+          <li><%= link_to t(".followed_changesets"), friend_changesets_path %></li>
+          <li><%= link_to t(".followed_diaries"), friends_diary_entries_path %></li>
+        </ul>
+      </nav>
+      <div>
+        <%= render :partial => "contact", :collection => @followings, :locals => { :type => "following" } %>
+      </div>
+    <% end %>
 
-      <% if followings.empty? %>
-        <%= t ".no followings" %>
-      <% else %>
-        <nav class='secondary-actions mb-3'>
-          <ul class='clearfix'>
-            <li><%= link_to t(".followed_changesets"), friend_changesets_path %></li>
-            <li><%= link_to t(".followed_diaries"), friends_diary_entries_path %></li>
-          </ul>
-        </nav>
-        <div>
-          <%= render :partial => "contact", :collection => followings, :locals => { :type => "following" } %>
-        </div>
-      <% end %>
-
-      <hr>
+    <hr>
 
-      <h2><%= t ".nearby users" %></h2>
+    <h2><%= t ".nearby users" %></h2>
 
-      <% if nearby.empty? %>
-        <%= t ".no nearby users" %>
-      <% else %>
-        <nav class='secondary-actions mb-3'>
-          <ul class='clearfix'>
-            <li><%= link_to t(".nearby_changesets"), nearby_changesets_path %></li>
-            <li><%= link_to t(".nearby_diaries"), nearby_diary_entries_path %></li>
-          </ul>
-        </nav>
-        <div id="nearbyusers">
-          <%= render :partial => "contact", :collection => nearby, :locals => { :type => "nearby mapper" } %>
-        </div>
-      <% end %>
-    </div>
-  <% end %>
+    <% if @nearby_users.empty? %>
+      <%= t ".no nearby users" %>
+    <% else %>
+      <nav class='secondary-actions mb-3'>
+        <ul class='clearfix'>
+          <li><%= link_to t(".nearby_changesets"), nearby_changesets_path %></li>
+          <li><%= link_to t(".nearby_diaries"), nearby_diary_entries_path %></li>
+        </ul>
+      </nav>
+      <div id="nearbyusers">
+        <%= render :partial => "contact", :collection => @nearby_users, :locals => { :type => "nearby mapper" } %>
+      </div>
+    <% end %>
+  </div>
 </div>
index f09812972ef31ff234233072891f20a0bb1d4300..69e323a997d6222a34e6f37d3ec46301cb35d29a 100644 (file)
@@ -85,7 +85,7 @@
             <span class='badge count-number'><%= number_with_delimiter(current_user.new_messages.size) %></span>
           <% end %>
           <%= link_to t("users.show.my profile"), current_user, :class => "dropdown-item" %>
-          <%= link_to t("users.show.my_account"), edit_account_path, :class => "dropdown-item" %>
+          <%= link_to t("users.show.my_account"), account_path, :class => "dropdown-item" %>
           <%= link_to t("users.show.my_preferences"), preferences_path, :class => "dropdown-item" %>
           <div class="dropdown-divider"></div>
           <% if current_user.home_location? %>
index 691e9fa7291e16f5e3cd26aaeecfc678dcc73898..706d27a99b86fac983107ac2e653366fbbce8816 100644 (file)
@@ -39,7 +39,7 @@
   <form method="GET" action="<%= directions_path %>" class="directions_form bg-body-secondary pb-2">
     <div class="d-flex flex-row-reverse px-3 pt-3 pb-1"><button type="button" class="btn-close" aria-label="<%= t("javascripts.close") %>"></button></div>
 
-    <div class="d-flex flex-column mx-2 gap-1">
+    <div class="d-flex flex-column mx-2 gap-2">
       <div class="d-flex gap-1 align-items-center">
         <div class="d-flex flex-column gap-1 flex-grow-1">
           <div class="d-flex gap-2 align-items-center">
       </div>
       <div class="d-flex gap-2 align-items-center">
         <div class="routing_marker_column flex-shrink-0"></div>
-        <select class="routing_engines form-select py-1 px-2" name="routing_engines"></select>
+        <div class="btn-group routing_modes" role="group">
+          <input type="radio" class="btn-check" name="modes" id="car" autocomplete="off" disabled>
+          <label class="btn btn-outline-secondary px-2" for="car" title="<%= t("site.search.modes.car") %>">
+            <svg class="d-block" width="16" height="16" fill="currentColor">
+              <path d="M2.52 3.515A2.5 2.5 0 0 1 4.82 2h6.362c1 0 1.904.596 2.298 1.515l.792 1.848c.075.175.21.319.38.404.5.25.855.715.965 1.262l.335 1.679q.05.242.049.49v.413c0 .814-.39 1.543-1 1.997V13.5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-1.338c-1.292.048-2.745.088-4 .088s-2.708-.04-4-.088V13.5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1-.5-.5v-1.892c-.61-.454-1-1.183-1-1.997v-.413a2.5 2.5 0 0 1 .049-.49l.335-1.68c.11-.546.465-1.012.964-1.261a.8.8 0 0 0 .381-.404l.792-1.848ZM3 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2m10 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2M6 8a1 1 0 0 0 0 2h4a1 1 0 1 0 0-2zM2.906 5.189a.51.51 0 0 0 .497.731c.91-.073 3.35-.17 4.597-.17s3.688.097 4.597.17a.51.51 0 0 0 .497-.731l-.956-1.913A.5.5 0 0 0 11.691 3H4.309a.5.5 0 0 0-.447.276L2.906 5.19Z" />
+            </svg>
+          </label>
+          <input type="radio" class="btn-check" name="modes" id="bicycle" autocomplete="off" disabled>
+          <label class="btn btn-outline-secondary px-2" for="bicycle" title="<%= t("site.search.modes.bicycle") %>">
+            <svg class="d-block" width="16" height="16" fill="currentColor">
+              <path d="M4 4.5a.5.5 0 0 1 .5-.5H6a.5.5 0 0 1 0 1v.5h4.14l.386-1.158A.5.5 0 0 1 11 4h1a.5.5 0 0 1 0 1h-.64l-.311.935.807 1.29a3 3 0 1 1-.848.53l-.508-.812-2.076 3.322A.5.5 0 0 1 8 10.5H5.959a3 3 0 1 1-1.815-3.274L5 5.856V5h-.5a.5.5 0 0 1-.5-.5m1.5 2.443-.508.814c.5.444.85 1.054.967 1.743h1.139zM8 9.057 9.598 6.5H6.402zM4.937 9.5a2 2 0 0 0-.487-.877l-.548.877zM3.603 8.092A2 2 0 1 0 4.937 10.5H3a.5.5 0 0 1-.424-.765zm7.947.53a2 2 0 1 0 .848-.53l1.026 1.643a.5.5 0 1 1-.848.53z" />
+            </svg>
+          </label>
+          <input type="radio" class="btn-check" name="modes" id="foot" autocomplete="off" disabled>
+          <label class="btn btn-outline-secondary px-2" for="foot" title="<%= t("site.search.modes.foot") %>">
+            <svg class="d-block" width="16" height="16" fill="currentColor">
+              <path d="M9.5 1.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0M6.44 3.752A.75.75 0 017 3.5h1.445c.742 0 1.32.643 1.243 1.38l-.43 4.083a1.8 1.8 0 01-.088.395l-.318.906.213.242a.8.8 0 01.114.175l2 4.25a.75.75 0 11-1.357.638l-1.956-4.154-1.68-1.921A.75.75 0 016 8.96l.138-2.613-.435.489-.464 2.786a.75.75 0 11-1.48-.246l.5-3a.75.75 0 01.18-.375l2-2.25zm-.19 7.993v-1.418l1.204 1.375.261.524a.8.8 0 01-.12.231l-2.5 3.25a.75.75 0 11-1.19-.914zm4.22-4.215-.494-.494.205-1.843.006-.067 1.124 1.124h1.44a.75.75 0 010 1.5H11a.75.75 0 01-.531-.22Z" />
+            </svg>
+          </label>
+        </div>
+        <select class="routing_engines form-select py-1 px-2" name="routing_engines">
+          <option value="graphhopper" disabled><%= t("site.search.providers.graphhopper") %></option>
+          <option value="fossgis_osrm" disabled><%= t("site.search.providers.fossgis_osrm") %></option>
+          <option value="fossgis_valhalla" disabled><%= t("site.search.providers.fossgis_valhalla") %></option>
+        </select>
         <%= submit_tag t("site.search.submit_text"), :class => "routing_go btn btn-primary py-1 px-2", :data => { :disable_with => false } %>
       </div>
     </div>
index 0b39234a93e61f2eaf222b0e221906f48bf8c567..4bd7d499d3da7acec77a8996842a450e662c5e26 100644 (file)
@@ -48,7 +48,7 @@
       </td>
       <td><%= link_to note.id, note %></td>
       <td><%= note_author(note.author) %></td>
-      <td><%= note_description(note.author, note.description).to_html %></td>
+      <td><%= note_description(note.author, note.description, current_user&.moderator? ? note.comments.unscope(:where => :visible).first : note.comments.first).to_html %></td>
       <td><%= friendly_date_ago(note.created_at) %></td>
       <td><%= friendly_date_ago(note.updated_at) %></td>
     </tr>
index b65926b5f9df335fd7abbcfda573cfef93ad8c8c..d0dcdeb1b9417354c01f5e9830011b8d980a876b 100644 (file)
@@ -5,7 +5,7 @@
 <div>
   <h4><%= t(".description") %></h4>
   <div class="overflow-hidden ms-2">
-    <%= note_description(@note.author, @note.description).to_html %>
+    <%= note_description(@note.author, @note.description, current_user&.moderator? ? @note.comments.unscope(:where => :visible).first : @note.comments.first).to_html %>
   </div>
 
   <div class="details" data-coordinates="<%= @note.lat %>,<%= @note.lon %>" data-status="<%= @note.status %>">
index 0ba4200a8462ca86a245b57d26a9a6ecc8ebce56..6b6c69798c4de77e10321a9cd51ffc786a0ee958 100644 (file)
@@ -4,6 +4,7 @@
   <% data = { :configured => Settings.key?(:id_application) }
      data[:lat] = @lat if @lat
      data[:lon] = @lon if @lon
+     data[:zoom] = @zoom if @zoom
      data[:gpx] = trace_data_url(params[:gpx], :format => :xml) if params[:gpx]
      data[:url] = id_url(:locale => params[:locale]) %>
   <%= tag.iframe "", :frameBorder => 0, :id => "id-embed", :class => "w-100 h-100", :allowfullscreen => "", :data => data %>
index bcd010f352bf757e82901415cb7fed54eb0d647c..3451288761992f34032b082794564d0733e05a76 100644 (file)
@@ -1,3 +1,3 @@
 <p><%= t ".not_public" %></p>
-<p><%= t ".not_public_description_html", :user_page => (link_to t(".user_page_link"), edit_account_path(:anchor => "public")) %></p>
+<p><%= t ".not_public_description_html", :user_page => (link_to t(".user_page_link"), account_path(:anchor => "public")) %></p>
 <p><%= t ".anon_edits_html", :link => link_to(t(".anon_edits_link_text"), t(".anon_edits_link")) %></p>
index dd037c7af6c3a13dee647bf9ba3e077ca658be7e..c3d15d18afe6656385195801474c89a299f5f4cb 100644 (file)
                      :data => { :behavior => "category_dropdown" },
                      :class => "form-select" %>
     </div>
+    <div class="mb-3 col-md">
+      <%= text_field_tag :username,
+                         params[:username],
+                         :placeholder => t(".name_or_email"),
+                         :autocomplete => "on",
+                         :class => "form-control" %>
+    </div>
     <div class="mb-3 col-md">
       <%= text_field_tag :ip,
                          params[:ip],
index a32f5fae1e071337716f945fbd5b531093cd3e92..30245adedc79fe30f122af57a0fc31b24ab79bd6 100644 (file)
@@ -30,7 +30,7 @@
               <span class='badge count-number'><%= number_with_delimiter(current_user.diary_comments.size) %></span>
             </li>
             <li>
-              <%= link_to t(".my_account"), edit_account_path %>
+              <%= link_to t(".my_account"), account_path %>
             </li>
 
             <% if current_user.blocks.exists? %>
index ff6a47532311f69c591687838c96795d49608cde..ced1ba3708f5024f01e48454ba2f15d9eac89a82 100755 (executable)
--- a/bin/setup
+++ b/bin/setup
@@ -4,8 +4,8 @@ require "fileutils"
 APP_ROOT = File.expand_path("..", __dir__)
 APP_NAME = "openstreetmap".freeze
 
-def system!(*args)
-  system(*args, :exception => true)
+def system!(*)
+  system(*, :exception => true)
 end
 
 FileUtils.chdir APP_ROOT do
similarity index 94%
rename from config/eslint.js
rename to config/eslint.config.mjs
index 6055634aa5a7ef6afab684f4adbb8d988f2a12a6..d695f0131db7b1f916cf42c64514ce64806f1dbe 100644 (file)
@@ -1,9 +1,9 @@
-const globals = require("globals");
-const js = require("@eslint/js");
-const erb = require("eslint-plugin-erb");
-const stylisticJs = require("@stylistic/eslint-plugin-js");
+import globals from "globals";
+import js from "@eslint/js";
+import erb from "eslint-plugin-erb";
+import stylisticJs from "@stylistic/eslint-plugin-js";
 
-module.exports = [
+export default [
   js.configs.recommended,
   erb.configs.recommended,
   {
@@ -164,13 +164,9 @@ module.exports = [
     }
   },
   {
-    files: ["config/eslint.js"],
+    files: ["config/eslint.config.mjs"],
     languageOptions: {
-      ecmaVersion: 2019,
-      sourceType: "commonjs",
-      globals: {
-        ...globals.commonjs
-      }
+      sourceType: "module"
     },
     rules: {
       "sort-keys": ["error", "asc", { minKeys: 5 }]
index e7b813b73f788fb7bf4cac947007c2ff0154340d..710e2c00950e9e6c568bec3e57238d775462b8aa 100644 (file)
@@ -30,5 +30,6 @@ Rails.application.config.middleware.insert_before 0, OpenStreetMap::Cors do
     resource "/diary/*/rss", :headers => :any, :methods => [:get]
     resource "/trace/*/data", :headers => :any, :methods => [:get]
     resource "/user/*/diary/rss", :headers => :any, :methods => [:get]
+    resource "/rails/active_storage/*", :headers => :any, :methods => [:get]
   end
 end
index cbdc700019084b0993fd8bbc1100b4a58a30bac3..56305becbae85d042a3b90e0929c154bb1775dd2 100644 (file)
@@ -237,9 +237,8 @@ af:
         comment: Kommentaar
         full: Volle nota
   accounts:
-    edit:
+    show:
       title: Redigeer rekening
-      my settings: My instellings
       current email address: Huidige e-posadres
       external auth: Ekserne veriviering.
       contributor terms:
@@ -1787,7 +1786,6 @@ af:
       my traces: My Spore
       my notes: My notas
       my profile: My profiel
-      my settings: My Instellings
       my comments: My kommentaar
       my_preferences: My voorkeure
       my_dashboard: My paneelbord
@@ -1839,10 +1837,10 @@ af:
       show:
         title: Gebruikers
         heading: Gebruikers
-        empty: Geen gebruikers gevind nie
       page:
         confirm: Bevestig geselekteerde gebruikers
         hide: Versteek verkose gebruikers
+        empty: Geen gebruikers gevind nie
       user:
         summary_html: '%{name} geskep vanaf %{ip_address} op %{date}'
         summary_no_ip_html: '%{name} geskep op %{date}'
index f5f24aee224c887109c32949cddc2a0423b43c59..67e886690f75084a8fad43dab05265fe27c1e5dd 100644 (file)
@@ -121,9 +121,8 @@ aln:
       entry:
         comment: Koment
   accounts:
-    edit:
+    show:
       title: Ndrysho akountin
-      my settings: Preferencat e mia
       current email address: 'Email adresa e tanishme:'
       save changes button: Ruaj Ndryshimet
     go_public:
@@ -136,8 +135,6 @@ aln:
     terms:
       show:
         heading: rregullat për Pjesëmarrës
-        consider_pd: Unë e konsideroj kontributet e mia të jenë në domenin publik
-        consider_pd_why: çka o kjo?
         legale_select: 'Ju lutem zgjidhni vendin tuaj të banimit:'
         legale_names:
           france: Franca
@@ -974,7 +971,6 @@ aln:
       my diary: ditari im
       my edits: ndryshimet e mia
       my traces: gjurmët e mia
-      my settings: preferencat e mia
       blocks on me: bllokimet e mia
       blocks by me: bllokimet e dhana nga un
       send message: dërgo mesazh
@@ -1021,10 +1017,10 @@ aln:
       show:
         title: Perdoruesit
         heading: Perdoruesit
-        empty: Asni perputhje e perdoruesve nuk asht gjetun
       page:
         confirm: Konfirmo Anëtarët e Selektum
         hide: Mshefi Perdorust e Zgjedhun
+        empty: Asni perputhje e perdoruesve nuk asht gjetun
       user:
         summary_html: '%{name} u kriju prej %{ip_address} në %{date}'
         summary_no_ip_html: '%{name} u krijue me %{date}'
index 83c948c5bbea71e7435f60ffd92941543891e322..b0e10805800a6ef9401d740d48a3229919b20a39 100644 (file)
@@ -340,9 +340,8 @@ ar:
         comment: التعليق
         full: ملاحظة كاملة
   accounts:
-    edit:
+    show:
       title: عدل الحساب
-      my settings: إعداداتي
       current email address: عنوان البريد الإلكرتروني الحالي
       external auth: مصادقة خارجية
       openid:
@@ -415,9 +414,6 @@ ar:
           الأخرى التي يوفرها مؤسسة خريطة الشارع المفتوحة، يُرجَى النقر على الرابط،
           وقراءة والموافقة على النص.
         read_tou: قرأت شروط الاستخدام وأوافق عليها.
-        consider_pd: بالإضافة إلى ما طُرح أعلاه، أريد أن أنوه أنني أعتبر مساهماتي
-          ملكية عامة.
-        consider_pd_why: ما هذا؟
         continue: استمر
         you need to accept or decline: الرجاء القراءة ومن ثم قبول أو رفض شروط المساهمة
           الجديدة للمتابعة.
@@ -2366,7 +2362,6 @@ ar:
       my notes: ملاحظاتي
       my messages: رسائلي
       my profile: ملفي الشخصي
-      my settings: إعداداتي
       my comments: تعليقاتي
       blocks on me: عمليات منعي
       blocks by me: عمليات المنع بواسطتي
@@ -2420,10 +2415,10 @@ ar:
       show:
         title: المستخدمون
         heading: المستخدمون
-        empty: لم يتم العثور على مستخدمين متطابقين
       page:
         confirm: تأكيد المستخدمين المحددين
         hide: إخفاء المستخدمين المحددين
+        empty: لم يتم العثور على مستخدمين متطابقين
       user:
         summary_html: '%{name} تم إنشاؤها من %{ip_address} في %{date}'
         summary_no_ip_html: '%{name} تم إنشاؤه في %{date}'
index 6d23eecd497d67f7d14c2dd6f7440dbb69ae5c8d..808ff8a8bc25d43f9a61d88d55567a98f28cd8a9 100644 (file)
@@ -103,9 +103,8 @@ arz:
       user:
         new_email: (لا يظهر علنًا)
   accounts:
-    edit:
+    show:
       title: عدّل الحساب
-      my settings: إعداداتي
       save changes button: حفظ التغييرات
     go_public:
       heading: 'تعديل عام:'
@@ -822,7 +821,6 @@ arz:
       my diary: يوميتي
       my edits: مساهمات
       my traces: آثاري
-      my settings: إعداداتي
       blocks on me: العرقلات علي
       blocks by me: العرقلات بواسطتي
       send message: أرسل رسالة
index e1ca5b904c029b3850b2762d36d86a2db9d8ec7c..0603f0c1a95c45e79930cb2448228b0b43ce4772 100644 (file)
@@ -211,9 +211,8 @@ ast:
         comment: Comentariu
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Editar la cuenta
-      my settings: Les mios preferencies
       current email address: Direición de corréu electrónicu actual
       external auth: Autenticación esterna
       openid:
@@ -255,9 +254,6 @@ ast:
           infraestructura forníos pola OSMF. Por favor, pulsia nel enllaz, y llei
           y aceuta'l testu.
         read_tou: Lleí y toi d'alcuerdu colos Términos d'Usu
-        consider_pd: Amás de lo anterior, considero que les mios collaboraciones pasen
-          a ser Dominiu Públicu
-        consider_pd_why: ¿qué ye esto?
         continue: Siguir
         you need to accept or decline: Por favor, llei y aceuta o refuga les nueves
           Condiciones de Collaboración pa siguir.
@@ -1804,7 +1800,6 @@ ast:
       my notes: Les mios notes
       my messages: Los mios mensaxes
       my profile: El mio perfil
-      my settings: Les mios preferencies
       my comments: Los mios comentarios
       blocks on me: Bloqueos recibíos
       blocks by me: Bloqueos puestos
@@ -1858,10 +1853,10 @@ ast:
       show:
         title: Usuarios
         heading: Usuarios
-        empty: Nun s'atoparon usuarios que concasen
       page:
         confirm: Confirmar los usuarios esbillaos
         hide: Anubrir los usuarios esbillaos
+        empty: Nun s'atoparon usuarios que concasen
       user:
         summary_html: '%{name} creáu dende %{ip_address} el %{date}'
         summary_no_ip_html: '%{name} creáu el %{date}'
index f0a1260f8c00f2715a356bff255de3023e905bb6..fd4b1ac4001cdf8aaa2897b660f2e4679f09b6c4 100644 (file)
@@ -160,7 +160,7 @@ az:
         comment: Şərh
         full: Tam qeydlər
   accounts:
-    edit:
+    show:
       current email address: Hazırki E-Poçt Ünvanı
       openid:
         link text: bu nədir?
@@ -173,7 +173,6 @@ az:
       success: Hesab silindi.
     terms:
       show:
-        consider_pd_why: bu nədir?
         legale_names:
           france: Fransa
           italy: İtaliya
index 87ecc0f325a227ff6d05ed2f15609d414b09ac92..f9a088f6c7c1dc9fad2af44cfec4939a1d1462e9 100644 (file)
@@ -252,9 +252,8 @@ ba:
         comment: Комментарий
         full: Тулы текст
   accounts:
-    edit:
+    show:
       title: Аккаунтты үҙгәртергә
-      my settings: Минең көйләүҙәр
       current email address: Ағымдағы электрон почта адресы
       external auth: Тышҡы аутентификация
       openid:
index 157a7b0342d3f778b385944ed8eae5d22ee492b2..c4b67ea94d9ee6001d2a5b0bfc57cc517ae1a6af 100644 (file)
@@ -93,6 +93,7 @@ be-Tarask:
         allow_write_prefs: зьмяняць іх налады ўдзельніка
         allow_write_diary: ствараць запісы і камэнтары ў дзёньніку
         allow_write_api: зьмяняць мапу
+        allow_write_changeset_comments: камэнтаваць наборы зьменаў
         allow_read_gpx: чытаць іх прыватныя GPS-трэкі
         allow_write_gpx: загружаць GPS-трэкі
         allow_write_notes: зьмяняць нататкі
@@ -247,9 +248,9 @@ be-Tarask:
         comment: Камэнтар
         full: Поўны тэкст
   accounts:
-    edit:
+    show:
       title: Рэдагаваньне рахунку
-      my settings: Мае налады
+      my_account: Мой уліковы запіс
       current email address: Цяперашні адрас электроннай пошты
       external auth: Вонкавая аўтэнтыфікацыя
       openid:
@@ -287,9 +288,6 @@ be-Tarask:
       show:
         title: Умовы
         heading: Умовы
-        consider_pd: У дадатак да прыведзенага вышэй, я пацьвярджаю, што мой унёсак
-          знаходзіцца ў грамадзкім набытку
-        consider_pd_why: што гэта?
         you need to accept or decline: Калі ласка, прачытайце, а потым згадзіцеся
           ці адхіліце новыя ўмовы супрацоўніцтва для працягу.
         legale_select: 'Калі ласка, выберыце сваю краіну пражываньня:'
@@ -299,6 +297,9 @@ be-Tarask:
           rest_of_world: Астатні сьвет
       update:
         terms accepted: Дзякуй за тое, што прынялі новыя ўмовы супрацоўніцтва!
+    pd_declarations:
+      show:
+        confirm: Пацьвердзіць
   browse:
     version: Вэрсія
     in_changeset: Набор зьменаў
@@ -1255,7 +1256,6 @@ be-Tarask:
       my diary: Мой дзёньнік
       my edits: Мае рэдагаваньні
       my traces: Мае трэкі
-      my settings: Мае налады
       blocks on me: Атрыманыя блякаваньні
       blocks by me: Заблякаваныя мной
       send message: Адаслаць паведамленьне
@@ -1305,10 +1305,10 @@ be-Tarask:
       show:
         title: Удзельнікі
         heading: Карыстальнікі
-        empty: Адпаведныя карыстальнікі ня знойдзеныя
       page:
         confirm: Пацьвердзіць выбраных карыстальнікаў
         hide: Схаваць выбраных карыстальнікаў
+        empty: Адпаведныя карыстальнікі ня знойдзеныя
       user:
         summary_html: '%{name} створаны з %{ip_address}, %{date}'
         summary_no_ip_html: '%{name} створаны %{date}'
index cfbc4e3664459b89c9ed0c867aa5fc84eee90477..c32740cbc4e366f91a9b3dde6318bf3cb4c78476 100644 (file)
@@ -290,9 +290,9 @@ be:
         comment: Каментар
         full: Тлумачэнне
   accounts:
-    edit:
+    show:
       title: Рэдагаваць уліковы запіс
-      my settings: Мае налады
+      my_account: Мой уліковы запіс
       current email address: Бягучы адрас электроннай пошты
       external auth: Знешняя Аўтэнтыфікацыя
       openid:
@@ -373,10 +373,8 @@ be:
         tou_explain_html: '%{tou_link} кіруе сайтам і іншай інфраструктурай OSMF.
           Калі ласка, прайдзіце па спасылцы і азнаёмцеся з тэкстам.'
         read_tou: Я згаджаюся з Умовамі выкарыстання
-        consider_pd: У праграму да прыведзенага пагаднення, я пацвярджаю, што мой
-          уклад знаходзіцца ў грамадскім набытку
-        consider_pd_why: што гэта?
         continue: Працягнуць
+        cancel: Скасаваць
         you need to accept or decline: Калі ласка, прачытайце, а потым згадзіцеся
           ці адхіліце новыя ўмовы супрацоўніцтва для працягу.
         legale_select: 'Краіна пражывання:'
@@ -2487,8 +2485,6 @@ be:
         privacy_policy: палітыкі прыватнасці
         html: Адрас вашай электроннай пошты не будзе паказвацца іншым карыстальнікам,
           звярніцеся да %{privacy_policy_link} за больш дэтальнай інфармацыяй.
-      consider_pd_html: Я пагаджаюся з тым, што мой унёсак будзе часткай %{consider_pd_link}.
-      consider_pd: грамадскага набытку
       or: або
       use external auth: У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс
     no_such_user:
@@ -2504,7 +2500,6 @@ be:
       my notes: Мае заўвагі
       my messages: Паведамленні
       my profile: Мой профіль
-      my settings: Мае налады
       my comments: Мае каментары
       my_preferences: Мае параметры
       my_dashboard: Мая панэль
@@ -2569,10 +2564,10 @@ be:
       show:
         title: Удзельнікі
         heading: Удзельнікі
-        empty: Адпаведныя карыстальнікі не знойдзеныя
       page:
         confirm: Пацвердзіць выбраных карыстальнікаў
         hide: Схаваць выбраных карыстальнікаў
+        empty: Адпаведныя карыстальнікі не знойдзеныя
       user:
         summary_html: '%{name} створана з %{ip_address} %{date}'
         summary_no_ip_html: '%{name} створаны %{date}'
index 6b4b984d8da1156f1cfc28dc2de5788775db34e4..afbcd4e4d5b0176de22c72142880b64bfeca8fde 100644 (file)
@@ -230,9 +230,8 @@ bg:
         comment: Коментар
         full: Цялата бележка
   accounts:
-    edit:
+    show:
       title: Промяна на профил
-      my settings: Моите настройки
       current email address: Текуща електронна поща
       external auth: Удостоверяване от външен източник
       openid:
@@ -284,7 +283,6 @@ bg:
         title: Условия
         heading: Условия
         heading_ct: Условия за сътрудничество
-        consider_pd_why: какво е това?
         continue: Продължаване
         you need to accept or decline: За да продължите, моля, прочетете, а след това
           се съгласете или откажете новите условия за сътрудничество.
@@ -1861,7 +1859,6 @@ bg:
       my notes: Моите бележки
       my messages: Съобщения
       my profile: Профил
-      my settings: Настройки
       my comments: Моите коментари
       my_preferences: Предпочитания
       blocks on me: Блокирани от мен
@@ -1902,9 +1899,9 @@ bg:
       show:
         title: Потребители
         heading: Потребители
-        empty: Не са открити съвпадащи профили
       page:
         hide: Скрий избраните потребители
+        empty: Не са открити съвпадащи профили
       user:
         summary_no_ip_html: '%{name} създадено на %{date}'
     changeset_comments:
index f9cc61d158786d31ab09163757b7d43087341adb..6fe552bfcb2bb42773890b585deb5173aec3d80c 100644 (file)
@@ -267,9 +267,8 @@ bn:
         comment: মন্তব্য
         full: পূর্ণ টীকা
   accounts:
-    edit:
+    show:
       title: অ্যাকাউন্ট সম্পাদনা করুন
-      my settings: আমার সেটিংস
       current email address: বর্তমান ই-মেইল ঠিকানা
       external auth: বাহ্যিক প্রমাণীকরণ
       openid:
@@ -343,8 +342,6 @@ bn:
           শর্তাদি নিয়ন্ত্রণ করে।
         read_ct: আমি উপরোক্ত অবদানকারীর শর্তাবলী পড়েছি এবং তাতে সম্মত
         read_tou: আমি ব্যবহারের শর্তাবলী পড়েছি এবং সম্মত
-        consider_pd: উপরোক্ত ছাড়াও, আমি আমার অবদানগুলিকে পাবলিক ডোমেনে বলে মনে করি৷
-        consider_pd_why: এটি কী?
         informal_translations: অনানুষ্ঠানিক অনুবাদ
         continue: অব্যাহত রাখুন
         cancel: বাতিল
@@ -362,6 +359,9 @@ bn:
           করার সিদ্ধান্ত নিয়েছেন। আরও তথ্যের জন্য, অনুগ্রহ করে %{terms_declined_link}
           দেখুন।
         terms_declined_link: এই উইকি পাতা
+    pd_declarations:
+      show:
+        confirm: নিশ্চিত করুন
   browse:
     deleted_ago_by_html: '%{user} কর্তৃক %{time_ago} অপসারিত'
     edited_ago_by_html: '%{user} কর্তৃক %{time_ago} সম্পাদিত'
@@ -1853,6 +1853,7 @@ bn:
   application:
     settings_menu:
       account_settings: অ্যাকাউন্ট সেটিংস
+      oauth2_applications: ওআউথ ২ অ্যাপ্লিকেশন
     auth_providers:
       openid:
         alt: ওপেনআইডি লোগো
@@ -1916,7 +1917,7 @@ bn:
       my notes: আমার নোট
       my messages: আমার বার্তাসমূহ
       my profile: আমার প্রোফাইল
-      my settings: আমার সেটিংস
+      my_account: আমার অ্যাকাউন্ট
       my comments: আমার মন্তব্যসমূহ
       my_preferences: আমার পছন্দ
       edit_profile: পরিলেখ সম্পাদনা করুন
@@ -1959,10 +1960,13 @@ bn:
       show:
         title: ব্যবহারকারীগণ
         heading: ব্যবহারকারীগণ
-        empty: কোনো সাদৃশ্যপূর্ণ ব্যবহারকারী পাওয়া যায়নি
+        states:
+          deleted: অপসারিত
+        search: অনুসন্ধান
       page:
         confirm: নির্বাচিত ব্যবহারকারীদের নিশ্চিত করুন
         hide: নির্বাচিত ব্যবহারকারীদের লুকান
+        empty: কোনো সাদৃশ্যপূর্ণ ব্যবহারকারী পাওয়া যায়নি
       user:
         summary_html: '%{ip_address} থেকে %{date} তারিখে %{name} তৈরি করেছেন'
         summary_no_ip_html: '%{date}-এ %{name} তৈরি হয়েছে'
@@ -2114,6 +2118,8 @@ bn:
     context:
       add_note: এখানে একটি টীকা যোগ করুন
       show_address: ঠিকানা দেখান
+    home:
+      marker_title: আমার বাড়ির অবস্থান
   redactions:
     edit:
       heading: সম্পাদনা সম্পাদন করুন
index c9e789873ac73100925a4a472a7731ed2d76acee..d15ea1b1b7acd3f42ddc9d2b5005d01f11f007fd 100644 (file)
@@ -286,9 +286,8 @@ br:
         comment: Evezhiadenn
         full: Notenn glok
   accounts:
-    edit:
+    show:
       title: Aozañ ar gont
-      my settings: Ma arventennoù
       current email address: Chomlec'h postel a-vremañ
       external auth: Dilesadur diavaez
       openid:
@@ -344,9 +343,6 @@ br:
         heading_ct: Reolennoù ar c'henlabourer
         read_ct: Lennet eo bet ganin ar reolennoù kenlabourat hag asantiñ a ran dezho
         read_tou: Lennet em eus ar reolennoù implijout hag asantiñ a ran doujañ dezho
-        consider_pd: Ouzhpenn an asant amañ a-us, ez anavezan emañ ma zegasadennoù
-          en domani foran
-        consider_pd_why: petra eo se ?
         readable_summary: diverrañ a c'hall bezañ lennet gant tud
         informal_translations: troidigezhioù diofisiel
         continue: Kenderc'hel
@@ -2623,7 +2619,6 @@ br:
         privacy_policy: Politikerezh prevezded
         html: Ho chomlec'h ne vo ket hewel d'an holl, sellit ouzh %{privacy_policy_link}
           evit gouzout hiroc'h.
-      consider_pd: domani foran
       or: pe
       use external auth: 'pe kevreit gant un tredeour:'
     no_such_user:
@@ -2639,7 +2634,6 @@ br:
       my notes: Ma notennoù
       my messages: Ma c'hemennadennoù
       my profile: Ma frofil
-      my settings: Ma arventennoù
       my comments: Ma evezhiadennoù
       my_preferences: Ma fenndibaboù
       my_dashboard: Ma zaolenn-vourzh
@@ -2723,7 +2717,6 @@ br:
       show:
         title: Implijerien
         heading: Implijerien
-        empty: N'eo bet kavet implijer klotaus ebet !
       page:
         found_users:
           one: '%{count} implijer kavet'
@@ -2733,6 +2726,7 @@ br:
           other: '%{count} implijer'
         confirm: Kadarnaat an implijerien diuzet
         hide: Kuzhat an implijerien diuzet
+        empty: N'eo bet kavet implijer klotaus ebet !
       user:
         summary_html: '%{name} krouet eus %{ip_address} d''an %{date}'
         summary_no_ip_html: '%{name} krouet d''an %{date}'
index 8b677a5dc200fc8ecb79a19b23eabbe70e5f8f70..377167ca3918282bee5cf39094d371788b4185a8 100644 (file)
@@ -149,9 +149,8 @@ bs:
       comment:
         opened_at_html: Kreirano %{when}
   accounts:
-    edit:
+    show:
       title: Urediti korisnički račun
-      my settings: Moja podešavanja
       current email address: Trenutna adresa e-pošte
       openid:
         link text: Šta je ovo?
@@ -175,9 +174,6 @@ bs:
       show:
         title: Uslovi za doprinosioce
         heading: Uslovi za doprinosioce
-        consider_pd: Osim gore navedenog ugovora, smatram da su moji doprinosi u javnom
-          vlasništvu (Public Domain)
-        consider_pd_why: Šta je ovo?
         you need to accept or decline: Molimo pročitajte i onda ili prihvatite ili
           odbijte nove Uslove za doprinosioce da bi ste nastavili.
         legale_select: 'Molimo odaberite Vašu zemlju prebivališta:'
@@ -1245,7 +1241,6 @@ bs:
       my edits: Moje promjene
       my traces: Moje trase
       my profile: Moj profil
-      my settings: Moja podešavanja
       my comments: Moji komentari
       blocks on me: Blokade na mene
       blocks by me: Blokade koje sam postavio/la
@@ -1296,10 +1291,10 @@ bs:
       show:
         title: Korisnici
         heading: Korisnici
-        empty: Nisu pronađeni odgovarajući korisnici.
       page:
         confirm: Potvrditi odabrane korisnike
         hide: Sakriti odabrane korisnike
+        empty: Nisu pronađeni odgovarajući korisnici.
       user:
         summary_html: '%{name} napravljeno sa %{ip_address} dana %{date}'
         summary_no_ip_html: '%{name} napravljeno %{date}'
index 099ecf37b68045fbf8d94e9028fe0ec83988e8c8..98ef6acc136e64e59a68c0136bfe8cf1cfdd6f1c 100644 (file)
@@ -282,9 +282,8 @@ ca:
         comment: Comentari
         full: Nota sencera
   accounts:
-    edit:
+    show:
       title: Edita el compte
-      my settings: La meva configuració
       current email address: Adreça electrònica actual
       external auth: Autenticació externa
       openid:
@@ -361,9 +360,6 @@ ca:
           infraestructures proporcionades per l'OSFM. Cliqueu l'enllaç, llegiu el
           text i accepteu-lo.
         read_tou: He llegit i accepto les condicions d'us
-        consider_pd: A més de tot l'anterior, accepto que les meves contribucions
-          siguin de domini públic
-        consider_pd_why: què és això?
         guidance_info_html: 'Informació per ajudar a entendre aquests termes: un %{readable_summary_link}
           i algunes %{informal_translations_link}'
         readable_summary: resum llegible per humans
@@ -2630,7 +2626,6 @@ ca:
       email_help:
         html: La vostra adreça no es mostrarà públicament, consulteu la nostra %{privacy_policy_link}
           per obtenir més informació.
-      consider_pd: domini públic
       or: o
       use external auth: o inicieu la sessió mitjançant un tercer
     no_such_user:
@@ -2646,7 +2641,6 @@ ca:
       my notes: Les meves notes de mapa
       my messages: Els meus missatges
       my profile: El meu perfil
-      my settings: La meva configuració
       my comments: Els meus comentaris
       my_preferences: Les meves preferències
       my_dashboard: El meu tauler
@@ -2711,10 +2705,10 @@ ca:
       show:
         title: Usuaris
         heading: Usuaris
-        empty: No hi ha usuaris que coincideixin s'ha trobat
       page:
         confirm: Confirmar usuaris seleccionats
         hide: Amaga els usuaris seleccionats
+        empty: No hi ha usuaris que coincideixin s'ha trobat
       user:
         summary_html: '%{name} creat a partir de %{ip_address} el %{date}'
         summary_no_ip_html: '%{name} creat el %{date}'
index 60eb85f4215857ca271a1d1ebdf32a3596e0c405..b6c886c53f4a6514165bc3965be9787a24dc11c0 100644 (file)
@@ -241,9 +241,8 @@ ce:
         comment: Коммент
         full: Йуьззина текст
   accounts:
-    edit:
+    show:
       title: Аккаунт хийца
-      my settings: Сан нисдаран гӀирс
       current email address: Карара электронан поштан адрес
       external auth: Арахьара аутентификаци
       openid:
@@ -318,9 +317,6 @@ ce:
         tou_explain_html: '%{tou_link} урхалла до веб-сайтан а, OSMF-о луш йолчу кхечу
           инфраструктуран а. Дехар ду, ссылка тӀе а таӀийна, хьажа текстана тIех долчунна.'
         read_tou: Со реза ву Лелоран хьолашна
-        consider_pd: Лакхахь дийцинарг доцург, ас къобалдо, сан дакъалацар йукъараллин
-          хьолах хилар
-        consider_pd_why: хӀун ду хӀара?
         guidance_info_html: 'ХӀокху терминех кхета гӀо дан лерина хаамаш: цхьа %{readable_summary_link}
           а, цхьайолу %{informal_translations_link} а'
         readable_summary: адамо еша йиш йолу чулацам
@@ -2674,8 +2670,6 @@ ce:
           адресех лаьцна дакъа а
         html: Хьан адрес нахана гойтуш дац, хьажа тхан %{privacy_policy_link} кхин
           дӀа информаци хаа.
-      consider_pd_html: Ас сайн агӀонаш %{consider_pd_link} чохь лору.
-      consider_pd: йукъара домен
       or: йа
       use external auth: я кхечу сайтан агӀонца дIавазало
     no_such_user:
@@ -2691,7 +2685,6 @@ ce:
       my notes: Сан билгалонаш
       my messages: Сан хаамаш
       my profile: Сан профиль
-      my settings: Сан нисдаран гӀирс
       my comments: Сан комменташ
       my_preferences: Суна хазахеттарш
       my_dashboard: Сан панель
@@ -2770,13 +2763,13 @@ ce:
       show:
         title: Декъашхой
         heading: Декъашхой
-        empty: ЦхьаьнабогӀуш болу декъашхой ца карийна
       page:
         found_users:
           one: '%{count} декъашхо карийна'
           other: '%{count} декъашхоша карийна'
         confirm: Хаьржина декъашхой тӀечӀагӀбе
         hide: Хаьржина декъашхой къейлабаха
+        empty: ЦхьаьнабогӀуш болу декъашхой ца карийна
       user:
         summary_html: '%{name} кхоьллина %{date}, %{ip_address} адрес чуьра'
         summary_no_ip_html: '%{name} кхоьллина %{date}'
@@ -3193,7 +3186,7 @@ ce:
       user: 'Кхоьллина:'
       edit: ХӀара редакци хийца
       destroy: ДӀаяккха хӀара редакци
-      confirm: Ð\91акÑ\8aалла Ð»Ð°Ñ\8cий Ñ\85Ó\80Ñ\83на?
+      confirm: Ð¥Ñ\8cо Ñ\82еÑ\88на Ð²Ñ\83й?
     create:
       flash: Редакци кхоьллина.
     update:
index ef50a32681bd1ee1306a16c4c8a8b9b0dda5c640..6d556b02020b81d7a6101e8c65a92d0815869762 100644 (file)
@@ -138,6 +138,7 @@ cs:
         allow_write_prefs: měnit jejich uživatelské nastavení
         allow_write_diary: vytvářet deníkové záznamy a komentáře
         allow_write_api: upravovat mapu
+        allow_write_changeset_comments: komentovat sady změn
         allow_read_gpx: číst jejich soukromé GPS stopy
         allow_write_gpx: nahrávat GPS stopy
         allow_write_notes: měnit poznámky
@@ -317,9 +318,9 @@ cs:
         comment: Komentář
         full: Celá poznámka
   accounts:
-    edit:
+    show:
       title: Upravit účet
-      my settings: Moje nastavení
+      my_account: Můj účet
       current email address: Stávající e-mailová adresa
       external auth: Externí autentizace
       openid:
@@ -334,6 +335,9 @@ cs:
         agreed_with_pd: Také jste prohlásili, že své editace považujete za volné dílo.
         link: https://wiki.openstreetmap.org/wiki/Cs:Open_Database_License/Contributor_Terms?uselang=cs
         link text: co to znamená?
+        not_agreed_with_pd: Neprohlásili jste, že své editace považujete za volné
+          dílo.
+        pd_link_text: prohlásit
       save changes button: Uložit změny
       delete_account: Smazat účet…
     go_public:
@@ -395,8 +399,6 @@ cs:
           poskytované OSMF. Klikněte prosím na odkaz, přečtěte si text a odsouhlaste
           ho.
         read_tou: Přečetl jsem si Podmínky užití a souhlasím s nimi
-        consider_pd: Navíc k výše uvedenému považuji své příspěvky za volné dílo.
-        consider_pd_why: co to znamená?
         guidance_info_html: 'Informace, které pomohou tyto podmínky pochopit: %{readable_summary_link}
           a nějaké %{informal_translations_link}'
         readable_summary: lidsky čitelné shrnutí
@@ -417,6 +419,18 @@ cs:
           pro přispěvatele. Podrobnější informace najdete na %{terms_declined_link}.
         terms_declined_link: této wikistránce
         terms_declined_url: http://wiki.openstreetmap.org/wiki/CS:Contributor_Terms_Declined?uselang=cs
+    pd_declarations:
+      show:
+        title: Považujte mé příspěvky za volné dílo
+        consider_pd: Považuji své příspěvky za volné dílo
+        consider_pd_why: Proč bych mohl chtít, aby moje příspěvky byly volným dílem?
+        confirm: Potvrdit
+      create:
+        successfully_declared: Úspěšně jste prohlásili, že své příspěvky považujete
+          za volné dílo.
+        already_declared: Již dříve jste prohlásili, že své příspěvky považujete za
+          volné dílo.
+        did_not_confirm: Nepotvrdili jste, že považujete své příspěvky za volné dílo.
   browse:
     deleted_ago_by_html: Smazáno %{time_ago} uživatelem %{user}
     edited_ago_by_html: Upraveno %{time_ago} uživatelem %{user}
@@ -492,6 +506,7 @@ cs:
     start_rjs:
       feature_warning: Načítá se %{num_features} prvků, což může váš prohlížeč zpomalit
         či zablokovat. Určitě chcete tato data zobrazit?
+      feature_error: 'Nepodařilo se načíst prvky: %{message}'
       load_data: Nahrát data
       loading: Načítá se…
     tag_details:
@@ -1058,6 +1073,7 @@ cs:
           bridleway: Koňská stezka
           bus_guideway: Autobusová dráha
           bus_stop: Autobusová zastávka
+          busway: Trasa metrobusu
           construction: Silnice ve výstavbě
           corridor: Koridor
           crossing: Přechod
@@ -1748,6 +1764,9 @@ cs:
     offline_flash:
       osm_offline: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
         údržbě mimo provoz.
+      osm_read_only: Databáze OpenStreetMap je momentálně kvůli probíhající neodkladné
+        údržbě pouze pro čtení.
+      expected_restore_html: Očekáváme se, že služby budou obnoveny v %{time}.
       announcement: Oznámení si můžete přečíst zde.
   user_mailer:
     diary_comment_notification:
@@ -2816,10 +2835,12 @@ cs:
       write_prefs: Měnit preference uživatele
       write_diary: Vytvářet deníkové záznamy a komentáře
       write_api: Upravovat mapu
+      write_changeset_comments: Komentovat sady změn
       read_gpx: Číst soukromé GPS stopy
       write_gpx: Nahrávat GPS stopy
       write_notes: Měnit poznámky
       write_redactions: Skrývat mapová data
+      write_blocks: Vytvářet a rušit blokování uživatelů
       read_email: Přečíst e-mailovou adresu uživatele
       consume_messages: Číst, aktualizovat stav a mazat zprávy uživatelů
       send_messages: Posílat soukromé zprávy jiným uživatelům
@@ -2913,8 +2934,6 @@ cs:
           e-mailových adresách
         html: Vaše adresa se nezobrazuje veřejně, více informací získáte na stránce
           s našimi %{privacy_policy_link}.
-      consider_pd_html: Své příspěvky považuji za %{consider_pd_link}.
-      consider_pd: volné dílo
       or: nebo
       use external auth: nebo se přihlaste prostřednictvím třetí strany
     no_such_user:
@@ -2930,7 +2949,7 @@ cs:
       my notes: Moje poznámky k mapě
       my messages: Moje zprávy
       my profile: Můj profil
-      my settings: Moje nastavení
+      my_account: Můj účet
       my comments: Moje komentáře
       my_preferences: Moje preference
       my_dashboard: Moje nástěnka
@@ -3012,7 +3031,16 @@ cs:
       show:
         title: Uživatelé
         heading: Uživatelé
-        empty: Nebyli nalezeni žádní uživatelé vyhovující podmínkám
+        select_status: Vyberte stav
+        states:
+          pending: Čekající
+          active: Aktivní
+          confirmed: Potvrzený
+          suspended: Pozastavený
+          deleted: Smazaný
+        name_or_email: Jméno nebo e-mail
+        ip_address: IP adresa
+        search: Hledat
       page:
         found_users:
           one: Nalezen %{count} uživatel
@@ -3021,6 +3049,7 @@ cs:
           other: Nalezeno %{count} uživatelů
         confirm: Potvrdit vybrané uživatele
         hide: Skrýt vybrané uživatele
+        empty: Nebyli nalezeni žádní uživatelé vyhovující podmínkám
       user:
         summary_html: '%{name} vytvořeno %{date} z %{ip_address}'
         summary_no_ip_html: '%{name} vytvořen %{date}'
@@ -3226,6 +3255,7 @@ cs:
       closed_title: 'Vyřešená poznámka #%{note_name}'
       hidden_title: 'Skrytá poznámka #%{note_name}'
       description_when_author_is_deleted: smazáno
+      description_when_there_is_no_opening_comment: neznámé
       event_opened_by_html: Vytvořeno uživatelem %{user} %{time_ago}
       event_opened_by_anonymous_html: Vytvořeno anonymním uživatelem %{time_ago}
       event_commented_by_html: Komentář od uživatele %{user} %{time_ago}
@@ -3464,6 +3494,8 @@ cs:
           ninth: "9."
           tenth: "10."
       time: Čas
+      download: Stáhnout trasu jako GeoJSON
+      filename: trasa
     query:
       node: Uzel
       way: Cesta
@@ -3478,6 +3510,9 @@ cs:
       show_address: Zobrazit adresu
       query_features: Průzkum prvků
       centre_map: Zde vystředit mapu
+    home:
+      marker_title: Poloha mého domova
+      not_set: Ve vašem účtu není nastavena poloha domova
   redactions:
     edit:
       heading: Upravit redakci
index d2de4da21f575528376b51222a849634868f9782..c26712ca14e9d39ac07ba18e6b175188ce15c8a1 100644 (file)
@@ -90,6 +90,7 @@ cy:
         allow_write_prefs: addasu eu dewisiadau defnyddiwr
         allow_write_diary: creu cofnodion dyddiadur a sylwadau
         allow_write_api: golygu'r map
+        allow_write_changeset_comments: rhoi sylwadau ar grwpiau newid
         allow_read_gpx: darllen eu harllwybrau GPS
         allow_write_gpx: uwchlwytho olion GPS
         allow_write_notes: addasu nodiadau
@@ -290,12 +291,13 @@ cy:
         comment: Sylw
         full: Nodyn llawn
   accounts:
-    edit:
+    show:
       title: Golygu cyfrif
-      my settings: Fy Ngosodiadau
+      my_account: Fy Nghyfrif
       current email address: Cyfeiriad E-bost Cyfredol
       external auth: Dilysu Allanol
       openid:
+        link: https://wiki.openstreetmap.org/wiki/OpenID
         link text: beth yw hwn?
       contributor terms:
         heading: Telerau Cyfranwyr
@@ -305,7 +307,11 @@ cy:
           newydd.
         agreed_with_pd: Rydych hefyd wedi datgan eich bod yn ystyried bod eich golygiadau
           yn y Parth Cyhoeddus.
+        link: https://osmfoundation.org/wiki/Licence/Contributor_Terms
         link text: beth yw hwn?
+        not_agreed_with_pd: Nid ydych wedi datgan eich bod yn ystyried bod eich golygiadau
+          yn y Parth Cyhoeddus.
+        pd_link_text: datgan
       save changes button: Cadw Newidiadau
       delete_account: Dileu Cyfrif...
     go_public:
@@ -339,6 +345,8 @@ cy:
           a lleoliad cartref yn cael eu dileu.
         delete_display_name: Bydd eich enw defnyddiwr yn cael ei ddileu, a gellir
           ei ailddefnyddio gan gyfrifon eraill.
+        retain_caveats: 'Fodd bynnag, bydd rhywfaint o wybodaeth amdanoch yn cael
+          ei chadw ar OpenStreetMap, hyd yn oed ar ôl i''ch cyfrif gael ei ddileu:'
         retain_edits: Bydd eich golygiadau i'r gronfa ddata mapiau, os ydynt yn bodoli,
           yn cael eu cadw.
         retain_traces: Cedwir unrhyw olion rydych chi wedi uwchlwytho os ydynt yn
@@ -357,10 +365,6 @@ cy:
         heading_ct: Telerau Cyfranwyr
         read_ct: Rwyf wedi darllen ac yn cytuno â'r telerau cyfranwyr uchod
         read_tou: Rwyf wedi darllen ac yn cytuno â'r Telerau Defnyddio
-        consider_pd: Yn ogystal â'r uchod, ystyriaf fod fy nghyfraniadau yn y Parth
-          Cyhoeddus
-        consider_pd_why: beth yw hwn?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Gwybodaeth i helpu i ddeall y termau hyn: %{readable_summary_link}
           a rhai %{informal_translations_link}'
         readable_summary: crynodeb darllenadwy
@@ -377,6 +381,16 @@ cy:
       terms_declined_flash:
         terms_declined_link: y dudalen wici hon
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Ystyried bod fy nghyfraniadau yn y Parth Cyhoeddus
+        consider_pd: Ystyriaf fod fy nghyfraniadau yn y Parth Cyhoeddus
+        consider_pd_why: Pam fyddwn am gael fy nghyfraniadau yn y Parth Cyhoeddus?
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Cadarnhau
+      create:
+        successfully_declared: Rydych wedi datgan yn llwyddiannus eich bod yn ystyried
+          bod eich golygiadau yn y Parth Cyhoeddus.
   browse:
     deleted_ago_by_html: Dilëwyd %{time_ago} gan %{user}
     edited_ago_by_html: Golygwyd %{time_ago} gan %{user}
@@ -446,7 +460,7 @@ cy:
       title: Heb ei Ganfod
     timeout:
       title: Gwall Goramser
-      sorry: Sori, cymerodd yn rhy hir i adalw data math %{type} gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl data %{type} #%{id}.'
       type:
         node: nod
         way: llwybr
@@ -464,6 +478,7 @@ cy:
     start_rjs:
       feature_warning: Wrthi'n llwytho %{num_features} nodwedd, a all arafu neu chwalu
         eich porwr. Ydych chi wir eisiau gweld y data?
+      feature_error: 'Ni ellid llwytho nodweddion: %{message}'
       load_data: Llwytho Data
       loading: Wrthi'n llwytho...
     tag_details:
@@ -494,29 +509,37 @@ cy:
       view_redacted_data: Gweld Data Wedi'i Gorchuddio
       view_redaction_message: Gweld Neges Orchuddio
   nodes:
+    not_found_message:
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i nod #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw data'r nod gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl data nod #%{id}.'
   old_nodes:
     not_found_message:
-      sorry: 'Sori, ni ellir canfod fersiwn %{version} o''r nod #%{id}.'
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i fersiwn %{version} o nod #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw hanes y nod gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl hanes nod #%{id}.'
   ways:
+    not_found_message:
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i lwybr #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw data'r llwybr gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl data llwybr #%{id}.'
   old_ways:
     not_found_message:
-      sorry: 'Sori, ni ellir canfod fersiwn %{version} o lwybr #%{id}.'
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i fersiwn %{version} o lwybr
+        #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw hanes y llwybr gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl hanes llwybr #%{id}.'
   relations:
+    not_found_message:
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i berthynas #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw data'r perthynas gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl data perthynas #%{id}.'
   old_relations:
     not_found_message:
-      sorry: 'Sori, ni ellir canfod fersiwn %{version} o''r perthynas #%{id}.'
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i fersiwn %{version} o berthynas
+        #%{id}.'
     timeout:
-      sorry: Sori, cymerodd yn rhy hir i adalw hanes y perthynas gyda'r id %{id}.
+      sorry: 'Mae''n ddrwg gennym, cymerodd rhy hir i nôl hanes perthynas #%{id}.'
   changeset_comments:
     feeds:
       comment:
@@ -526,8 +549,8 @@ cy:
         title_all: Trafodaeth grŵp newid OpenStreetMap
         title_particular: Trafodaeth grŵp newid OpenStreetMap %{changeset_id}
       timeout:
-        sorry: Sori, cymerodd yn rhy hir i adalw rhestr o sylwadau grŵp newid y gofynnoch
-          amdanynt.
+        sorry: Mae'n ddrwg gennym, cymerodd rhy hir i nôl rhestr o sylwadau grŵp newid
+          y gofynnoch amdanynt.
   changesets:
     changeset:
       no_edits: (dim golygiadau)
@@ -536,6 +559,7 @@ cy:
       title: Grwpiau newid
       title_user: Grwpiau newid gan %{user}
       title_user_link_html: Grwpiau newid gan %{user_link}
+      title_followed: Grwpiau newid gan bobl rydych yn eu dilyn
       title_nearby: Grwpiau newid gan ddefnyddwyr gerllaw
       empty: Heb ganfod grwpiau newid.
       empty_area: Heb ganfod grwpiau newid yn yr ardal hon.
@@ -578,9 +602,11 @@ cy:
       ways_paginated: Llwybrau (%{x}-%{y} o %{count})
       relations: Perthnasau (%{count})
       relations_paginated: Perthnasau (%{x}-%{y} o %{count})
+    not_found_message:
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i grŵp newid #%{id}.'
     timeout:
-      sorry: Sori, cymerodd y rhestr o grwpiau newid y gofynnoch amdanynt rhy hir
-        i'w hadalw.
+      sorry: Mae'n ddrwg gennym, cymerodd rhy hir i nôl rhestr o grŵp newid y gofynnoch
+        amdanynt.
   changeset_subscriptions:
     show:
       subscribe:
@@ -594,8 +620,8 @@ cy:
       created_by_html: Crëwyd gan %{link_user} ar %{created}.
     no_such_entry:
       heading: 'Dim cofnod gyda''r id: %{id}'
-      body: Mae'n ddrwg gennym, nid oes grŵp newid gyda'r id %{id}. Gwiriwch eich
-        sillafu, neu efallai bod y ddolen rydych chi wedi ei chlicio arni'n anghywir.
+      body: Mae'n ddrwg gennym, nid oes grŵp newid gyda'r cyfeirnod %{id}. Gwiriwch
+        eich sillafu, neu efallai bod y ddolen rydych chi wedi ei chlicio arni'n anghywir.
   dashboards:
     contact:
       km away: '%{count}km i ffwrdd'
@@ -651,9 +677,9 @@ cy:
     no_such_entry:
       title: Dim cofnod dyddiadur
       heading: 'Dim cofnod gyda''r id: %{id}'
-      body: Mae'n ddrwg gennym, nid oes cofnod dyddiadur neu sylw gyda'r id %{id}.
-        Gwiriwch eich sillafu, neu efallai bod y ddolen rydych chi wedi ei chlicio
-        arni'n anghywir.
+      body: Mae'n ddrwg gennym, nid oes cofnod dyddiadur neu sylw gyda'r cyfeirnod
+        %{id}. Gwiriwch eich sillafu, neu efallai bod y ddolen rydych chi wedi ei
+        chlicio arni'n anghywir.
     diary_entry:
       posted_by_html: Postiwyd gan %{link_user} ar %{created} yn %{language_link}
       updated_at_html: Diweddarwyd ddiwethaf ar %{updated}.
@@ -747,10 +773,15 @@ cy:
         heading: Ydych chi am ddilyn %{user}?
         button: Dilyn Defnyddiwr
       unfollow:
+        heading: Ydych chi am ddad-ddilyn %{user}?
         button: Dad-ddilyn Defnyddiwr
     create:
       success: Rydych nawr yn dilyn %{name}!
+      failed: Mae'n ddrwg gennym, mae eich cais i ddilyn %{name} wedi methu.
       already_followed: Rydych chi eisoes yn dilyn %{name}.
+    destroy:
+      success: Rydych chi wedi dad-ddilyn %{name}.
+      not_followed: Nid ydych yn dilyn %{name}.
   geocoder:
     search:
       title:
@@ -1003,6 +1034,7 @@ cy:
           bridleway: Llwybr Ceffyl
           bus_guideway: Lon Bysiau
           bus_stop: Safle Bws
+          busway: Ffordd Fws
           construction: Priffordd yn cael ei Adeiladu
           corridor: Coridor
           crossing: Croesfan
@@ -1165,6 +1197,8 @@ cy:
           track: Trac Rhedeg
           water_park: Parc Dŵr
           "yes": Hamdden
+        lock:
+          "yes": Loc
         man_made:
           adit: Adit
           advertising: Hysbysebu
@@ -1511,6 +1545,9 @@ cy:
           reservoir: Cronfa Ddŵr
           basin: Basn Dwr
           fishpond: Pwll Pysgod
+          lagoon: Lagŵn
+          wastewater: Dŵr Gwastraff
+          lock: Loc
         waterway:
           artificial: Dyfrffyrdd Artiffisial
           boatyard: Iard Gychod
@@ -1566,6 +1603,7 @@ cy:
       reports: Adroddiadau
       last_updated: Diweddarwyd ddiwethaf
       last_updated_time_ago_user_html: '%{time_ago} gan %{user}'
+      reporting_users: Defnyddiwyr sydd wedi rhoi gwybod
       reports_count:
         zero: '%{count} Adroddiad'
         one: '%{count} Adroddiad'
@@ -1573,6 +1611,7 @@ cy:
         few: '%{count} Adroddiad'
         many: '%{count} Adroddiad'
         other: '%{count} Adroddiad'
+      more_reporters: a %{count} arall
       reported_item: Eitem a roddwyd gwybod
       states:
         ignored: Anwybyddwyd
@@ -1611,6 +1650,8 @@ cy:
       reopened: Mae statws y mater wedi'i osod i 'Agored'
     comments:
       comment_from_html: Sylw gan %{user_link} ar %{comment_created_at}
+      reassign_to_moderators: Ailbennu Mater i Gymedrolwyr
+      reassign_to_administrators: Ailbennu Mater i Weinyddwyr
     reports:
       reported_by_html: Adroddwyd fel %{category} gan %{user} ar %{updated_at}
     helper:
@@ -1688,6 +1729,13 @@ cy:
     communities: Cymunedau
     learn_more: Dysgu Rhagor
     more: Rhagor
+    offline_flash:
+      osm_offline: Mae cronfa ddata OpenStreetMap all-lein ar hyn o bryd er mwyn gwneud
+        gwaith cynnal a chadw hanfodol.
+      osm_read_only: Nid yw'n bosib golygu cronfa ddata OpenStreetMap ar hyn o bryd
+        tra bod gwaith cynnal a chadw hanfodol yn digwydd.
+      expected_restore_html: Disgwylir i wasanaethau gael eu hadfer ymhen %{time}.
+      announcement: Gallwch ddarllen y cyhoeddiad yma.
   user_mailer:
     diary_comment_notification:
       description: 'Cofnod Dyddiadur OpenStreetMap #%{id}'
@@ -1709,8 +1757,11 @@ cy:
     follow_notification:
       hi: Helo %{to_user},
       subject: '[OpenStreetMap] Mae %{user} wedi eich dilyn'
+      followed_you: Mae %{user} bellach yn eich dilyn ar OpenStreetMap.
       see_their_profile: 'Gallwch weld eu proffil yma: %{userurl}.'
       see_their_profile_html: 'Gallwch weld eu proffil yma: %{userurl}.'
+      follow_them: Gallwch hefyd ddilyn y defnyddiwr hwn yn %{followurl}.
+      follow_them_html: Gallwch hefyd ddilyn y defnyddiwr hwn yn %{followurl}.
     gpx_details:
       details: 'Manylion eich ffeil:'
       filename: Enw ffeil
@@ -1834,7 +1885,7 @@ cy:
     no_such_message:
       title: Dim neges o'r fath
       heading: Dim neges o'r fath
-      body: Sori, nid oes neges gyda'r id yno.
+      body: Mae'n ddrwg gennym, nid oes neges gyda'r cyfeirnod yno.
     show:
       title: Darllen neges
       reply_button: Ateb
@@ -1979,7 +2030,7 @@ cy:
       login_button: Mewngofnodi
       with external: neu fewngofnodi gyda thrydydd parti
       or: neu
-      auth failure: Mae'n ddrwg gennym, ni ellir mewngofnodi gyda'r manylion hynny.
+      auth failure: Mae'n ddrwg gennym, ni ellid mewngofnodi gyda'r manylion hynny.
     destroy:
       title: Allgofnodi
       heading: Allgofnodi o OpenStreetMap
@@ -2239,6 +2290,8 @@ cy:
     not_public_flash:
       not_public: Nid ydych wedi gosod eich golygiadau i fod yn gyhoeddus.
       user_page_link: tudalen defnyddiwr
+      anon_edits_html: (%{link})
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
       anon_edits_link_text: Gweld pam.
     edit:
       id_not_configured: iD heb ei ffurfweddu
@@ -2506,8 +2559,8 @@ cy:
       trace_uploaded: Mae eich ffeil GPX wedi'i huwchlwytho ac yn aros i gael ei chynnwys
         yn y gronfa ddata. Bydd hyn fel arfer yn digwydd o fewn hanner awr, a bydd
         e-bost yn cael ei anfon atoch ar ôl cwblhau.
-      upload_failed: Mae'n ddrwg gennym, methodd eich uwchlwythiad GPX. Mae gweinyddwr
-        wedi cael gwybod am y gwall. Ceisiwch eto.
+      upload_failed: Mae'n ddrwg gennym, mae eich uwchlwythiad GPX wedi methu. Mae
+        gweinyddwr wedi cael gwybod am y gwall. Ceisiwch eto.
       traces_waiting:
         zero: Mae gennych %{count} ôl yn aros i'w uwchlwytho. Arhoswch i'r rhain orffen
           cyn uwchlwytho rhagor, er mwyn osgoi rhwystro'r ciw i ddefnyddwyr eraill.
@@ -2671,10 +2724,12 @@ cy:
       write_prefs: Addasu dewisiadau defnyddwyr
       write_diary: Creu cofnodion dyddiadur a sylwadau
       write_api: Golygu'r map
+      write_changeset_comments: Rhoi sylwadau ar grwpiau newid
       read_gpx: Darllen olion GPS preifat
       write_gpx: Uwchlwytho olion GPS
       write_notes: Addasu nodiadau
       write_redactions: Gorchuddio data map
+      write_blocks: Creu a dirymu blociau defnyddwyr
       read_email: Darllen cyfeiriad e-bost defnyddwyr
       consume_messages: Darllen, diweddaru statws a dileu negeseuon defnyddiwr
       send_messages: Anfon negeseuon preifat at ddefnyddwyr eraill
@@ -2699,6 +2754,8 @@ cy:
       confirm_delete: Dileu'r ap hwn?
       client_id: ID Cleient
       client_secret: Cyfrinach Cleient
+      client_secret_warning: Gwnewch yn siŵr eich bod yn cadw'r gyfrinach hon - ni
+        fydd ar gael i chi eto
       permissions: Caniatadau
       redirect_uris: Ailgyfeirio URIs
   oauth2_authorizations:
@@ -2741,8 +2798,6 @@ cy:
         privacy_policy: polisi preifatrwydd
         html: Ni chaiff eich cyfeiriad e-bost ei arddangos yn gyhoeddus, gweler ein
           %{privacy_policy_link} am ragor o wybodaeth.
-      consider_pd_html: Rwy'n ystyried fy nghyfraniadau i fod yn y %{consider_pd_link}.
-      consider_pd: parth cyhoeddus
       or: neu
       use external auth: neu gofrestru gyda thrydydd parti
     no_such_user:
@@ -2756,7 +2811,7 @@ cy:
       my notes: Nodiadau
       my messages: Negeseuon
       my profile: Proffil
-      my settings: Gosodiadau
+      my_account: Fy Nghyfrif
       my comments: Sylwadau
       my_preferences: Dewisiadau
       my_dashboard: Dangosfwrdd
@@ -2841,7 +2896,16 @@ cy:
       show:
         title: Defnyddwyr
         heading: Defnyddwyr
-        empty: Heb ganfod unrhyw defnyddwyr sy'n cyfateb
+        select_status: Dewiswch Statws
+        states:
+          pending: Arfaethedig
+          active: Gweithredol
+          confirmed: Cadarnhawyd
+          suspended: Wedi'u hatal
+          deleted: Wedi'u dileu
+        name_or_email: Enw neu Gyfeiriad E-bost
+        ip_address: Cyfeiriad IP
+        search: Chwilio
       page:
         found_users:
           zero: Canfuwyd %{count} defnyddiwr
@@ -2852,13 +2916,15 @@ cy:
           other: Canfuwyd %{count} defnyddiwr
         confirm: Cadarnhau Defnyddwyr Dewisiedig
         hide: Cuddio Defnyddwyr Dewisiedig
+        empty: Heb ganfod unrhyw defnyddwyr sy'n cyfateb
       user:
         summary_html: Crëwyd %{name} o %{ip_address} ar %{date}
         summary_no_ip_html: '%{name} wedi''i greu ar %{date}'
     comments:
       index:
+        heading_html: Sylwadau %{user}
         changesets: Grwpiau newid
-        diary_entries: Cofnodion dyddiadur
+        diary_entries: Cofnodion Dyddiadur
         no_comments: Dim sylwadau
     changeset_comments:
       index:
@@ -2877,9 +2943,11 @@ cy:
     suspended:
       title: Cyfrif wedi'i atal
       heading: Cyfrif wedi'i atal
-      support: cymorth
+      support: chymorth
       automatically_suspended: Mae'n ddrwg gennym, mae eich cyfrif wedi'i atal yn
         awtomatig oherwydd gweithgarwch amheus.
+      contact_support_html: Bydd y penderfyniad hwn yn cael ei adolygu gan weinyddwr
+        yn fuan, neu gallwch gysylltu â %{support_link} os hoffech drafod hyn.
     auth_failure:
       no_authorization_code: Dim cod awdurdodi
       invalid_scope: Sgop annilys
@@ -3039,6 +3107,8 @@ cy:
       open_title: 'Nodyn heb ei ddatrys #%{note_name}'
       closed_title: 'Nodyn wedi''i ddatrys #%{note_name}'
       hidden_title: 'Nodyn cudd #%{note_name}'
+      description_when_author_is_deleted: wedi'i ddileu
+      description_when_there_is_no_opening_comment: anhysbys
       event_opened_by_html: Crëwyd gan %{user} %{time_ago}
       event_opened_by_anonymous_html: Crëwyd gan berson ddienw %{time_ago}
       event_commented_by_html: Sylw gan %{user} %{time_ago}
@@ -3072,13 +3142,25 @@ cy:
         wybod i fapwyr eraill fel y gallwn ei ddatrys. Symudwch y marciwr i'r safle
         cywir ac ysgrifennwch nodyn i esbonio'r broblem.
       anonymous_warning_html: Nid ydych chi wedi mewngofnodi. %{log_in} neu %{sign_up}
-        os ydych chi eisiau derbyn diweddariadau am eich nodyn.
+        os ydych am gael diweddariadau ar gyfer eich nodyn a helpu mapwyr eraill i'w
+        ddatrys.
       anonymous_warning_log_in: Mewngofnodwch
       anonymous_warning_sign_up: gofrestrwch
+      counter_warning_html: Rydych chi eisoes wedi creu o leiaf %{x_anonymous_notes},
+        sy'n wych i'r gymuned, diolch! Nawr rydym yn eich annog i %{contribute_by_yourself},
+        nid yw mor gymhleth â hynny, a %{community_can_help}.
+      x_anonymous_notes:
+        zero: '%{count} nodyn dienw'
+        one: '%{count} nodyn dienw'
+        two: '%{count} nodyn dienw'
+        few: '%{count} nodyn dienw'
+        many: '%{count} nodyn dienw'
+        other: '%{count} nodyn dienw'
       counter_warning_guide_link:
+        text: gyfrannu eich hun
         url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide
       counter_warning_forum_link:
-        url: https://community.openstreetmap.org/
+        text: gall y gymuned eich helpu
       advice: Mae eich nodyn yn gyhoeddus a gellid ei ddefnyddio i ddiweddaru'r map,
         felly peidiwch ag ysgrifennu gwybodaeth bersonol, na gwybodaeth o fapiau hawlfreintiedig
         neu gyfeiriaduron.
@@ -3091,6 +3173,8 @@ cy:
       showing_page: Tudalen %{page}
       next: Nesaf
       previous: Cynt
+    not_found_message:
+      sorry: 'Mae''n ddrwg gennym, ni ellid dod o hyd i nodyn #%{id}.'
   javascripts:
     close: Cau
     share:
@@ -3194,7 +3278,7 @@ cy:
       distance_km: '%{distance}km'
       errors:
         no_route: Ni ellir dod o hyd i'r llwybr rhwng y ddau le.
-        no_place: Ymddiheuriadau - ni ellir canfod '%{place}'.
+        no_place: Mae'n ddrwg gennym - ni ellid dod o hyd i '%{place}'.
       instructions:
         continue_without_exit: Parhau ar %{name}
         slight_right_without_exit: Ychydig i'r dde i %{name}
@@ -3270,6 +3354,8 @@ cy:
           ninth: 9fed
           tenth: 10fed
       time: Amser
+      download: Lawrlwytho'r llwybr fel GeoJSON
+      filename: ffordd
     query:
       node: Nod
       way: Llwybr
@@ -3284,6 +3370,9 @@ cy:
       show_address: Dangos cyfeiriad
       query_features: Ymholiad nodweddion
       centre_map: Canoli'r map yma
+    home:
+      marker_title: Fy lleoliad cartref
+      not_set: Nid yw lleoliad cartref wedi'i osod ar gyfer eich cyfrif
   redactions:
     edit:
       heading: Golygu Gorchuddiad
index d04d7971830ac129dba8ff1f715f66f81b574435..ec46ad5e6caadaca9142dfca4ba4c8b54d1e2eaa 100644 (file)
@@ -119,6 +119,7 @@ da:
         allow_write_prefs: ændre deres brugeralternativer
         allow_write_diary: oprette blogindlæg og kommentarer
         allow_write_api: ændre kortet
+        allow_write_changeset_comments: kommenter på ændringssæt
         allow_read_gpx: læse deres private GPS-spor
         allow_write_gpx: overføre GPS-spor
         allow_write_notes: ændre bemærkninger
@@ -273,9 +274,9 @@ da:
         comment: Kommentar
         full: Fuld bemærkning
   accounts:
-    edit:
+    show:
       title: Rediger konto
-      my settings: Mine indstillinger
+      my_account: Min konto
       current email address: Nuværende e-mailadresse
       external auth: Ekstern godkendelse
       openid:
@@ -289,6 +290,9 @@ da:
         agreed_with_pd: Du har også erklæret at du anser dine ændringer for at være
           fælleseje/uden ophavsret.
         link text: hvad er dette?
+        not_agreed_with_pd: Du har ikke erklæret, at du anser dine ændringer for at
+          være i det offentlige domæne (Public Domain), dvs. fælleseje/uden ophavsret.
+        pd_link_text: erklær
       save changes button: Gem ændringer
       delete_account: Slet konto
     go_public:
@@ -351,9 +355,6 @@ da:
           hjemmeside og anden infrastruktur stillet til rådighed af OSMF. Klik venligst
           på linket, læs og samtyk med vilkårene.
         read_tou: Jeg har læst og samtykker med brugsvilkårene
-        consider_pd: I tillæg til ovennævnte anser jeg mit bidrag for at være fælleseje/frit
-          for ophavsret (public domain)
-        consider_pd_why: hvad er dette?
         guidance_info_html: 'Oplysninger til at hjælpe med at forstå disse udtryk:
           et %{readable_summary_link} og nogle %{informal_translations_link}'
         readable_summary: menneskeligt læsbart sammendrag
@@ -375,6 +376,20 @@ da:
           %{terms_declined_link}.
         terms_declined_link: denne wiki-side
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Da:Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Betragt mine bidrag for at være i det offentlige domæne
+        consider_pd: Jeg anser mine bidrag for at være i det offentlige domæne
+        consider_pd_why: Hvorfor skulle jeg have et ønske om, at mine bidrag er i
+          det offentlige domæne?
+        confirm: Bekræft
+      create:
+        successfully_declared: Du har erklæret, at du anser dine redigeringer for
+          at være i det offentlige domæne.
+        already_declared: Du har allerede erklæret, at du anser dine redigeringer
+          for at være i det offentlige domæne.
+        did_not_confirm: Du har ikke bekræftet, at du anser dine redigeringer for
+          at være i det offentlige domæne.
   browse:
     deleted_ago_by_html: Slettet %{time_ago} af %{user}
     edited_ago_by_html: Redigeret %{time_ago} af %{user}
@@ -2765,10 +2780,12 @@ da:
       write_prefs: Ændre brugerpræferencer
       write_diary: Udgiv blogindlæg og kommentarer
       write_api: Ændre kortet
+      write_changeset_comments: Kommenter på ændringssæt
       read_gpx: Læse private GPS-spor
       write_gpx: Overføre GPS-spor
       write_notes: Ændre bemærkninger
       write_redactions: Rediger kortdata
+      write_blocks: Opret og ophæv brugerblokeringer
       read_email: Læse brugerens e-mailadresse
       consume_messages: Læs, opdater status og slet brugerbeskeder
       send_messages: Send private beskeder til andre brugere
@@ -2828,7 +2845,7 @@ da:
   users:
     new:
       title: Opret konto
-      tab_title: Opret en konto
+      tab_title: Opret konto
       signup_to_authorize_html: Tilmeld dig OpenStreetMap for at få adgang til %{client_app_name}.
       no_auto_account_create: Vi kan desværre ikke oprette en konto automatisk for
         dig pt.
@@ -2858,8 +2875,6 @@ da:
         privacy_policy_title: OSMF privatlivspolitik inklusiv afsnit om e-mailadresser
         html: Din adresse vises ikke offentligt. Se vores %{privacy_policy_link} for
           flere oplysninger.
-      consider_pd_html: Jeg anser mine bidrag for at være i %{consider_pd_link}.
-      consider_pd: offentligt domæne
       or: eller
       use external auth: eller tilmeld dig med en tredjepart
     no_such_user:
@@ -2875,7 +2890,7 @@ da:
       my notes: Mine bemærkninger
       my messages: Mine meddelelser
       my profile: Min profil
-      my settings: Mine indstillinger
+      my_account: Min konto
       my comments: Mine kommentarer
       my_preferences: Mine præferencer
       my_dashboard: Mit kontrolpanel
@@ -2956,13 +2971,23 @@ da:
       show:
         title: Brugere
         heading: Brugere
-        empty: Ingen brugere fundet
+        select_status: Vælg status
+        states:
+          pending: Afventer
+          active: Aktiv
+          confirmed: Bekræftet
+          suspended: Suspenderet
+          deleted: Slettet
+        name_or_email: Navn eller e-mail
+        ip_address: IP-adresse
+        search: Søg
       page:
         found_users:
           one: '%{count} bruger fundet'
           other: '%{count} brugere fundet'
         confirm: Bekræft valgte brugere
         hide: Skjul valgte brugere
+        empty: Ingen brugere fundet
       user:
         summary_html: '%{name} oprettet fra %{ip_address} på %{date}'
         summary_no_ip_html: '%{name} oprettet på %{date}'
@@ -3165,6 +3190,7 @@ da:
       closed_title: 'Løst bemærkning #%{note_name}'
       hidden_title: 'Skjult bemærkning #%{note_name}'
       description_when_author_is_deleted: slettet
+      description_when_there_is_no_opening_comment: ukendt
       event_opened_by_html: Oprettet af %{user} %{time_ago}
       event_opened_by_anonymous_html: Oprettet af anonym %{time_ago}
       event_commented_by_html: Kommentar fra %{user} %{time_ago}
@@ -3399,6 +3425,8 @@ da:
           ninth: "9."
           tenth: "10."
       time: Tid
+      download: Download rute som GeoJSON
+      filename: rute
     query:
       node: Punkt
       way: Vej
@@ -3413,6 +3441,9 @@ da:
       show_address: Vis adresse
       query_features: Find kortobjekter
       centre_map: Centrer kort her
+    home:
+      marker_title: Mit hjemsted
+      not_set: Hjemsted er ikke angivet for din konto
   redactions:
     edit:
       heading: Rediger omarbejdelse
index afc9243fae1c4bee3bf754d615800250e8f4608b..0a1be26ba3ad0394864f04552670f7ae8a42b204 100644 (file)
@@ -8,6 +8,7 @@
 # Author: Alefar
 # Author: Als-Holder
 # Author: Amilopowers
+# Author: AnnaTheProgrammer777
 # Author: AnupamM
 # Author: Apmon
 # Author: Atomkraftzwerg
@@ -71,6 +72,7 @@
 # Author: Manfredbrandl
 # Author: Markobr
 # Author: MarkusHD
+# Author: Marwin H.H.
 # Author: McDutchie
 # Author: Mcandri13
 # Author: Mcliquid
@@ -201,6 +203,7 @@ de:
         allow_write_prefs: Ihre Benutzereinstellungen verändern
         allow_write_diary: Blogeinträge und Kommentare erstellen
         allow_write_api: Karte bearbeiten
+        allow_write_changeset_comments: Kommentieren von Änderungssätzen
         allow_read_gpx: Zugriff auf ihre privaten GPS-Tracks
         allow_write_gpx: GPS-Track hochladen
         allow_write_notes: Notizen bearbeiten
@@ -356,9 +359,9 @@ de:
         comment: Kommentar
         full: Vollständiger Hinweis
   accounts:
-    edit:
+    show:
       title: Benutzerkonto bearbeiten
-      my settings: Einstellungen
+      my_account: Mein Benutzerkonto
       current email address: Aktuelle E-Mail-Adresse
       external auth: Externe Authentifikation
       openid:
@@ -375,6 +378,9 @@ de:
           (unter Public Domain stellst).
         link: https://wiki.osmfoundation.org/w/index.php?title=Licence/Contributor_Terms&uselang=de
         link text: Was bedeutet dies?
+        not_agreed_with_pd: Du hast nicht erklärt, dass du deine Bearbeitungen als
+          gemeinfrei betrachtest.
+        pd_link_text: erklären
       save changes button: Änderungen speichern
       delete_account: Konto löschen …
     go_public:
@@ -441,10 +447,6 @@ de:
           Infrastruktur, die von der OSMF zur Verfügung gestellt wird. Klicke bitte
           auf den Link, lies den Text und stimme dann zu.
         read_tou: Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu
-        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://wiki.openstreetmap.org/wiki/DE:Editing_Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Informationen zum Verständnis dieser Begriffe: ein %{readable_summary_link}
           und einige %{informal_translations_link}'
         readable_summary: menschenlesbare Zusammenfassung
@@ -467,6 +469,20 @@ de:
           findest du auf %{terms_declined_link}.
         terms_declined_link: diese Wiki-Seite
         terms_declined_url: https://wiki.openstreetmap.org/wiki/DE:Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Betrachte meine Beiträge als gemeinfrei
+        consider_pd: Ich betrachte meine Beiträge als gemeinfrei
+        consider_pd_why: Warum sollte ich wollen, dass meine Beiträge gemeinfrei sind?
+        consider_pd_why_url: https://wiki.openstreetmap.org/wiki/DE:Editing_Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Bestätigen
+      create:
+        successfully_declared: Du hast zudem erklärt, dass du deine Beiträge gemeinfrei
+          veröffentlichst (unter Public Domain stellst).
+        already_declared: Du hast zudem erklärt, dass du deine Beiträge gemeinfrei
+          veröffentlichst (unter Public Domain stellst).
+        did_not_confirm: Du hast nicht bestätigt, dass du deine Bearbeitungen als
+          gemeinfrei betrachtest.
   browse:
     deleted_ago_by_html: Gelöscht %{time_ago} von %{user}
     edited_ago_by_html: Bearbeitet %{time_ago} von %{user}
@@ -2920,10 +2936,12 @@ de:
       write_prefs: Benutzereinstellungen verändern
       write_diary: Benutzereinträge und Kommentare erstellen
       write_api: Karte bearbeiten
+      write_changeset_comments: Kommentar zu Änderungen
       read_gpx: Private GPS-Tracks lesen
       write_gpx: GPS-Tracks hochladen
       write_notes: Notizen bearbeiten
       write_redactions: Kartendaten redigieren
+      write_blocks: Benutzersperren erstellen und aufheben
       read_email: Lesen der Benutzer-E-Mail-Adresse
       consume_messages: Lesen, Aktualisieren des Status und Löschen von Benutzernachrichten
       send_messages: Private Nachrichten an andere Benutzer senden
@@ -3018,8 +3036,6 @@ de:
         privacy_policy_title: OSMF-Datenschutzrichtlinie mit Abschnitt über E-Mail-Adressen
         html: Deine Adresse wird nicht öffentlich angezeigt. Weitere Informationen
           findest du in unserer %{privacy_policy_link}.
-      consider_pd_html: Ich betrachte meine Beiträge als %{consider_pd_link}.
-      consider_pd: gemeinfrei
       or: oder
       use external auth: oder melde dich über einen Drittanbieter an
     no_such_user:
@@ -3035,7 +3051,7 @@ de:
       my notes: Meine Hinweise
       my messages: Nachrichten
       my profile: Profil
-      my settings: Einstellungen
+      my_account: Mein Benutzerkonto
       my comments: Meine Kommentare
       my_preferences: Benutzereinstellungen
       my_dashboard: Meine Übersichtsseite
@@ -3116,13 +3132,23 @@ de:
       show:
         title: Benutzer
         heading: Benutzer
-        empty: Keine übereinstimmenden Benutzer gefunden
+        select_status: Status auswählen
+        states:
+          pending: Ausstehend
+          active: Aktiv
+          confirmed: Bestätigt
+          suspended: Ausgesetzt
+          deleted: Gelöscht
+        name_or_email: Name oder E-Mail
+        ip_address: IP-Adresse
+        search: Suchen
       page:
         found_users:
           one: '%{count} Benutzer gefunden'
           other: '%{count} Benutzer gefunden'
         confirm: Bestätige ausgewählte Benutzer
         hide: Ausgewählte Benutzer ausblenden
+        empty: Keine übereinstimmenden Benutzer gefunden
       user:
         summary_html: '%{name} erstellt von %{ip_address} am %{date}'
         summary_no_ip_html: '%{name} erstellt am %{date}'
@@ -3328,6 +3354,7 @@ de:
       closed_title: Erledigter Hinweis Nr. %{note_name}
       hidden_title: Versteckter Hinweis Nr. %{note_name}
       description_when_author_is_deleted: gelöscht
+      description_when_there_is_no_opening_comment: unbekannt
       event_opened_by_html: Erstellt von %{user} %{time_ago}
       event_opened_by_anonymous_html: Erstellt von anonym %{time_ago}
       event_commented_by_html: Kommentar von %{user} %{time_ago}
@@ -3377,7 +3404,6 @@ de:
         url: https://wiki.openstreetmap.org/wiki/DE:Beginners%27_guide
       counter_warning_forum_link:
         text: die Gemeinschaft kann dir helfen
-        url: https://community.openstreetmap.org/
       advice: Deine Meldung ist öffentlich und kann zur Aktualisierung der Karte verwendet
         werden. Gib deshalb keine persönlichen oder urheberrechtlich geschützten Informationen
         von anderen Karten oder Verzeichnislisten an.
@@ -3568,6 +3594,8 @@ de:
           ninth: neunte
           tenth: zehnte
       time: Zeit
+      download: Route als GeoJSON herunterladen
+      filename: route
     query:
       node: Knoten
       way: Linie
@@ -3582,6 +3610,9 @@ de:
       show_address: Adresse anzeigen
       query_features: Objektabfrage
       centre_map: Karte hier zentrieren
+    home:
+      marker_title: Mein Heimatort
+      not_set: Der Heimatort ist für dein Konto nicht festgelegt
   redactions:
     edit:
       heading: Redaction bearbeiten
index 16ecf20e2e2198a008aaef054344b37887564ec0..ae4faf8627fe244f0dfe9080341184bacb634432 100644 (file)
@@ -183,9 +183,8 @@ diq:
         comment: Mışewre
         full: Note pêro
   accounts:
-    edit:
+    show:
       title: Hesabi bıvurne
-      my settings: Eyarê mı
       current email address: 'E-postay şımaya newki:'
       openid:
         link text: no çıko?
@@ -198,7 +197,6 @@ diq:
       show:
         title: Terimi
         heading: Terimi
-        consider_pd_why: no çıko?
         continue: Dewam ke
         legale_names:
           france: Fransa
@@ -974,7 +972,6 @@ diq:
       my diary: Rocekê mı
       my edits: İştırakê mı
       my traces: GPS rêçê mı
-      my settings: Eyarê Mı
       my comments: Mışewrey mı
       blocks on me: Bloqeyê mı
       blocks by me: Bloqe kerdışê mı
index a22f1962aeda25802134086cf1edc2f6b38e2dea..0e5ee3ba1bec9b70c9d08cbe060b32cc542a779e 100644 (file)
@@ -155,9 +155,8 @@ dsb:
         comment: Komentar
         full: Dopołna pokazka
   accounts:
-    edit:
+    show:
       title: Konto wobźěłaś
-      my settings: Móje nastajenja
       current email address: 'Aktualna e-mailowa adresa:'
       openid:
         link text: Co to jo?
@@ -184,9 +183,6 @@ dsb:
       show:
         title: Wuměnjenja za sobustatkujucych
         heading: Wuměnjenja za pśinosowarjow
-        consider_pd: Pśidatnje ku górjejce dojadnanjeju, mam swóje pśinoski za zjawnosć
-          pśistupne.
-        consider_pd_why: Co to jo?
         you need to accept or decline: Pšosym pśecytaj nowe wužywarske wuměnjenja
           a akceptěruj abo wótpokaž je, nježli až dalej cyniš.
         legale_select: 'Pšosym wubjeŕ kraj swójogo bydleńskego sedla:'
@@ -1391,7 +1387,6 @@ dsb:
       my notes: Móje pokazki
       my messages: Móje powěsći
       my profile: Mój profil
-      my settings: Móje nastajenja
       my comments: Móje komentary
       my_preferences: Móje preference
       my_dashboard: Mój pśeglědowy bok
@@ -1445,10 +1440,10 @@ dsb:
       show:
         title: Wužywarje
         heading: Wužywarje
-        empty: Žedne wótpowědujuce wužywarje namakane
       page:
         confirm: Wubranych wužywarjow wobkšuśiś
         hide: Wubranych wužywarjow schowaś
+        empty: Žedne wótpowědujuce wužywarje namakane
       user:
         summary_html: '%{name} wót %{ip_address} dnja %{date} napórany'
         summary_no_ip_html: '%{name} dnja %{date} napórany'
index 8b04dfaf012376227bfb6dc288f4521013a95fcd..7150d5b8be41c27dbb73565eee37f96f9fa8a774 100644 (file)
@@ -130,6 +130,7 @@ el:
         allow_write_prefs: τροποποίηση των προτιμήσεων χρήστη
         allow_write_diary: δημιουργία καταχωρήσεων ημερολογίου και σχολίων
         allow_write_api: τροποποίηση του χάρτη
+        allow_write_changeset_comments: σχολιάζει στα σύνολα αλλαγών
         allow_read_gpx: ανάγνωση των προσωπικών ιχνών GPS
         allow_write_gpx: μεταφόρτωση ιχνών GPS
         allow_write_notes: τροποποίηση σημειώσεων
@@ -285,12 +286,13 @@ el:
         comment: Σχόλιο
         full: Πλήρης σημείωση
   accounts:
-    edit:
+    show:
       title: Επεξεργασία λογαριασμού
-      my settings: Οι ρυθμίσεις μου
+      my_account: Ο λογαριασμός μου
       current email address: Τρέχουσα διεύθυνση ηλεκτρονικού ταχυδρομείου
       external auth: Εξωτερική επαλήθευση ταυτότητας
       openid:
+        link: https://wiki.openstreetmap.org/wiki/OpenID
         link text: τι είναι αυτό;
       contributor terms:
         heading: Όροι Συνεισφοράς
@@ -300,7 +302,11 @@ el:
           σας και την αποδοχή των νέων Όρων Συνεισφοράς.
         agreed_with_pd: Δηλώσατε επίσης ότι αποδέχεστε ότι οι τροποποιήσεις σας αποτελούν
           κοινό κτήμα.
+        link: https://osmfoundation.org/wiki/Licence/Contributor_Terms
         link text: τι είναι αυτό;
+        not_agreed_with_pd: Δεν έχετε δηλώσει ότι θεωρείτε ότι οι τροποποιήσεις σας
+          ανήκουν στον Δημόσιο Τομέα.
+        pd_link_text: δηλώστε
       save changes button: Αποθήκευση αλλαγών
       delete_account: Διαγραφή λογαριασμού...
     go_public:
@@ -368,9 +374,6 @@ el:
           άλλης υποδομής που προσφέρει η OSMF. Παρακαλούμε ακολουθήστε τον σύνδεσμο,
           διαβάστε και αποδεχτείτε το κείμενο.
         read_tou: Έχω διαβάσει και αποδέχομαι τους όρους χρήσης
-        consider_pd: Και επιπρόσθετα στην παραπάνω συμφωνία, καταστώ τις συνεισφορές
-          μου στο κοινό κτήμα (για ελεύθερη χρήση)
-        consider_pd_why: τι είναι αυτό;
         guidance_info_html: 'Πληροφορίες για να βοηθήσουν να κατανοήσετε αυτούς τους
           όρους: μια %{readable_summary_link} και μερικές %{informal_translations_link}'
         readable_summary: περίληψη αναγνώσιμη από τον άνθρωπο
@@ -390,6 +393,21 @@ el:
         terms_declined_html: Λυπούμαστε που αποφασίσατε να μην αποδεχτείτε τους νέους
           Όρους Συνεισφοράς. Για περισσότερες πληροφορίες, ανατρέξτε στο %{terms_declined_link}.
         terms_declined_link: αυτή η σελίδα wiki
+        terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Θεωρήστε τις συνεισφορές μου να είναι στον Δημόσιο Τομέα
+        consider_pd: Θεωρώ ότι οι συνεισφορές μου είναι στον Δημόσιο Τομέα
+        consider_pd_why: Γιατί θα ήθελα οι συνεισφορές μου να είναι στον Δημόσιο Τομέα;
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Επιβεβαίωση
+      create:
+        successfully_declared: Δηλώσατε επιτυχώς ότι θεωρείτε ότι οι τροποποιήσεις
+          σας ανήκουν στον Δημόσιο Τομέα.
+        already_declared: Έχετε ήδη δηλώσει ότι θεωρείτε ότι οι τροποποιήσεις σας
+          ανήκουν στον Δημόσιο Τομέα.
+        did_not_confirm: Δεν έχετε επιβεβαιώσει ότι θεωρείτε ότι οι τροποποιήσεις
+          σας ανήκουν στον Δημόσιο Τομέα.
   browse:
     deleted_ago_by_html: Διαγράφηκε %{time_ago} από %{user}
     edited_ago_by_html: Επεξεργάστηκε %{time_ago} από %{user}
@@ -1041,6 +1059,7 @@ el:
           bridleway: Μονοπάτι για άλογα
           bus_guideway: Λωρίδα καθοδηγούμενου λεωφορείου
           bus_stop: Στάση λεωφορείου
+          busway: Λεωφορειόδρομος
           construction: Δρόμος υπό κατασκευή
           corridor: Διάδρομος
           crossing: Διάβαση
@@ -1729,6 +1748,13 @@ el:
     communities: Κοινότητες
     learn_more: Μάθετε περισσότερα
     more: Περισσότερα
+    offline_flash:
+      osm_offline: Η βάση δεδομένων του OpenStreetMap είναι προσωρινά εκτός λειτουργίας
+        λόγω απαραίτητων εργασιών συντήρησης.
+      osm_read_only: Η βάση δεδομένων του OpenStreetMap έχει τεθεί προσωρινά σε λειτουργία
+        «μόνο για ανάγνωση» λόγω απαραίτητων εργασιών συντήρησης.
+      expected_restore_html: Οι υπηρεσίες αναμένεται να αποκατασταθούν σε %{time}.
+      announcement: Μπορείτε να διαβάσετε την ανακοίνωση εδώ.
   user_mailer:
     diary_comment_notification:
       description: 'OpenStreetMap Καταχώριση Ημερολογίου #%{id}'
@@ -2367,6 +2393,8 @@ el:
       not_public_description_html: Δεν μπορείτε πλέον να επεξεργαστείτε το χάρτη αν
         δεν το κάνετε. Μπορείτε να κάνετε τις επεξεργασίες σας δημόσιες από την %{user_page}.
       user_page_link: σελίδα χρήστη
+      anon_edits_html: (%{link})
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
       anon_edits_link_text: Μάθετε γιατί συμβαίνει αυτό.
     edit:
       id_not_configured: Ο iD δεν έχει ρυθμιστεί
@@ -2827,10 +2855,12 @@ el:
       write_prefs: Τροποποιεί τις προτιμήσεις χρήστη
       write_diary: Δημιουργεί καταχωρήσεις ημερολογίου και σχόλια
       write_api: Τροποποίηση του χάρτη
+      write_changeset_comments: Σχολιάζει στα σύνολα αλλαγών
       read_gpx: Ανάγνωση προσωπικών ιχνών GPS
       write_gpx: Μεταφόρτωση ιχνών GPS
       write_notes: Τροποποίηση σημειώσεων
       write_redactions: Αφαίρεση και απόκρυψη δεδομένων χάρτη
+      write_blocks: Δημιουργία και ανάκληση φραγών χρηστών
       read_email: Διαβάζει τη διεύθυνση email χρήστη
       consume_messages: Ανάγνωση, ενημέρωση της κατάστασης και διαγραφή των μηνυμάτων
         χρήστη
@@ -2926,8 +2956,6 @@ el:
           για τις διευθύνσεις ηλεκτρονικού ταχυδρομείου
         html: Η διεύθυνσή σας δεν εμφανίζεται δημόσια, ανατρέξτε στην %{privacy_policy_link}
           για περισσότερες πληροφορίες.
-      consider_pd_html: Θεωρώ τις συνεισφορές μου να είναι στο %{consider_pd_link}.
-      consider_pd: κοινό κτήμα
       or: ή
       use external auth: ή συνδεθείτε μέσω τρίτης υπηρεσίας
     no_such_user:
@@ -2944,7 +2972,7 @@ el:
       my notes: Οι σημειώσεις μου
       my messages: Τα μηνύματά μου
       my profile: Το προφίλ μου
-      my settings: Οι ρυθμίσεις μου
+      my_account: Ο λογαριασμός μου
       my comments: Τα σχόλιά μου
       my_preferences: Οι προτιμήσεις μου
       my_dashboard: Το ταμπλό μου
@@ -3025,13 +3053,22 @@ el:
       show:
         title: Χρήστες
         heading: Χρήστες
-        empty: Δεν βρέθηκαν χρήστες που να ταιριάζουν
+        select_status: Επιλογή κατάστασης
+        states:
+          pending: Σε εκκρεμότητα
+          active: Ενεργός
+          confirmed: Επιβεβαιωμένος
+          suspended: Σε αναστολή
+          deleted: Διαγραμμένος
+        ip_address: Διεύθυνση IP
+        search: Αναζήτηση
       page:
         found_users:
           one: '%{count} χρήστης βρέθηκε'
           other: '%{count} χρήστες βρέθηκαν'
         confirm: Επιβεβαίωση επιλεγμένων χρηστών
         hide: Απόκρυψη επιλεγμένων χρηστών
+        empty: Δεν βρέθηκαν χρήστες που να ταιριάζουν
       user:
         summary_html: '%{name} δημιουργήθηκε από την διεύθυνση IP %{ip_address} στις
           %{date}'
@@ -3488,6 +3525,9 @@ el:
       show_address: Εμφάνιση διεύθυνσης
       query_features: Πληροφορίες χαρακτηριστικών
       centre_map: Κεντράρισμα χάρτη εδώ
+    home:
+      marker_title: Τοποθεσία του σπιτιού μου
+      not_set: Η τοποθεσία του σπιτιού δεν έχει οριστεί για τον λογαριασμό σας
   redactions:
     edit:
       heading: Επεξεργασία παράληψης
index c4a56827adf701efb5c2725827a894c820a800ae..9b51b70bdd753dffdc4cd78d8e0d4e8adf5a1863 100644 (file)
@@ -235,9 +235,8 @@ en-GB:
         comment: Comment
         full: Full note
   accounts:
-    edit:
+    show:
       title: Edit account
-      my settings: My settings
       external auth: External Authentication
       openid:
         link text: what is this?
@@ -260,9 +259,6 @@ en-GB:
       show:
         title: Terms
         heading: Terms
-        consider_pd: In addition to the above, I consider my contributions to be in
-          the Public Domain
-        consider_pd_why: what's this?
         you need to accept or decline: Please read and then either accept or decline
           the new Contributor Terms to continue.
         legale_select: 'Country of residence:'
@@ -1618,7 +1614,6 @@ en-GB:
       my notes: My Notes
       my messages: My Messages
       my profile: My Profile
-      my settings: My Settings
       my comments: My Comments
       blocks on me: Blocks on Me
       blocks by me: Blocks by Me
@@ -1667,10 +1662,10 @@ en-GB:
       show:
         title: Users
         heading: Users
-        empty: No matching users found
       page:
         confirm: Confirm Selected Users
         hide: Hide Selected Users
+        empty: No matching users found
       user:
         summary_html: '%{name} created from %{ip_address} on %{date}'
         summary_no_ip_html: '%{name} created on %{date}'
index 42669ca9e3f5ba19ac77998c7cc3b0130dc7aa0f..b56fb6410c6af3c6460180e2d7921518d247ce7c 100644 (file)
@@ -244,7 +244,7 @@ en:
         comment: Comment
         full: Full note
   accounts:
-    edit:
+    show:
       title: "Edit account"
       my_account: My Account
       current email address: "Current Email Address"
@@ -2382,6 +2382,14 @@ en:
       where_am_i_title: Describe the current location using the search engine
       submit_text: "Go"
       reverse_directions_text: "Reverse Directions"
+      modes:
+        bicycle: "Bicycle"
+        car: "Car"
+        foot: "Foot"
+      providers:
+        fossgis_osrm: "OSRM"
+        graphhopper: "GraphHopper"
+        fossgis_valhalla: "Valhalla"
     key:
       table:
         entry:
@@ -2897,6 +2905,7 @@ en:
           confirmed: Confirmed
           suspended: Suspended
           deleted: Deleted
+        name_or_email: Name or Email
         ip_address: IP Address
         search: Search
       page:
@@ -3095,6 +3104,7 @@ en:
       closed_title: "Resolved note #%{note_name}"
       hidden_title: "Hidden note #%{note_name}"
       description_when_author_is_deleted: "deleted"
+      description_when_there_is_no_opening_comment: "unknown"
       event_opened_by_html: "Created by %{user} %{time_ago}"
       event_opened_by_anonymous_html: "Created by anonymous %{time_ago}"
       event_commented_by_html: "Comment from %{user} %{time_ago}"
@@ -3227,16 +3237,6 @@ en:
     edit_help: Move the map and zoom in on a location you want to edit, then click here.
     directions:
       ascend: "Ascend"
-      engines:
-        fossgis_osrm_bike: "Bicycle (OSRM)"
-        fossgis_osrm_car: "Car (OSRM)"
-        fossgis_osrm_foot: "Foot (OSRM)"
-        graphhopper_bicycle: "Bicycle (GraphHopper)"
-        graphhopper_car: "Car (GraphHopper)"
-        graphhopper_foot: "Foot (GraphHopper)"
-        fossgis_valhalla_bicycle: "Bicycle (Valhalla)"
-        fossgis_valhalla_car: "Car (Valhalla)"
-        fossgis_valhalla_foot: "Foot (Valhalla)"
       descend: "Descend"
       directions: "Directions"
       distance: "Distance"
@@ -3312,6 +3312,8 @@ en:
           ninth: "9th"
           tenth: "10th"
       time: "Time"
+      download: "Download route as GeoJSON"
+      filename: "route"
     query:
       node: Node
       way: Way
index 62757cc2504b8787bd7454ae0cdbd00614a488ad..e3239f50289083fc2a6f3af1c99052be74b1f3f4 100644 (file)
@@ -111,6 +111,7 @@ eo:
         allow_write_prefs: modifi preferojn de uzantoj
         allow_write_diary: afiŝi en taglibro kaj komenti
         allow_write_api: redakti la mapon
+        allow_write_changeset_comments: komenti ŝanĝarojn
         allow_read_gpx: legi privatajn GPS-spurojn
         allow_write_gpx: alŝuti GPS-spurojn
         allow_write_notes: modifi rimarkojn
@@ -263,9 +264,9 @@ eo:
         comment: Komento
         full: Tuta rimarko
   accounts:
-    edit:
+    show:
       title: Redakti konton
-      my settings: Miaj agordoj
+      my_account: Mia konto
       current email address: Aktuala retpoŝta adreso
       external auth: Ekstera aŭtentigo
       openid:
@@ -278,7 +279,10 @@ eo:
           interkonsenton pri uzado.
         agreed_with_pd: Vi ankaŭ deklaris, ke viaj kontribuaĵoj estas en la publika
           havaĵo.
-        link text: Pliaj informoj
+        link text: pliaj informoj
+        not_agreed_with_pd: Vi ne deklaris, por ke viaj kontribuaĵoj estu en la publika
+          havaĵo.
+        pd_link_text: deklari
       save changes button: Konservi ŝanĝojn
       delete_account: Forigi konton…
     go_public:
@@ -340,9 +344,6 @@ eo:
           infrastrukturo provizata de la Fondaĵo OSM. Bonvolu alklaki la ligilon,
           legi, kaj konsenti la tekston.
         read_tou: Mi legis kaj konsentas la Uzkondiĉojn
-        consider_pd: Krom la ĉi-supro, mi konfirmas, ke miaj kontribuaĵoj apartenas
-          al la publika havaĵo
-        consider_pd_why: Pliaj informoj
         guidance_info_html: 'Pliaj informoj helpantaj kompreni ilin: %{readable_summary_link}
           kaj kelkaj %{informal_translations_link}'
         readable_summary: konciza sumiĝo
@@ -362,6 +363,20 @@ eo:
         terms_declined_html: Bedaŭrinde vi ne akceptis la novan interkonsenton pri
           kontribuado. Por pli da informoj, ekkonu kun %{terms_declined_link}.
         terms_declined_link: tiu ĉi viki‑paĝo
+    pd_declarations:
+      show:
+        title: Deklari miajn kontribuaĵojn kiel la publikan havaĵon
+        consider_pd: Mi deklaras, por ke miaj kontribuaĵoj (redaktoj) estu en la publika
+          havaĵo.
+        consider_pd_why: Kiel vi volus, ke miaj kontribuaĵoj estu publikaj?
+        confirm: Konfirmi
+      create:
+        successfully_declared: Vi sukcese deklaris, por ke viaj redaktoj estu en la
+          publika havaĵo.
+        already_declared: Vi jam deklaris, por ke viaj redaktoj estu en la publika
+          havaĵo.
+        did_not_confirm: Vi malkonsentis, por ke viaj redaktoj estu en la publika
+          havaĵo.
   browse:
     deleted_ago_by_html: Forigita %{time_ago} de %{user}
     edited_ago_by_html: Redaktita %{time_ago} de %{user}
@@ -1001,6 +1016,7 @@ eo:
           bridleway: Ĉevalvojo
           bus_guideway: Aŭtobus-trako
           bus_stop: Haltejo aŭtobusa
+          busway: Aŭtobusa vojo
           construction: Vojo konstruata
           corridor: Koridoro
           crossing: Trapasejo
@@ -1571,6 +1587,7 @@ eo:
       reports: Raportoj
       last_updated: Laste aktualigita
       last_updated_time_ago_user_html: '%{time_ago} de %{user}'
+      reporting_users: Raportantaj uzantoj
       reports_count:
         one: '%{count} raporto'
         other: '%{count} raportoj'
@@ -1609,6 +1626,8 @@ eo:
       reopened: Problemo estas malfermita
     comments:
       comment_from_html: Komento fare de %{user_link} je %{comment_created_at}
+      reassign_to_moderators: Reasigni problemon al kontrolantoj
+      reassign_to_administrators: Reasigni problemon al administrantoj
     reports:
       reported_by_html: Raportita kiel %{category} fare de %{user} je %{updated_at}
     helper:
@@ -1684,6 +1703,13 @@ eo:
     communities: Komunumoj
     learn_more: Ekscii pli
     more: Pli
+    offline_flash:
+      osm_offline: La OpenStreetMap-datumbazo estas nuntempe eksterreta pro necesaj
+        laboroj de prizorgado.
+      osm_read_only: La OpenStreetMap-datumbazo estas nuntempe en nurlega reĝimo pro
+        necesaj laboroj de prizorgado.
+      expected_restore_html: La servoj probable estos restarigitaj je %{time}.
+      announcement: Vi povas legi la afiŝon tie ĉi.
   user_mailer:
     diary_comment_notification:
       description: 'OpenStreetMap: taglibra afiŝo %{id}'
@@ -2721,10 +2747,12 @@ eo:
       write_prefs: modifi preferojn de uzanto
       write_diary: afiŝi en taglibro kaj komenti
       write_api: redakti la mapon
+      write_changeset_comments: komenti ŝanĝarojn
       read_gpx: legi privatajn GPS-spurojn
       write_gpx: alŝuti GPS-spurojn
       write_notes: modifi rimarkojn
       write_redactions: Redakti map-datumojn
+      write_blocks: krei kaj nuligi blokadojn al uzantoj
       read_email: legi retpoŝtan adreson de uzanto
       consume_messages: legi, ŝanĝi staton kaj forigi mesaĝojn de uzanto
       send_messages: sendi privatajn mesaĝojn al aliaj uzantoj
@@ -2816,8 +2844,6 @@ eo:
           de retpoŝta adreso
         html: Via retpoŝta adreso ne estas publike montrata, legu nian %{privacy_policy_link}
           por pli da informoj.
-      consider_pd_html: Mi konsideras ke miaj kontribuoj estu eldonitaj en la %{consider_pd_link}.
-      consider_pd: publika havaĵo
       or: aŭ
       use external auth: 'registriĝi per ekstera liveranto:'
     no_such_user:
@@ -2833,7 +2859,7 @@ eo:
       my notes: Miaj rimarkoj
       my messages: Mesaĝoj
       my profile: Profilo
-      my settings: Agordoj
+      my_account: Mia konto
       my comments: Miaj komentoj
       my_preferences: Preferoj
       my_dashboard: Panelo
@@ -2911,21 +2937,31 @@ eo:
       show:
         title: Uzantoj
         heading: Uzantoj
-        empty: Kongruaj uzantoj ne trovitaj
+        select_status: Elekti staton
+        states:
+          pending: pritraktata
+          active: aktiva
+          confirmed: konfirmita
+          suspended: blokita
+          deleted: forigita
+        name_or_email: Nomo aŭ retpoŝta adreso
+        ip_address: IP-adreso
+        search: Serĉi
       page:
         found_users:
           one: '%{count} trovita uzanto'
           other: '%{count} trovitaj uzantoj'
         confirm: Konfirmi elektitajn uzantojn
         hide: Kaŝi elektitajn uzantojn
+        empty: Kongruaj uzantoj ne trovitaj
       user:
         summary_html: '%{name} kreita de %{ip_address} je %{date}'
         summary_no_ip_html: '%{name} kreita je %{date}'
     comments:
       index:
         heading_html: Komentoj de %{user}
-        changesets: pri ŝanĝaroj
-        diary_entries: pri taglibraj afiŝoj
+        changesets: Ŝanĝaroj
+        diary_entries: Taglibroj
         no_comments: Neniu komento
     changeset_comments:
       index:
@@ -2942,8 +2978,8 @@ eo:
         when: Kiam
         comment: Komento
     suspended:
-      title: Konto haltigita
-      heading: Konto haltigita
+      title: Konto blokita
+      heading: Konto blokita
       support: subtena teamo
       automatically_suspended: Bedaŭrinde via konto estas aŭtomate blokita pro suspektinda
         agado.
@@ -3111,6 +3147,8 @@ eo:
       open_title: 'Nesolvita rimarko #%{note_name}'
       closed_title: 'Solvita rimarko #%{note_name}'
       hidden_title: 'Kaŝita rimarko #%{note_name}'
+      description_when_author_is_deleted: forigita
+      description_when_there_is_no_opening_comment: nekonata
       event_opened_by_html: Kreita de %{user} %{time_ago}
       event_opened_by_anonymous_html: Anonime kreita %{time_ago}
       event_commented_by_html: Komento de %{time_ago} de %{user}
@@ -3348,6 +3386,8 @@ eo:
           ninth: 9-an
           tenth: 10-an
       time: Tempo
+      download: Elŝuti kurson kiel GeoJSON
+      filename: kurso
     query:
       node: Nodo
       way: Linio
@@ -3362,6 +3402,9 @@ eo:
       show_address: Montri adreson
       query_features: Informoj pri objektoj
       centre_map: Centrigi mapon ĉi tien
+    home:
+      marker_title: Mia hejmloko
+      not_set: Hejmloko ne estas agordita por via konto
   redactions:
     edit:
       heading: Redakti korekton
index 93b5a730b9a489439cecbf1047ffbc18968f4cff..bd1fdc550318e5de2883e2aca49e8d33c04797c2 100644 (file)
@@ -338,9 +338,8 @@ es:
         comment: Comentario
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Editar Cuenta
-      my settings: Mis configuraciones
       current email address: Dirección de correo electrónico actual
       external auth: Autentificación externa
       openid:
@@ -422,9 +421,6 @@ es:
         tou_explain_html: Estos %{tou_link} rigen el uso del sitio web y de la infraestructura
           provista por OSMF. Haz clic en el enlace, lee y acepta el texto.
         read_tou: He leído y estoy de acuerdo con los Términos de Uso
-        consider_pd: Además del acuerdo anterior, considero que mis contribuciones
-          se encuentran en Dominio Público.
-        consider_pd_why: ¿Qué es esto?
         guidance_info_html: 'Información para ayudar a comprender estos términos:
           un %{readable_summary_link} y algunas %{informal_translations_link}'
         readable_summary: resumen legible por humanos
@@ -2910,9 +2906,6 @@ es:
           sobre direcciones de correo electrónico
         html: Tu dirección no se mostrará públicamente, consulta nuestra %{privacy_policy_link}
           para obtener más información.
-      consider_pd_html: Considero que mis contribuciones estén en el %{consider_pd_link}.
-      consider_pd: dominio público
-      consider_pd_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       or: o
       use external auth: o registrarse con un tercero
     no_such_user:
@@ -2928,7 +2921,6 @@ es:
       my notes: Mis notas
       my messages: Mis mensajes
       my profile: Mi perfil
-      my settings: Mis configuraciones
       my comments: Mis comentarios
       my_preferences: Mis preferencias
       my_dashboard: Mi tablero
@@ -3007,13 +2999,13 @@ es:
       show:
         title: Usuarios
         heading: Usuarios
-        empty: No hay usuarios coincidentes
       page:
         found_users:
           one: '%{count} usuario encontrado'
           other: '%{count} usuarios encontrados'
         confirm: Confirmar usuarios seleccionados
         hide: Ocultar usuarios seleccionados
+        empty: No hay usuarios coincidentes
       user:
         summary_html: '%{name} creado desde %{ip_address} el %{date}'
         summary_no_ip_html: '%{name} creado el %{date}'
index 77e3f228f92dd7d2e6a0d31e003248a5bfef7f2a..3378a05c4e3cd42cf3490f20a7557decacc05ca8 100644 (file)
@@ -241,9 +241,8 @@ et:
         comment: Kommentaar
         full: Täielik tekst
   accounts:
-    edit:
+    show:
       title: Konto muutmine
-      my settings: Minu sätted
       current email address: Praegune e-posti aadress
       external auth: Väline autentimine
       openid:
@@ -318,9 +317,6 @@ et:
           pakutava infrastruktuuri kasutamist. Palun klõpsa lingil, loe tekst läbi
           ja nõustu sellega.
         read_tou: Ma olen lugenud kasutustingimusi ja nõustun nendega
-        consider_pd: Eelnevale lisaks leian, et minu kaastöö kuulub avalikku omandisse
-          (Public Domain)
-        consider_pd_why: mis see on?
         guidance_info_html: 'Teave, mis aitab mõista neid tingimusi: %{readable_summary_link}
           ja mõned %{informal_translations_link}'
         readable_summary: inimloetav kokkuvõte
@@ -2582,8 +2578,6 @@ et:
         privacy_policy_title: OSMF-i andmekaitsereeglid, sealhulgas peatükk e-posti
           aadresside kohta
         html: Sinu aadressi ei kuvata avalikult, tutvu meie %{privacy_policy_link}.
-      consider_pd_html: Pean enda kaastööd %{consider_pd_link} kuuluvaks.
-      consider_pd: avalikku omandisse
       use external auth: või registreeru kolmanda osapoole kaudu
     no_such_user:
       title: Sellist kasutajat ei ole
@@ -2598,7 +2592,6 @@ et:
       my notes: Minu märkused
       my messages: Minu sõnumid
       my profile: Minu profiil
-      my settings: Minu sätted
       my comments: Minu kommentaarid
       my_preferences: Minu eelistused
       my_dashboard: Minu andmelaud
@@ -2660,13 +2653,13 @@ et:
       show:
         title: Kasutajad
         heading: Kasutajad
-        empty: Sobivaid kasutajaid ei leitud!
       page:
         found_users:
           one: '%{count} kasutaja leitud'
           other: '%{count} kasutajat leitud'
         confirm: Kinnita valitud kasutajad
         hide: Peida valitud Kasutajad
+        empty: Sobivaid kasutajaid ei leitud!
       user:
         summary_html: '%{name} loodud IP-aadressilt %{ip_address} (%{date})'
         summary_no_ip_html: '%{name} loodud (%{date})'
index 00ee4587447d325b8975ae56a7c194c12dd8c933..62ddee52e45bf58c1c2f0bd8ae93126e253c4486 100644 (file)
@@ -258,9 +258,8 @@ eu:
         comment: Iruzkina
         full: Ohar osoa
   accounts:
-    edit:
+    show:
       title: Kontua aldatu
-      my settings: Nire aukerak
       current email address: Egungo posta helbidea
       external auth: Kanpoko Autentifikazioa
       openid:
@@ -336,9 +335,6 @@ eu:
           beste azpiegituren erabilera arautzen du. Mesedez, egin klik estekan, irakurri
           eta onartu testua.'
         read_tou: Irakurri ditut eta onartzen ditut Erabilera Baldintzak
-        consider_pd: Goikoaz gain, nire ekarpenak Domeinu Publikoan egon behar direla
-          uste dut
-        consider_pd_why: zer da hau?
         guidance_info_html: 'Termino hauek ulertzen laguntzeko informazioa: %{readable_summary_link}
           eta %{informal_translations_link}'
         informal_translations: itzulpen informalak
@@ -2507,7 +2503,6 @@ eu:
       my notes: Nire oharrak
       my messages: Nire mezuak
       my profile: Nire profila
-      my settings: Nire Hobespenak
       my comments: Nire Iruzkinak
       my_preferences: Nire hobespenak
       my_dashboard: Nire Arbela
@@ -2567,10 +2562,10 @@ eu:
       show:
         title: Erabiltzaileak
         heading: Erabiltzaileak
-        empty: No matching users found
       page:
         confirm: Berretsi Hautatutako Erabiltzaileak
         hide: Ezkutatu Hautatutako Erabiltzaileak
+        empty: No matching users found
       user:
         summary_html: '%{date}n %{ip_address}tik %{name} sortu da'
         summary_no_ip_html: '%{name} %{date} datan sortua'
index 37b2849d0dd702d49ff4cef94a06393fd34bce50..2f8f1aa8d681a0704a6d9bbd5eeacf30fc0006da 100644 (file)
@@ -277,9 +277,8 @@ fa:
         comment: نظر
         full: یادداشت کامل
   accounts:
-    edit:
+    show:
       title: ویرایش حساب
-      my settings: تنظیمات من
       current email address: رایانامهٔ کنونی
       external auth: احراز هویت خارجی
       openid:
@@ -351,9 +350,6 @@ fa:
           ارائه‌شده از سوی OSMF نافذ است. لطفاً روی پیوند کلیک کنید، متن را بخوانید
           و آن را بپذیرید.
         read_tou: شرایط استفاده را خوانده‌ام و آن را می‌پذیرم
-        consider_pd: علاوه بر موارد بالا، می‌پذیرم که مشارکت‌هایم در مالکیت عمومی
-          باشد.
-        consider_pd_why: این چیست؟
         continue: ادامه
         you need to accept or decline: برای ادامه لطفاً بخوانید و سپس شرایط جدید مشارکت‌کننده
           را بپذیرید یا رد کنید.
@@ -368,6 +364,19 @@ fa:
         terms_declined_html: از اینکه تصمیم گرفته‌اید شرایط جدید مشارکت‌کننده را نپذیرید،
           متأسف هستیم. برای اطلاعات بیشتر، لطفاً %{terms_declined_link} را ببینید.
         terms_declined_link: این صفحهٔ ویکی
+    pd_declarations:
+      show:
+        title: مشارکت‌های من را در مالکیت عمومی در نظر بگیر
+        consider_pd: من مشارکت‌های خود را در مالکیت عمومی در نظر می‌گیرم
+        consider_pd_why: چرا باید بخواهم که مشارکت‌هایم در مالکیت عمومی قرار گیرد؟
+        confirm: تأیید
+      create:
+        successfully_declared: شما با موفقیت اعلام کردید که ویرایش‌های خود را در مالکیت
+          عمومی در نظر می‌گیرید.
+        already_declared: شما هم‌اکنون اعلام کرده‌اید که ویرایش‌های خود را در مالکیت
+          عمومی در نظر می‌گیرید.
+        did_not_confirm: شما این که مشارکت‌هایتان در مالکیت عمومی قرار گیرد را تأیید
+          نکرده‌اید.
   browse:
     deleted_ago_by_html: '%{time_ago} %{user} حذفش کرد'
     edited_ago_by_html: '%{time_ago} %{user} ویرایشش کرد'
@@ -869,6 +878,7 @@ fa:
           bridleway: راه حیوان رو
           bus_guideway: خط هدایت کننده اتوبوس
           bus_stop: ایستگاه اتوبوس
+          busway: مسیر اتوبوس
           construction: راه در دست ساخت
           corridor: راهرو
           cycleway: مسیر دوچرخه
@@ -1754,7 +1764,7 @@ fa:
       failure: ذخیره‌سازی نمایه انجام نشد.
   sessions:
     new:
-      tab_title: ورود
+      tab_title: ورود به سامانه
       email or username: نشانی رایانامه یا نام کاربری
       password: رمز عبور
       remember: مرا به خاطر بسپار
@@ -2187,6 +2197,7 @@ fa:
       read_gpx: خواندن ردهای جی‌پی‌اس خصوصی
       write_gpx: بارگذاری ردهای جی‌پی‌اس
       write_notes: اصلاح یادداشت‌ها
+      write_blocks: ایجاد و برداشتن قطع دسترسی‌های کاربر
       read_email: خواندن نشانی رایانامهٔ کاربر
       skip_authorization: برنامه با تأیید خودکار
   oauth2_applications:
@@ -2240,6 +2251,7 @@ fa:
   users:
     new:
       title: ثبت نام
+      tab_title: ثبت نام
       no_auto_account_create: متأسفانه در حال حاضر نمی‌توانیم به‌صورت خودکار برای
         شما حساب کاربری بسازیم.
       about:
@@ -2263,7 +2275,7 @@ fa:
       my notes: یادداشت‌های من
       my messages: پیام‌های من
       my profile: نمایهٔ من
-      my settings: تنظیمات من
+      my_account: حساب من
       my comments: نظرات من
       my_preferences: ترجیحات من
       my_dashboard: پیشخوان من
@@ -2322,13 +2334,25 @@ fa:
       show:
         title: کاربران
         heading: کاربران
-        empty: هیچ کاربر منطبقی یافت نشد
+        select_status: انتخاب وضعیت
+        states:
+          pending: در انتظار
+          active: فعال
+          confirmed: تأییدشده
+          suspended: تعلیق‌شده
+          deleted: حذف‌شده
+        ip_address: نشانی آی‌پی
+        search: جستجو
       page:
         confirm: تأیید کاربران انتخاب‌شده
         hide: پنهان‌کردن کاربران انتخاب‌شده
+        empty: هیچ کاربر منطبقی یافت نشد
       user:
         summary_html: '%{name} با آی‌پی %{ip_address} در %{date} ایجاد شد'
         summary_no_ip_html: '%{name} در %{date} ایجاد شد'
+    comments:
+      index:
+        diary_entries: مدخل‌های روزنوشت
     changeset_comments:
       page:
         when: زمان
@@ -2641,6 +2665,9 @@ fa:
       show_address: نمایش نشانی
       query_features: پرس‌وجو برای عارضه‌ها
       centre_map: اینجا را مرکز نقشه کن
+    home:
+      marker_title: محل خانهٔ من
+      not_set: محل خانهٔ حساب شما تنظیم نشده است
   redactions:
     edit:
       heading: ویرایش پاک‌سازی
index e2a8c38ac2860f897e1d8bd3d5474eacbfc55fe7..9f6ee296ade839c7f4168880f358caa463b23974 100644 (file)
@@ -288,9 +288,8 @@ fi:
         comment: Kommentti
         full: Koko karttailmoitus
   accounts:
-    edit:
+    show:
       title: Asetusten muokkaus
-      my settings: Käyttäjäasetukset
       current email address: Nykyinen sähköpostiosoite
       external auth: Kolmannen osapuolen tunnukset kirjautuessa
       openid:
@@ -354,9 +353,6 @@ fi:
           tarjoaman infrastruktuurin käyttöä. Napsauta linkkiä, lue ja suostu tekstin
           sisältöön.
         read_tou: Olen lukenut ja hyväksynyt käyttöehdot
-        consider_pd: Edellisen lisäksi katson lisäyksieni olevan tekijänoikeudettomia
-          Public Domain -lisenssillä
-        consider_pd_why: Mikä tämä on?
         guidance_info_html: 'Vaihtoehtoisia lukutapoja: %{readable_summary_link} ja
           %{informal_translations_link}'
         readable_summary: selkokielinen yhteenveto (englanniksi)
@@ -2452,7 +2448,6 @@ fi:
       email_help:
         privacy_policy: tietosuojakäytäntö
         html: Osoitetta ei näytetä julkisesti, lisätietoja on sivulla %{privacy_policy_link}.
-      consider_pd_html: Pidän tuotoksiani %{consider_pd_link}.
       or: tai
       use external auth: Kirjaudu toisen palvelun tunnuksilla
     no_such_user:
@@ -2467,7 +2462,6 @@ fi:
       my notes: Omat karttailmoitukset
       my messages: Viestit
       my profile: Käyttäjäsivu
-      my settings: Käyttäjäasetukset
       my comments: Omat kommentit
       my_preferences: Asetukset
       my_dashboard: Tapahtumat
@@ -2526,10 +2520,10 @@ fi:
       show:
         title: Käyttäjät
         heading: Käyttäjät
-        empty: Käyttäjiä ei löytynyt.
       page:
         confirm: Vahvista valitut käyttäjät
         hide: Piilota valitut käyttäjät
+        empty: Käyttäjiä ei löytynyt.
       user:
         summary_html: '%{name} luotu %{date} osoitteesta %{ip_address}'
         summary_no_ip_html: '%{name} luotu %{date}'
index 39c4dd678c32b3067f59987c0f25ddfd101d94f6..0c7ae23eb4ef6af17dbecaec4ef1f6bd8e424f6b 100644 (file)
@@ -180,9 +180,8 @@ fit:
         comment: Kommentti
         full: Koko karttailmoitus
   accounts:
-    edit:
+    show:
       title: Mookkaa konttua
-      my settings: Minun inställninkit
       current email address: 'Nykynen e-postiatressi:'
       save changes button: Säästä muutokset
     go_public:
@@ -804,7 +803,6 @@ fit:
       my notes: Minun karttailmoitukset
       my messages: Minun viestit
       my profile: Minun profiili
-      my settings: Minun inställninkit
       my comments: Minun kommentit
       send message: Lähätä viesti
       edits: Mookkaukset
index 045f20d97dbc9be5bc4bed3fbbe11ab8fb7df976..1fb42e2e2f63f4271a43a5f7c762ff6240b1eafa 100644 (file)
@@ -204,6 +204,7 @@ fr:
         allow_write_prefs: modifier les préférences de l’utilisateur
         allow_write_diary: créer des entrées du journal et des commentaires
         allow_write_api: modifier la carte
+        allow_write_changeset_comments: commenter les changements
         allow_read_gpx: lire ses traces GPS privées
         allow_write_gpx: téléverser des traces GPS
         allow_write_notes: modifier les notes
@@ -362,9 +363,8 @@ fr:
         comment: Commentaire
         full: Note complète
   accounts:
-    edit:
+    show:
       title: Modifier le compte
-      my settings: Mes paramètres
       current email address: Adresse de courriel actuelle
       external auth: Authentification externe
       openid:
@@ -450,10 +450,6 @@ fr:
           autres infrastructures fournies par OSMF. Veuillez cliquer sur le lien pour
           les lire et accepter le texte.
         read_tou: J’ai lu et j’accepte les Conditions d’utilisation
-        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://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Informations pour aider à comprendre ces termes : un
           %{readable_summary_link} et quelques %{informal_translations_link}'
         readable_summary: résumé lisible par un humain
@@ -475,6 +471,9 @@ fr:
           consulter %{terms_declined_link}.
         terms_declined_link: cette page du wiki
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
   browse:
     deleted_ago_by_html: Supprimé %{time_ago} par %{user}
     edited_ago_by_html: Modifié %{time_ago} par %{user}
@@ -2902,7 +2901,7 @@ fr:
       openid: Se connecter avec OpenStreetMap
       read_prefs: Lire les préférences de l’utilisateur
       write_prefs: Modifier les préférences de l’utilisateur
-      write_diary: créer des entrées du journal et des commentaires
+      write_diary: Écrire dans le journal et créer des commentaires
       write_api: Modifier la carte
       read_gpx: Lire les traces GPC privées
       write_gpx: Mettre à jour les traces GPC
@@ -3003,8 +3002,6 @@ fr:
           sur les adresses e-mail
         html: Votre adresse n’est pas affichée publiquement, consultez notre %{privacy_policy_link}
           pour plus d’informations.
-      consider_pd_html: Je considère que mes contributions se situent dans le %{consider_pd_link}.
-      consider_pd: domaine public
       or: ou
       use external auth: ou vous pouvez vous connecter avec un service tiers.
     no_such_user:
@@ -3020,7 +3017,6 @@ fr:
       my notes: Mes notes
       my messages: Mes messages
       my profile: Mon profil
-      my settings: Mes options
       my comments: Mes commentaires
       my_preferences: Mes préférences
       my_dashboard: Mon tableau de bord
@@ -3099,13 +3095,13 @@ fr:
       show:
         title: Utilisateurs
         heading: Utilisateurs
-        empty: Aucun utilisateur correspondant n’a été trouvé
       page:
         found_users:
           one: '%{count} utilisateur trouvé'
           other: '%{count} utilisateurs trouvés'
         confirm: Confirmer les utilisateurs sélectionnés
         hide: Masquer les utilisateurs sélectionnés
+        empty: Aucun utilisateur correspondant n’a été trouvé
       user:
         summary_html: '%{name} créé depuis %{ip_address} le %{date}'
         summary_no_ip_html: '%{name} créé le %{date}'
index 67b4187409b6f849a44acb0f4eed47dc02fa81d6..251d737de69b465c78994844f02ccfb88f150633 100644 (file)
@@ -214,9 +214,8 @@ fur:
         comment: Coment
         full: Note complete
   accounts:
-    edit:
+    show:
       title: Modifiche profîl
-      my settings: Mês impostazions
       current email address: Direzion di pueste eletroniche atuâl
       external auth: Autenticazion esterne
       openid:
@@ -251,9 +250,6 @@ fur:
       show:
         title: Tiermins
         heading: Tiermins
-        consider_pd: In plui di dut ce che al è parsore, jo o consideri i miei contribûts
-          come di Public Domini
-        consider_pd_why: ce isal chest?
         continue: Va indevant
         you need to accept or decline: Par plasê lei e po acete o refude i gnûfs Tiermins
           par Contribuî par lâ indevant.
@@ -1423,7 +1419,6 @@ fur:
       my notes: Lis mês notis
       my messages: I miei messaçs
       my profile: Il gno profîl
-      my settings: Impostazions
       my comments: I mei coments
       my_preferences: Preferencis
       my_dashboard: La mê pagjine iniziâl
index cd3de2cd51b78314154b5365357d2500ef11ddb6..d8a9f2f03a334753e71950f84a3f378234b455aa 100644 (file)
@@ -4,6 +4,7 @@
 # Author: Danieldegroot2
 # Author: PiefPafPier
 # Author: Robin van der Vliet
+# Author: Wutsje
 ---
 fy:
   time:
@@ -230,9 +231,8 @@ fy:
         comment: Reäksje
         full: Folsleine notysje
   accounts:
-    edit:
+    show:
       title: Akkount bewurkje
-      my settings: Myn ynstellings
       current email address: Hjoeddeisk e-mailadres
       external auth: Autentifikaasje om utens
       openid:
@@ -298,9 +298,6 @@ fy:
           ynfrastruktuer beskikber steld troch de OSMF. Klik op 'e keppeling, lês
           de tekst en gean akkoart.
         read_tou: Ik haw de Gebrûksbetingsten lêzen en gean der akkoart mei
-        consider_pd: Njonken it boppesteande, beskôgje ik myn bydragen as part fan
-          it Publyk Domein
-        consider_pd_why: wat is dat?
         continue: Fierder
         you need to accept or decline: Lês de nije Bydragersbetingsten; jo kinne fierder
           nei it akseptearjen of ôfwizen derfan.
@@ -2193,7 +2190,6 @@ fy:
       my notes: Myn notysjes
       my messages: Myn berjochten
       my profile: Myn profyl
-      my settings: Myn ynstellings
       my comments: Myn reäksjes
       my_preferences: Myn foarkarren
       my_dashboard: Myn oersjochpaniel
@@ -2251,10 +2247,10 @@ fy:
       show:
         title: Meidoggers
         heading: Meidoggers
-        empty: Gjin oerienkommende meidoggers fûn
       page:
         confirm: Selektearre meidoggers befêstigje
         hide: Selektearre meidoggers ferbergje
+        empty: Gjin oerienkommende meidoggers fûn
       user:
         summary_html: '%{name} oanmakke fan %{ip_address} op %{date}'
         summary_no_ip_html: '%{name} oanmakke op %{date}'
@@ -2384,6 +2380,7 @@ fy:
       open_title: 'Unoploste notysje #%{note_name}'
       closed_title: 'Oploste notysje #%{note_name}'
       hidden_title: 'Ferburgen notysje #%{note_name}'
+      description_when_author_is_deleted: wiske
       report: dizze notysje melde
       anonymous_warning: Dizze notysje befettet reäksjes fan anonime meidoggers dy't
         apart neigien wurde moatte.
index 6cf3385a1cf0446dbf44fc8402c4102ad526335a..4cc8350dabb84a06f4460e38ed39ac5da697ef69 100644 (file)
@@ -181,9 +181,8 @@ ga:
         comment: Nóta tráchta
         full: An nóta iomlán
   accounts:
-    edit:
+    show:
       title: Cuir an cuntas in eagar
-      my settings: Mo chuid socruithe
       current email address: An seoladh ríomhphoist reatha
       external auth: Fíordheimhniú Seachtrach
       openid:
@@ -201,7 +200,6 @@ ga:
       show:
         title: Téarmaí
         heading: Téarmaí
-        consider_pd_why: céard é seo?
         legale_select: 'Tír chónaithe:'
         legale_names:
           france: An Fhrainc
@@ -1630,7 +1628,6 @@ ga:
       my notes: Mo Nótaí
       my messages: Mo Theachtaireachtaí
       my profile: Mo Phróifíl
-      my settings: Mo Shocruithe
       my comments: Mo Nótaí Tráchta
       blocks on me: Baic Orm
       blocks by me: Baic a Rinne Mé
index bb82283a036ab2fd2450168cc39cb82b336d9623..0a21baee2e7f92d08f4b8f5a733451f0943c3790 100644 (file)
@@ -79,9 +79,8 @@ gcf:
       entry:
         comment: Komantasyon
   accounts:
-    edit:
+    show:
       title: Modifyé kont a-w la
-      my settings: Mes options
       openid:
         link text: Ka sa yé?
       contributor terms:
@@ -605,7 +604,6 @@ gcf:
       my edits: Édision an mwen
       my traces: Chimen an mwen
       my messages: Sé mésaj a-w la
-      my settings: Opsion an mwen
       my_preferences: Sa ou simyé
       send message: Voyé on mésaj
       diary: Jounal
index 98f6cda6a9a9ac8fd3a0215a1a0329b4c647d0a7..535298ecd9125c6508928295eb7f60c968b6acf3 100644 (file)
@@ -239,9 +239,8 @@ gd:
         comment: Beachd
         full: Nòta slàn
   accounts:
-    edit:
+    show:
       title: Deasaich an cunntas
-      my settings: Na roghainnean agam
       current email address: An seòladh puist-d làithreach
       external auth: Dearbhadh taobh a-muigh
       openid:
@@ -273,9 +272,6 @@ gd:
         title: Teirmichean
         heading: Teirmichean
         heading_ct: Teirmichean a' chom-pàirtiche
-        consider_pd: A bharrachd air an aonta gu h-àrd, aontaichidh mi gun dèid na
-          bheir mi dhuibh 'nam cho-thabhartaiche a chur sa Public Domain
-        consider_pd_why: Dè th`ann?
         cancel: Sguir dheth
         you need to accept or decline: Feuch an leugh thu teirmichean ùra a' chom-pàirtiche
           agus an uairsin aontaich no nach gabh riutha mus lean thu air adhart.
@@ -1738,7 +1734,6 @@ gd:
       my notes: Na nòtaichean agam
       my messages: Na teachdaireachdan agam
       my profile: A' phròifil agam
-      my settings: Na roghainnean agam
       my comments: Na beachdan agam
       blocks on me: Bacaidhean orm
       blocks by me: Bacaidhean a rinn mi
@@ -1791,10 +1786,10 @@ gd:
       show:
         title: Cleachdaichean
         heading: Cleachdaichean
-        empty: Cha deach cleachdaiche a fhreagras a lorg
       page:
         confirm: Dearbhaich na cleachdaichean a thagh thu
         hide: Falaich na cleachdaichean a thagh thu
+        empty: Cha deach cleachdaiche a fhreagras a lorg
       user:
         summary_html: Chaidh %{name} a chruthachadh o %{ip_address} %{date}
         summary_no_ip_html: Chaidh %{name} a chruthachadh %{date}
index af636f9e71394aa665d9f64e428e48369c2f8f64..205d37635c9e0c49436609f537e9ade07f559a91 100644 (file)
@@ -105,6 +105,7 @@ gl:
         allow_write_prefs: modificar as súas preferencias de usuario
         allow_write_diary: crear entradas de diario e comentarios
         allow_write_api: modificar o mapa
+        allow_write_changeset_comments: comentar os conxuntos de cambios
         allow_read_gpx: ler as súas pistas GPS privadas
         allow_write_gpx: subir pistas GPS
         allow_write_notes: modificar notas
@@ -260,12 +261,13 @@ gl:
         comment: Comentario
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Editar a conta
-      my settings: Os meus axustes
+      my_account: A miña conta
       current email address: Enderezo de correo electrónico actual
       external auth: Autenticación externa
       openid:
+        link: https://wiki.openstreetmap.org/wiki/OpenID
         link text: que é isto?
       contributor terms:
         heading: Termos do colaborador
@@ -275,7 +277,11 @@ gl:
           do colaborador.
         agreed_with_pd: Tamén declaraches que consideras que as túas edicións pertencen
           ó dominio público.
+        link: https://osmfoundation.org/wiki/Licence/Contributor_Terms
         link text: que é isto?
+        not_agreed_with_pd: Non declaraches que consideras que as túas edicións pertencen
+          ó dominio público.
+        pd_link_text: declárao
       save changes button: Gardar as modificacións
       delete_account: Borrar a conta...
     go_public:
@@ -340,10 +346,6 @@ gl:
         tou_explain_html: Estes %{tou_link} rexen o uso da páxina/sitio web e outras
           infraestruturas fornecidas pola OSMF.  Preme na ligazón, le e acepta o texto.
         read_tou: Lin e acepto os Termos de uso
-        consider_pd: Ademais do anterior, coido que as miñas contribucións están baixo
-          dominio público
-        consider_pd_why: que é isto?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Información para axudar a comprender estes termos: un
           %{readable_summary_link} e algunhas %{informal_translations_link}'
         readable_summary: resumo lexible por humanos
@@ -364,6 +366,21 @@ gl:
           dos colaboradores. Para obter máis información, consulta %{terms_declined_link}.
         terms_declined_link: esta páxina do wiki
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Considerar as miñas contribucións de dominio público
+        consider_pd: Considero que as miñas contribucións son de dominio público
+        consider_pd_why: Por que querería que as miñas contribucións sexan de dominio
+          público?
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Confirmar
+      create:
+        successfully_declared: Declaraches que consideras que as túas edicións pertencen
+          ao dominio público.
+        already_declared: Xa declaraches que consideras que as túas edicións pertencen
+          ao dominio público.
+        did_not_confirm: Non confirmaches que consideras que as túas edicións pertencen
+          ao dominio público.
   browse:
     deleted_ago_by_html: Borrado %{time_ago} por %{user}
     edited_ago_by_html: Editado %{time_ago} por %{user}
@@ -2039,7 +2056,7 @@ gl:
       failure: Non foi posíbel actualizar o perfil.
   sessions:
     new:
-      tab_title: Acceder ao sistema
+      tab_title: Iniciar a sesión
       login_to_authorize_html: Inicia sesión no OpenStreetMap para acceder a %{client_app_name}.
       email or username: Enderezo de correo electrónico ou nome de usuario
       password: Contrasinal
@@ -2795,10 +2812,12 @@ gl:
       write_prefs: Modificar preferencias de usuario
       write_diary: Crear entradas de diario e comentarios
       write_api: Modificar o mapa
+      write_changeset_comments: Comentar os conxuntos de cambios
       read_gpx: Ler pistas GPS privadas
       write_gpx: Subir pistas GPS
       write_notes: Modificar notas
       write_redactions: Censurar datos do mapa
+      write_blocks: Crear e revogar bloqueos de usuarios
       read_email: Ver os enderezos de correo electrónico dos usuarios
       consume_messages: Ver, actualizar o estado e borrar mensaxes dos usuarios
       send_messages: Enviar mensaxes privadas aos usuarios
@@ -2892,8 +2911,6 @@ gl:
           unha sección sobre os enderezos de correo electrónico
         html: O teu enderezo non se mostra publicamente; consulta a nosa %{privacy_policy_link}
           para obter máis información.
-      consider_pd_html: Acepto que as miñas contribucións estean no %{consider_pd_link}.
-      consider_pd: dominio publico
       or: ou
       use external auth: ou rexístrate cun servizo de terceiros
     no_such_user:
@@ -2909,7 +2926,7 @@ gl:
       my notes: As miñas notas do mapa
       my messages: As miñas mensaxes
       my profile: O meu perfil
-      my settings: Os meus axustes
+      my_account: A miña conta
       my comments: Os meus comentarios
       my_preferences: As miñas preferencias
       my_dashboard: O meu panel de control
@@ -2990,13 +3007,23 @@ gl:
       show:
         title: Usuarios
         heading: Usuarios
-        empty: Non se atoparon usuarios que coincidisen
+        select_status: Seleccionar estado
+        states:
+          pending: Pendente
+          active: Activo
+          confirmed: Confirmado
+          suspended: Suspendido
+          deleted: Borrado
+        name_or_email: Nome ou correo electrónico
+        ip_address: Enderezo IP
+        search: Procurar
       page:
         found_users:
           one: Atopouse %{count} usuario
           other: Atopáronse %{count} usuarios
         confirm: Confirmar os usuarios seleccionados
         hide: Agochar os usuarios seleccionados
+        empty: Non se atoparon usuarios que coincidisen
       user:
         summary_html: '%{name} creado dende %{ip_address} o %{date}'
         summary_no_ip_html: '%{name} creado o %{date}'
@@ -3194,6 +3221,7 @@ gl:
       closed_title: Nota resolta n.º %{note_name}
       hidden_title: Nota agochada n.º %{note_name}
       description_when_author_is_deleted: eliminado
+      description_when_there_is_no_opening_comment: descoñecido
       event_opened_by_html: Creado por %{user} %{time_ago}
       event_opened_by_anonymous_html: Creado por un usuario anónimo %{time_ago}
       event_commented_by_html: Comentario de %{user} %{time_ago}
@@ -3241,7 +3269,6 @@ gl:
         url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide
       counter_warning_forum_link:
         text: a comunidade pode axudarche
-        url: https://community.openstreetmap.org/
       advice: A túa nota será pública e poderá empregarse para actualizar o mapa;
         por conseguinte, non insiras información persoal, nin datos de mapas protexidos
         por dereitos de autoría ou listaxes de directorios.
@@ -3430,6 +3457,8 @@ gl:
           ninth: 9.ª
           tenth: 10.ª
       time: Tempo
+      download: Descargar a ruta como GeoJSON
+      filename: ruta
     query:
       node: Nó
       way: Vía
@@ -3444,6 +3473,9 @@ gl:
       show_address: Amosar enderezo
       query_features: Consultar elementos
       centre_map: Centrar o mapa aquí
+    home:
+      marker_title: Localización da miña casa
+      not_set: A localización da casa non está configurada para a túa conta
   redactions:
     edit:
       heading: Editar a censura
index 0c8f0cad78ccb36298837001a2e6a08c42cc5805..373efcd8a8679a4f87633b792f992c909eefc67c 100644 (file)
@@ -114,7 +114,7 @@ gu:
       entry:
         comment: ટિપ્પણી
   accounts:
-    edit:
+    show:
       openid:
         link text: આ શું છે?
       contributor terms:
index 681ed045ff23b25f4e0bdeebc9a7df6c36cc0959..382a6c15689f522510dc04ecc9de10a8b8b7c0e7 100644 (file)
@@ -301,9 +301,8 @@ he:
         comment: תגובה
         full: הערה מלאה
   accounts:
-    edit:
+    show:
       title: עריכת חשבון
-      my settings: ההגדרות שלי
       current email address: כתובת דוא״ל נוכחית
       external auth: אימות חיצוני
       openid:
@@ -372,9 +371,6 @@ he:
         tou_explain_html: '%{tou_link} האלה מאגדים את תנאי השימוש באתר ובתשתית נוספת
           שמסופקת על־ידי ה־OSMF. נא ללחוץ על הקישור, לקרוא ולהסכים לטקסט.'
         read_tou: קראתי את תנאי השימוש ואני מסכימ/ה לתנאים אלו
-        consider_pd: בנוסף לכתוב לעיל, מבחינתי כל עריכותיי שייכות לנחלת הכלל
-        consider_pd_why: מה זה?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'מידע שיעזור להבין את המונחים האלה: %{readable_summary_link}
           וכמה %{informal_translations_link}'
         readable_summary: תקציר קריא לבני־אדם
@@ -395,6 +391,9 @@ he:
           נא לפנות אל %{terms_declined_link}
         terms_declined_link: דף הוויקי הזה
         terms_declined_url: https://wiki.openstreetmap.org/wiki/He:Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
   browse:
     deleted_ago_by_html: נמחקה %{time_ago} על־ידי %{user}
     edited_ago_by_html: נערכה %{time_ago} על־ידי %{user}
@@ -2796,8 +2795,6 @@ he:
         privacy_policy_title: מדיניות הפרטיות של OSMF כוללת סעיף על כתובות דוא״ל
         html: הכתובת שלך אינה מוצגת בפומבי, ר' את %{privacy_policy_link} שלנו למידע
           נוסף.
-      consider_pd_html: מבחינתי, התרומות שלי נמצאות ב%{consider_pd_link}.
-      consider_pd: נחלת הכלל
       or: או
       use external auth: לחלופין, אפשר להשתמש בצד שלישי כדי להירשם
     no_such_user:
@@ -2813,7 +2810,6 @@ he:
       my notes: הערות המפה שלי
       my messages: ההודעות שלי
       my profile: הפרופיל שלי
-      my settings: ההגדרות שלי
       my comments: ההערות שלי
       my_preferences: ההעדפות שלי
       my_dashboard: לוח הבקרה שלי
@@ -2893,7 +2889,6 @@ he:
       show:
         title: משתמשים
         heading: משתמשים
-        empty: לא נמצאו משתמשים תואמים
       page:
         found_users:
           one: נמצא משתמש אחד
@@ -2902,6 +2897,7 @@ he:
           other: נמצאו %{count} משתמשים
         confirm: אישור משתמשים נבחרים
         hide: הסתרת משתמשים נבחרים
+        empty: לא נמצאו משתמשים תואמים
       user:
         summary_html: '%{name} נוצר מכתובת %{ip_address} ב־%{date}'
         summary_no_ip_html: '%{name} נוצר ב־%{date}'
@@ -3013,7 +3009,7 @@ he:
         ended: הסתיימה
         revoked_html: בוטלה על־ידי %{name}
         active: פעילה
-        active_until_read: פעיל עד לקריאה
+        active_until_read: פעילה עד לקריאה
         read_html: נקראה ב־%{time}
         time_in_future_title: '%{time_absolute}; ב־%{time_relative}'
         time_in_past_title: '%{time_absolute}; %{time_relative}'
@@ -3126,12 +3122,11 @@ he:
       intro: יש פה טעות או שחסר משהו? אנו מבקשים ממך לספר את זה לממפים אחרים. לשם
         כך צריך להזיז את הסמן למקום הנכון ולכתוב הערה שמסבירה את הבעיה.
       anonymous_warning_html: לא נכנסת לחשבון. נא %{log_in} או %{sign_up} לקבלת עדכונים
-        ×¢×\9c ×\94×\94ער×\94 ×©×\9c×\9a ×\95×\9c×¢×\96×\95ר ×\9c×\9eת×\9bנת×\99 ×\94×\9eפ×\95ת לפתור את זה.
+        ×¢×\9c ×\94×\94ער×\94 ×©×\9c×\9a ×\95×\9c×¢×\96×\95ר ×\9c×\9e×\9eפ×\99×\9d לפתור את זה.
       anonymous_warning_log_in: להיכנס לחשבון
       anonymous_warning_sign_up: להירשם
       counter_warning_forum_link:
         text: הקהילה יכולה לעזור לך
-        url: https://community.openstreetmap.org/
       advice: /start
       add: הוספת הערה
     new_readonly:
index 3aa0502814a24e7d7c4197aaf9c6b989e6dfa18c..35f5ba32f2164cdc005f3e96c95068e132464393 100644 (file)
@@ -250,7 +250,7 @@ hi:
         comment: टिप्पणी
         full: पूरा नोट
   accounts:
-    edit:
+    show:
       contributor terms:
         link text: यह क्या है?
       save changes button: बदलाव सहेजें
@@ -1000,10 +1000,13 @@ hi:
       show:
         title: सदस्य
         heading: सदस्य
-        empty: ऐसे कोई सदस्य नहीं मिले
+        states:
+          active: सक्रिय
+          deleted: हटाया गया
       page:
         confirm: इन सदस्यों को चुनें
         hide: इन सदस्यों को न दिखाएं
+        empty: ऐसे कोई सदस्य नहीं मिले
     changeset_comments:
       page:
         when: कब
index 63c5e76cbd5a54805e04af1279a8d53fe41e0cf9..7ddc1e2e56cfdc60ea08927a5738f8a2a466dd8c 100644 (file)
@@ -229,9 +229,8 @@ hr:
         comment: Komentar
         full: Cijela bilješka
   accounts:
-    edit:
+    show:
       title: Uredi korisnički račun
-      my settings: Moje postavke
       current email address: Trenutna adresa e-pošte
       openid:
         link text: što je ovo?
@@ -255,9 +254,6 @@ hr:
       show:
         title: Uvjeti doprinositelja
         heading: Uvjeti
-        consider_pd: Osim gore navedenog ugovora, smatram da su moji doprinosi u javnom
-          vlasništvu (Public Domain)
-        consider_pd_why: što je ovo?
         continue: Nastavi
         you need to accept or decline: Molim pročitaj, a zatim ili prihvati ili odbij
           nove Uvjete doprinošenja.
@@ -1517,7 +1513,6 @@ hr:
       my notes: Moje bilješke
       my messages: Moje poruke
       my profile: Moj profil
-      my settings: Moje postavke
       my comments: Moji komentari
       blocks on me: Osobne blokade
       blocks by me: Blokade koje sam postavio
@@ -1570,10 +1565,10 @@ hr:
       show:
         title: Korisnici
         heading: Korisnici
-        empty: Nema pronađenih odgovarajućih korisnika
       page:
         confirm: Potvrdi odabrane korisnike
         hide: Sakrij odabrane korisnike
+        empty: Nema pronađenih odgovarajućih korisnika
       user:
         summary_html: '%{name} napravljeno sa %{ip_address} dana %{date}'
         summary_no_ip_html: '%{name} napravljeno %{date}'
index 11fae05f1a25c4408ac6a337e28d20757c31a930..4f50d020ce9fba2f977d74f06b37dd0a138b9d4a 100644 (file)
@@ -260,9 +260,8 @@ hsb:
         comment: Komentar
         full: Dospołna pokazka
   accounts:
-    edit:
+    show:
       title: Konto wobdźěłać
-      my settings: Moje nastajenja
       current email address: Aktualna e-mejlowa adresa
       external auth: Eksterna awtentifikacija
       openid:
@@ -305,9 +304,6 @@ hsb:
         heading: Wuměnjenja
         heading_ct: Wuměnjenja za sobuskutkowarjow
         read_tou: Sym wužiwanske wuměnjenja přečitał a sym z nimi přezjedny|přezjedna
-        consider_pd: Přidatnje k horjeka mjenowanym wuměnjenjam, mam swoje přinoški
-          za powšitkownosći wužitne.
-        consider_pd_why: Što to je?
         continue: Dale
         you need to accept or decline: Prošu přečitaj nowe wužiwarske wuměnjenja a
           akceptuj abo wotpokazaj je, prjedy hač dale činiš.
@@ -2292,7 +2288,6 @@ hsb:
       my notes: Moje pokazki
       my messages: Moje powěsće
       my profile: Mój profil
-      my settings: Moje nastajenja
       my comments: Moje komentary
       my_preferences: Moje preferency
       my_dashboard: Moja přehladna strona
@@ -2362,10 +2357,10 @@ hsb:
       show:
         title: Wužiwarjo
         heading: Wužiwarjo
-        empty: Žani wotpowědowacy wužiwarjo namakani
       page:
         confirm: Wubranych wužiwarjow wobkrućic
         hide: Wubranych wužiwarjow schować
+        empty: Žani wotpowědowacy wužiwarjo namakani
       user:
         summary_html: '%{name} wot %{ip_address} dnja %{date} wutworjeny'
         summary_no_ip_html: '%{name} dnja %{date} wutworjeny'
index 2f9d70fd3428244281cc9fab25ec346a52d60a65..ddb3382a770b0f595fddf8d0459810a450fbd118 100644 (file)
@@ -272,9 +272,8 @@ hu:
         comment: Hozzászólás
         full: Teljes jegyzet
   accounts:
-    edit:
+    show:
       title: Fiók szerkesztése
-      my settings: Személyes beállítások
       current email address: Jelenlegi e-mail-cím
       external auth: Külső hitelesítés
       openid:
@@ -349,9 +348,6 @@ hu:
           használatát ezek a %{tou_link} szabályozzák. Kérjük, kattints a linkre,
           majd olvasd el és fogadd el a szöveget.
         read_tou: Elolvastam és elfogadom a felhasználási feltételeket
-        consider_pd: A fenti megállapodáson felül, a hozzájárulásaimat közkinccsé
-          nyilvánítom
-        consider_pd_why: mi ez?
         guidance_info_html: 'Információk a kifejezések megértéséhez: egy %{readable_summary_link}
           és néhány %{informal_translations_link}'
         readable_summary: ember által olvasható összefoglaló
@@ -2779,9 +2775,6 @@ hu:
           címekről szóló részt
         html: Címed nem jelenik meg nyilvánosan; további információért tekintsd meg
           a %{privacy_policy_link} oldalunkat.
-      consider_pd_html: Úgy vélem, hogy szerkesztéseim a %{consider_pd_link} kategóriába
-        tartoznak.
-      consider_pd: közkincs
       or: vagy
       use external auth: vagy használhatsz külső fiókokat a bejelentkezéshez
     no_such_user:
@@ -2797,7 +2790,6 @@ hu:
       my notes: Saját jegyzetek
       my messages: Üzenetek
       my profile: Profil
-      my settings: Személyes beállítások
       my comments: Saját hozzászólások
       my_preferences: Megjelenési beállítások
       my_dashboard: Irányítópult
@@ -2876,13 +2868,13 @@ hu:
       show:
         title: Felhasználók
         heading: Felhasználók
-        empty: Nem találtam egyező felhasználót
       page:
         found_users:
           one: '%{count} felhasználó található'
           other: '%{count} felhasználó található'
         confirm: Kijelölt felhasználók megerősítése
         hide: Kijelölt felhasználók elrejtése
+        empty: Nem találtam egyező felhasználót
       user:
         summary_html: '%{name} létrejött innen: %{ip_address}, ekkor: %{date}'
         summary_no_ip_html: '%{name} letrejött ekkor: %{date}'
index 0e09490f35ca2f83c08d8fb3fc6c93c1ff8c97fb..89c3643b1b5ca8507d11a41cf307b2688bbd78ea 100644 (file)
@@ -245,9 +245,8 @@ ia:
         comment: Commento
         full: Nota complete
   accounts:
-    edit:
+    show:
       title: Modificar conto
-      my settings: Mi parametros
       current email address: Adresse de e-mail actual
       external auth: Authentication externe
       openid:
@@ -325,10 +324,6 @@ ia:
           fornite per OSMF. Per favor, clicca sur le ligamine, lege le texto, e declara
           te de accordo.
         read_tou: Io ha legite e io accepta le Conditiones de uso
-        consider_pd: In addition a lo que precede, io considera mi contributiones
-          como essente in le dominio public
-        consider_pd_why: que es isto?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Information pro adjutar a comprender iste terminos: un
           %{readable_summary_link} e qualque %{informal_translations_link}'
         readable_summary: summario legibile per humanos
@@ -349,6 +344,9 @@ ia:
           Conditiones de contributor. Pro plus informationes, per favor vide %{terms_declined_link}.
         terms_declined_link: iste pagina wiki
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
   browse:
     deleted_ago_by_html: Delite %{time_ago} per %{user}
     edited_ago_by_html: Modificate %{time_ago} per %{user}
@@ -2786,8 +2784,6 @@ ia:
           sur adresses de e-mail
         html: Tu adresse non es monstrate publicamente. Consulta nostre %{privacy_policy_link}
           pro plus information.
-      consider_pd_html: Io considera que mi contributiones es in le %{consider_pd_link}.
-      consider_pd: dominio public
       or: o
       use external auth: o usa un tertio pro aperir session
     no_such_user:
@@ -2803,7 +2799,6 @@ ia:
       my notes: Mi notas
       my messages: Mi messages
       my profile: Mi profilo
-      my settings: Mi parametros
       my comments: Mi commentos
       my_preferences: Mi preferentias
       my_dashboard: Mi pannello
@@ -2882,13 +2877,13 @@ ia:
       show:
         title: Usatores
         heading: Usatores
-        empty: Nulle usator correspondente trovate
       page:
         found_users:
           one: '%{count} usator trovate'
           other: '%{count} usatores trovate'
         confirm: Confirmar usatores seligite
         hide: Celar usatores seligite
+        empty: Nulle usator correspondente trovate
       user:
         summary_html: '%{name} create ab %{ip_address} le %{date}'
         summary_no_ip_html: '%{name} create le %{date}'
index 9f5e391ec48e461f2c3c224665a6f4f0c745bca6..4aeadf41dbea22814446ed91c9439a4152b007f6 100644 (file)
@@ -265,9 +265,8 @@ id:
         comment: Komentar
         full: Catatan lengkap
   accounts:
-    edit:
+    show:
       title: Edit akun
-      my settings: Pengaturan saya
       current email address: Alamat surel saat ini
       external auth: Autentikasi Eksternal
       openid:
@@ -344,9 +343,6 @@ id:
           lainnya yang disediakan oleh OSMF. Tolong tekan tautannya, baca dan setujui
           teksnya.'
         read_tou: Saya telah membaca dan menyetujui Ketentuan Penggunaan
-        consider_pd: Sebagai tambahan perjanjian di atas, saya menganggap kontribusi
-          saya berada di dalam Domain Publik
-        consider_pd_why: apa ini?
         guidance_info_html: 'Informasi untuk membantu Anda memahami ketentuan ini:
           %{readable_summary_link} dan %{informal_translations_link}'
         readable_summary: ringkasan dasar
@@ -2634,7 +2630,6 @@ id:
       my notes: Catatanku
       my messages: Pesanku
       my profile: Profilku
-      my settings: Pengaturanku
       my comments: Komentarku
       my_preferences: Preferensi Saya
       my_dashboard: Dasbor Saya
@@ -2710,10 +2705,10 @@ id:
       show:
         title: Pengguna
         heading: Pengguna
-        empty: Tidak ditemukan pengguna yang sesuai
       page:
         confirm: Konfirmasi Pengguna yang Dipilih
         hide: Sembunyikan Pengguna yang Dipilih
+        empty: Tidak ditemukan pengguna yang sesuai
       user:
         summary_html: '%{name} dibuat dari %{ip_address} pada %{date}'
         summary_no_ip_html: '%{name} dibuat pada %{date}'
index 1a22b562caefb067daa20e528256c820b4102792..44aa96529caf4cf5003b1bbb714e46041c2f4598 100644 (file)
@@ -259,9 +259,8 @@ is:
         comment: Athugasemd
         full: Allur minnispunkturinn
   accounts:
-    edit:
+    show:
       title: Stillingar
-      my settings: Mínar stillingar
       current email address: Núverandi póstfang
       external auth: Ytri auðkenning
       openid:
@@ -342,9 +341,6 @@ is:
         tou_explain_html: Þessi %{tou_link} stýra notkuninni á vefsvæðinu ásamt öðrum
           stoðkerfum OSMF. Smelltu á tengilinn, lestu síðan og samþykktu textann.
         read_tou: Ég hef lesið og samþykki notkunarskilmálana
-        consider_pd: Til viðbótar við ofangreint samkomulag, lít ég svo á að framlög
-          mín verði í almenningseigu (Public Domain)
-        consider_pd_why: hvað þýðir þetta?
         guidance_info_html: 'Upplýsingar sem hjálpa til við að skilja þessi hugtök:
           %{readable_summary_link} á mannamáli og nokkrar %{informal_translations_link}'
         readable_summary: læsilegt yfirlit
@@ -2793,9 +2789,6 @@ is:
           tölvupóstföng
         html: Netfangið þitt er ekki birt opinberlega, skoðaðu síðuna um %{privacy_policy_link}
           til að sjá nánari upplýsingar.
-      consider_pd_html: Ég lít svo á að framlög mín verði í %{consider_pd_link}.
-      consider_pd: almenningseign
-      consider_pd_url: https://wiki.osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
       or: eða
       use external auth: eða nýskráð þig með utanaðkomandi þjónustu
     no_such_user:
@@ -2811,7 +2804,6 @@ is:
       my notes: Minnispunktarnir mínir
       my messages: Skilaboðin mín
       my profile: Notandasniðið mitt
-      my settings: Stillingarnar mínar
       my comments: Athugasemdir mínar
       my_preferences: Valmöguleikar
       my_dashboard: Stjórnborðið mitt
@@ -2889,13 +2881,13 @@ is:
       show:
         title: Notendur
         heading: Notendur
-        empty: Engir samsvarandi notendur fundust
       page:
         found_users:
           one: '%{count} notandi fannst'
           other: '%{count} notendur fundust'
         confirm: Staðfesta valda notendur
         hide: Fela valda notendur
+        empty: Engir samsvarandi notendur fundust
       user:
         summary_html: '%{name} var útbúinn frá %{ip_address} þann %{date}'
         summary_no_ip_html: '%{name} útbúinn þann %{date}'
index 5599657ce40ce125170d136ded4aaa92ec8f78e1..805b32b5f673fcb1ca46944d8667851cb45ca7fc 100644 (file)
@@ -150,6 +150,7 @@ it:
         allow_write_prefs: modifica le sue preferenze utente
         allow_write_diary: creare pagine di diario e commenti
         allow_write_api: modificare la mappa
+        allow_write_changeset_comments: commentare i gruppi di modifiche
         allow_read_gpx: visualizza le sue tracce GPS private
         allow_write_gpx: carica tracce GPS
         allow_write_notes: modificare le note
@@ -305,9 +306,9 @@ it:
         comment: Commento
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Modifica profilo
-      my settings: Impostazioni
+      my_account: La mia utenza
       current email address: Indirizzo email attuale
       external auth: Autenticazione esterna
       openid:
@@ -323,6 +324,9 @@ it:
           fossero di pubblico dominio.
         link: https://osmfoundation.org/wiki/Licence/Contributor_Terms/IT
         link text: che cos'è questo?
+        not_agreed_with_pd: Non hai dichiarato se considerare le tue modifiche come
+          fossero di pubblico dominio.
+        pd_link_text: dichiara
       save changes button: Salva modifiche
       delete_account: Elimina Utenza...
     go_public:
@@ -388,9 +392,6 @@ it:
           di altre infrastrutture fornite dalla OSMF. Clicca sul collegamento, leggi
           il testo e accetta.
         read_tou: Ho letto e accetto le Condizioni d'uso
-        consider_pd: In aggiunta a quanto sopra, considero i miei contributi come
-          fossero di pubblico dominio
-        consider_pd_why: cos'è questo?
         guidance_info_html: 'Informazioni per aiutarti a comprendere queste condizioni:
           un %{readable_summary_link} e alcune %{informal_translations_link}'
         readable_summary: riassunto leggibile da un essere umano
@@ -411,6 +412,20 @@ it:
           i nuovi termini di contribuzione. Per ulteriori informazioni consultare
           %{terms_declined_link}.
         terms_declined_link: questa pagina wiki
+    pd_declarations:
+      show:
+        title: Considera i miei contributi di pubblico dominio
+        consider_pd: Io considero i miei contributi di pubblico dominio
+        consider_pd_why: Perché dovrei volere che i miei contributi fossero di pubblico
+          dominio?
+        confirm: Conferma
+      create:
+        successfully_declared: Hai dichiarato di considerare le tue modifiche come
+          fossero di pubblico dominio.
+        already_declared: Hai già dichiarato di considerare le tue modifiche come
+          fossero di pubblico dominio.
+        did_not_confirm: Non hai confermato di considerare le tue modifiche come fossero
+          di pubblico dominio.
   browse:
     deleted_ago_by_html: Cancellato %{time_ago} da %{user}
     edited_ago_by_html: Modificato %{time_ago} da %{user}
@@ -480,6 +495,7 @@ it:
       feature_warning: Caricamento di %{num_features} caratteristiche, che possono
         rendere il tuo browser lento o che non risponde. Sei sicuro di voler visualizzare
         questi dati?
+      feature_error: 'Impossibile caricare gli elementi: %{message}'
       load_data: Carica dati
       loading: Caricamento in corso...
     tag_details:
@@ -1623,9 +1639,11 @@ it:
       reports: Segnalazioni
       last_updated: Ultima modifica
       last_updated_time_ago_user_html: '%{time_ago} da %{user}'
+      reporting_users: Utenti segnalatori
       reports_count:
         one: '%{count} segnalazione'
         other: '%{count} segnalazioni'
+      more_reporters: e altri %{count}
       reported_item: Elemento segnalato
       states:
         ignored: Ignorato
@@ -1660,6 +1678,8 @@ it:
       reopened: Lo stato del problema è stato impostato su ‘Aperto’
     comments:
       comment_from_html: Commento di %{user_link} il %{comment_created_at}
+      reassign_to_moderators: Riassegna il problema ai moderatori
+      reassign_to_administrators: Riassegna il problema agli amministratori
     reports:
       reported_by_html: Segnalato come %{category} da %{user} il %{updated_at}
     helper:
@@ -1738,6 +1758,13 @@ it:
     communities: Comunità
     learn_more: Ulteriori informazioni
     more: Altro
+    offline_flash:
+      osm_offline: Per permettere lo svolgimento di essenziali lavori di manutenzione,
+        il database di OpenStreetMap è attualmente offline.
+      osm_read_only: Per permettere lo svolgimento di essenziali lavori di manutenzione,
+        il database di OpenStreetMap è attualmente in modalità sola-lettura.
+      expected_restore_html: Si prevede che i servizi verranno ripristinati in %{time}.
+      announcement: Potete leggere l'annuncio qui.
   user_mailer:
     diary_comment_notification:
       description: 'Voce del diario OpenStreetMap #%{id}'
@@ -2815,10 +2842,12 @@ it:
       write_prefs: Modificare le preferenze dell'utente
       write_diary: Creare voci del diario e commenti
       write_api: Modificare la mappa
+      write_changeset_comments: Commentare i gruppi di modifiche
       read_gpx: Leggere tracciati GPS privati
       write_gpx: Caricare tracciati GPS
       write_notes: Modificare le note
       write_redactions: Rimuovere dati cartografici
+      write_blocks: Creare e revocare blocchi di utenze
       read_email: Leggere indirizzo di posta elettronica dell'utente
       consume_messages: Leggere, aggiornare lo stato e cancellare i messaggi dell'utente
       send_messages: Inviare messaggi privati ad altri utenti
@@ -2910,8 +2939,6 @@ it:
           sugli indirizzi e-mail
         html: Il tuo indirizzo non viene visualizzato pubblicamente, consulta la nostra
           %{privacy_policy_link} per ulteriori informazioni.
-      consider_pd_html: Considero i miei contributi in %{consider_pd_link}.
-      consider_pd: pubblico dominio
       or: o
       use external auth: o registrati tramite terze parti
     no_such_user:
@@ -2927,7 +2954,7 @@ it:
       my notes: Le mie note
       my messages: I miei messaggi
       my profile: Il mio profilo
-      my settings: Impostazioni
+      my_account: La mia utenza
       my comments: I miei commenti
       my_preferences: Preferenze
       my_dashboard: La mia dashboard
@@ -3008,13 +3035,23 @@ it:
       show:
         title: Utenti
         heading: Utenti
-        empty: Nessun utente corrispondente trovato
+        select_status: Seleziona stato
+        states:
+          pending: In attesa
+          active: Attivo
+          confirmed: Confermato
+          suspended: Sospeso
+          deleted: Cancellato
+        name_or_email: Nome o e-mail
+        ip_address: Indirizzo IP
+        search: Cerca
       page:
         found_users:
           one: '%{count} utente trovato'
           other: '%{count} utenti trovati'
         confirm: Conferma Utenti Selezionati
         hide: Nascondi Utenti Selezionati
+        empty: Nessun utente corrispondente trovato
       user:
         summary_html: '%{name} creato da %{ip_address} il %{date}'
         summary_no_ip_html: '%{name} creato il %{date}'
@@ -3214,6 +3251,7 @@ it:
       closed_title: 'Nota risolta #%{note_name}'
       hidden_title: 'Nota nascosta #%{note_name}'
       description_when_author_is_deleted: cancellato
+      description_when_there_is_no_opening_comment: sconosciuto
       event_opened_by_html: Creata da %{user} %{time_ago}
       event_opened_by_anonymous_html: Creata da anonimo %{time_ago}
       event_commented_by_html: Commento da %{user} %{time_ago}
@@ -3447,6 +3485,8 @@ it:
           ninth: 9ª
           tenth: 10ª
       time: Tempo
+      download: Scarica l'itinerario come GeoJson
+      filename: itinerario
     query:
       node: Nodo
       way: Percorso
@@ -3461,6 +3501,9 @@ it:
       show_address: Mostra indirizzo
       query_features: Ricerca di elementi
       centre_map: Centra la mappa qui
+    home:
+      marker_title: La mia posizione di casa
+      not_set: La posizione di casa non è impostata per la tua utenza
   redactions:
     edit:
       heading: Modifica revisione
index a2216bdf02f0c10d769fd2345390d503724189e6..6c8ba09655124ec351f2de43e307128be1a50fe6 100644 (file)
@@ -287,9 +287,8 @@ ja:
         comment: コメント
         full: メモ全文
   accounts:
-    edit:
+    show:
       title: アカウントの編集
-      my settings: 設定
       current email address: 現在のメールアドレス
       external auth: 外部認証
       openid:
@@ -346,8 +345,6 @@ ja:
         read_ct: 私は以下の貢献者同意を読み終え、これに同意します
         tou_explain_html: これらの%{tou_link}では、OSMFによって提供されているウェブサイトおよびその他のインフラストラクチャの利用について定めています。リンクをクリックして、読み、文書に同意してください。
         read_tou: 私は利用規約を読み終え、これに同意します
-        consider_pd: 上記に加え、私の投稿をパブリック ドメインとします
-        consider_pd_why: これは何ですか?
         guidance_info_html: 'これらの用語を理解するのに役立つ情報: %{readable_summary_link} といくつかの %{informal_translations_link}'
         readable_summary: 人間が読める要約
         informal_translations: 非公式の翻訳
@@ -2544,8 +2541,6 @@ ja:
         privacy_policy: プライバシー・ポリシー
         privacy_policy_title: OSMFのプライバシーポリシー(メールアドレスに関するセクションを含む)
         html: あなたのアドレスは公開されません。詳細については、%{privacy_policy_link} をご覧ください。
-      consider_pd_html: 私の貢献は %{consider_pd_link} にあるとみなします。
-      consider_pd: パブリックドメイン
       or: または
       use external auth: サードパーティのアカウントでもログインできます。
     no_such_user:
@@ -2560,7 +2555,6 @@ ja:
       my notes: 自分のメモ
       my messages: 自分のメッセージ
       my profile: 自分のプロフィール
-      my settings: 設定
       my comments: 自分のコメント
       my_preferences: 個人設定
       my_dashboard: 私のダッシュボード
@@ -2625,10 +2619,10 @@ ja:
       show:
         title: 利用者
         heading: 利用者
-        empty: 該当する利用者が見つかりません
       page:
         confirm: 選択した利用者を承認
         hide: 選択した利用者を非表示
+        empty: 該当する利用者が見つかりません
       user:
         summary_html: '%{name} は %{ip_address}から%{date}に作成されました。'
         summary_no_ip_html: '%{name} は%{date}に作成されました。'
index ac2147b8256138e02b062bc938fd7ca3caf42353..b4be8dfe5f89ff775d35f6e04f96509c5c80b057 100644 (file)
@@ -120,9 +120,8 @@ ka:
       entry:
         comment: კომენტარი
   accounts:
-    edit:
+    show:
       title: ანგარიშის რედაქტირება
-      my settings: ჩემი პარამეტრები
       current email address: 'ელ-ფოსტის ამჟამინდელი მისამართი:'
       openid:
         link: http://wiki.openstreetmap.org/wiki/KA:OpenID
@@ -132,7 +131,6 @@ ka:
       save changes button: ცვლილებების შენახვა
     terms:
       show:
-        consider_pd_why: რა არის ეს?
         legale_select: 'გთხოვთ, აირჩიეთ თქვენი ქვეყანა:'
         legale_names:
           france: საფრანგეთი
@@ -945,7 +943,6 @@ ka:
     show:
       my diary: ჩემი დღიური
       my edits: ჩემი რედაქტირება
-      my settings: ჩემი პარამეტრები
       my comments: ჩემი კომენტარები
       send message: შეტყობინების გაგზავნა
       diary: დღიური
index 9e199c91ee50c467130943fc2bb7d0b29000cbcb..291862321ba2e75e1ce2acc85f2afe9e301066e2 100644 (file)
@@ -204,9 +204,8 @@ kab:
         comment: Awennit
         full: Tazmilt tummiḍt
   accounts:
-    edit:
+    show:
       title: Ẓreg amiḍan
-      my settings: Iɣewwaṛen-iw
       current email address: Tansa imayl n tura
       openid:
         link text: d acu-t wa?
@@ -223,7 +222,6 @@ kab:
       show:
         title: Tiwtilin n iwiziw
         heading: Tiwtilin n iwiziw
-        consider_pd_why: d acu-t wa?
         legale_select: 'Tamurt n tnezduɣt:'
         legale_names:
           france: Fṛansa
@@ -1115,7 +1113,6 @@ kab:
       my notes: Tizmilin-iw
       my messages: Iznan-iw
       my profile: Amaɣnu-iw
-      my settings: Iɣewwaṛen-iw
       my comments: Iwenniten-iw
       blocks on me: Asewḥel i y-iɛnan
       blocks by me: Asewḥel sɣur-i
@@ -1159,10 +1156,10 @@ kab:
       show:
         title: Iseqdacen
         heading: Iseqdacen
-        empty: Ulac aseqdac d-yefɣen deg unadi
       page:
         confirm: Sentem iseqdacen yettwafernen
         hide: Ffer iseqdacen yettwafernen
+        empty: Ulac aseqdac d-yefɣen deg unadi
       user:
         summary_html: '%{name} yettwarna si %{ip_address} di %{date}'
         summary_no_ip_html: '%{name} yettwarna di  %{date}'
index 64a3b1d29ceafdfe7cc79e4c00e97acaebb0ee03..9aa93ffbc2d830f7980fcc0c7e94d2d412e40b31 100644 (file)
@@ -198,8 +198,7 @@ kk-cyrl:
       entry:
         comment: Пікір
   accounts:
-    edit:
-      my settings: Баптауларым
+    show:
       current email address: Ағымдағы е-пошта мекенжайы
       openid:
         link text: бұл не?
@@ -227,7 +226,6 @@ kk-cyrl:
         cancel: Болдырмау
     terms:
       show:
-        consider_pd_why: бұл не?
         continue: Жалғастыру
         legale_names:
           france: Франция
@@ -1161,7 +1159,6 @@ kk-cyrl:
       my notes: Ескертпелерім
       my messages: Хаттарым
       my profile: Бейінім
-      my settings: Баптауларым
       my_preferences: Қалауларым
       send message: Хат жіберу
       diary: Күнделік
index 55724bf11d027b673d15685a6186df4bdde9e76a..c79716764ee6896c34dee33892ce2daddf79cf26 100644 (file)
@@ -96,7 +96,7 @@ km:
         languages: ភាសា​
         pass_crypt: ពាក្យ​សម្ងាត់
   accounts:
-    edit:
+    show:
       title: កែប្រែគណនី​
     update:
       success_confirm_needed: ព័ត៌មានអ្នកប្រើប្រាស់​ បានបន្ទាន់សម័យដោយជោគជ័យ​។ សូមពិនិត្យមើលអ៊ីមែលរបស់អ្នក
index 4327fb8e162e9307e4498bfbb4254f027aee697c..8471588f9fba3b9bd7da400dd65f6dd225aebce8 100644 (file)
@@ -188,9 +188,8 @@ kn:
         comment: ಅಭಿಪ್ರಾಯ
         full: ಪೂರ್ತಿ ಟಿಪ್ಪಣಿ
   accounts:
-    edit:
+    show:
       title: ಖಾತೆಯನ್ನು ಸಂಪಾದಿಸಿ
-      my settings: ನನ್ನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು
       current email address: ಪ್ರಸ್ತುತ ಇಮೇಲ್ ವಿಳಾಸ
       external auth: ಬಾಹ್ಯ ದೃಢೀಕರಣ
       openid:
index ed9fbdb6728d98a1b104245940d1d13e5d201e19..7d1d0c4de19f1e8a838dd932872184e42b9c531b 100644 (file)
@@ -273,9 +273,9 @@ ko:
         comment: 의견
         full: 전체 참고
   accounts:
-    edit:
+    show:
       title: 계정 편집
-      my settings: 프로필 설
+      my_account: 내 계
       current email address: 현재 이메일 주소
       external auth: 외부 인증
       openid:
@@ -333,8 +333,6 @@ ko:
         tou_explain_html: 이러한 %{tou_link}는 오픈스트리트맵 재단에서 제공하는 웹사이트 및 기타 인프라 사용을 관리합니다.
           링크를 클릭하여 텍스트를 읽고 동의하십시오.
         read_tou: 이용약관을 읽었으며 동의합니다
-        consider_pd: 위의 내용 외에도 내 기여가 퍼블릭 도메인에 있다고 간주합니다
-        consider_pd_why: 무엇인가요?
         guidance_info_html: '이러한 용어를 이해하는 데 도움이 되는 정보: %{readable_summary_link} /
           일부 %{informal_translations_link}'
         readable_summary: 해석 요약본
@@ -353,6 +351,10 @@ ko:
         terms_declined_html: 새 기여자 약관에 동의하지 않기로 결정하셨습니다. 자세한 내용은 %{terms_declined_link}를
           참조하세요.
         terms_declined_link: 이 위키 문서
+    pd_declarations:
+      show:
+        consider_pd: 내 기여를 퍼블릭 도메인에 속하는 것으로 간주합니다
+        confirm: 확인
   browse:
     deleted_ago_by_html: '%{time_ago}에 %{user}님이 삭제함'
     edited_ago_by_html: '%{time_ago}에 %{user}님이 편집함'
@@ -2483,6 +2485,7 @@ ko:
       write_gpx: GPS 궤적 업로드
       write_notes: 참고 수정
       write_redactions: 지도 데이터 삭제
+      write_blocks: 사용자 차단 생성 및 취소
       read_email: 사용자 이메일 주소 읽기
       consume_messages: 사용자 메시지 읽기, 상태 업데이트 및 삭제
       send_messages: 다른 사용자에게 개인 메시지 보내기
@@ -2560,8 +2563,6 @@ ko:
         privacy_policy: 개인정보처리방침
         privacy_policy_title: 이메일 주소 섹션을 포함한 OSMF 개인 정보 보호 정책
         html: 당신의 주소는 공개적으로 노출되지 않습니다. 자세한 내용은 %{privacy_policy_link}를 참조하세요.
-      consider_pd_html: 내 기여가 %{consider_pd_link}에 속함을 선언합니다.
-      consider_pd: 퍼블릭 도메인
       or: 혹은
       use external auth: 다른 제3자 로그인 방식 사용하기
     no_such_user:
@@ -2576,7 +2577,7 @@ ko:
       my notes: 내 참고
       my messages: 내 메시지
       my profile: 내 프로필
-      my settings: 프로필 설
+      my_account: 내 계
       my comments: 내 의견
       my_preferences: 내 환경 설정
       my_dashboard: 내 대시보드
@@ -2648,12 +2649,20 @@ ko:
       show:
         title: 사용자
         heading: 사용자
-        empty: 일치하는 사용자를 찾을 수 없습니다
+        states:
+          pending: 보류 중
+          confirmed: 확인됨
+          suspended: 정지됨
+          deleted: 삭제됨
+        name_or_email: 이름 또는 이메일
+        ip_address: IP 주소
+        search: 검색
       page:
         found_users:
           other: 사용자 %{count}명 찾음
         confirm: 선택한 사용자 확인
         hide: 선택한 사용자 숨기기
+        empty: 일치하는 사용자를 찾을 수 없습니다
       user:
         summary_html: '%{name}님이 %{date}에 %{ip_address}에서 만들어짐'
         summary_no_ip_html: '%{name}이(가) %{date}에 만들어짐'
@@ -2815,6 +2824,7 @@ ko:
       open_title: '해결되지 않은 참고 #%{note_name}'
       closed_title: '해결된 참고 #%{note_name}'
       hidden_title: '숨겨진 참고 #%{note_name}'
+      description_when_there_is_no_opening_comment: 알 수 없음
       event_opened_by_html: '%{time_ago} %{user}님이 생성함'
       event_opened_by_anonymous_html: '%{time_ago} 익명의 사용자가 생성함'
       event_commented_by_html: '%{time_ago} %{user}님의 댓글'
index 43308228b5704929767dff26dd161f53b1d1979b..dd6365aba0ecb1ffb0e84aed5e48e22018a9019d 100644 (file)
@@ -56,7 +56,7 @@ ksh:
         languages: Schprohche
         pass_crypt: Paßwoot
   accounts:
-    edit:
+    show:
       external auth: 'Donn övver en anndere Schtäll de Dahte för et Enlogge pröhve
         lasse:'
     terms:
index d00a6f986e03363c3ad2ed6054d87b15934630de..7aeda916700d5114fa26c18d744700ca196d0dd5 100644 (file)
@@ -244,9 +244,8 @@ ku-Latn:
         comment: Şîrove
         full: Temamiya notê
   accounts:
-    edit:
+    show:
       title: Hesabê biguherîne
-      my settings: Hevyazên min
       current email address: Navnîşana e-nameyê yê niha
       external auth: Teyîdkirina xaricî
       openid:
@@ -316,9 +315,6 @@ ku-Latn:
           OSMF ve tê temînkirin bi rê ve dibe. Ji kerema xwe bitikîne ser lînkê, nivîsê
           bixwîne û qebûl bike.
         read_tou: Min Şertûmercên Bikaranînê xwend û qebûl kir
-        consider_pd: Tevî evên li jorê, tu dikarî bibijêrî ku beşdariyên te wek Malê
-          Giştî (malê ku ne aîdî şexsekî ye) were qebûlkirin.
-        consider_pd_why: Ev çi ye?
         readable_summary: kurteya xwendinbar ê li gor însanan
         informal_translations: tercimeyên nefermî
         continue: Dewam bike
@@ -2294,7 +2290,6 @@ ku-Latn:
       my notes: Notên min
       my messages: Peyamên min
       my profile: Profîla min
-      my settings: Hevyazên min
       my comments: Şîroveyên min
       my_preferences: Tercîhên min
       my_dashboard: Panela Kontrolê
@@ -2353,10 +2348,10 @@ ku-Latn:
       show:
         title: Bikarhêner
         heading: Bikarhêner
-        empty: Bikarhênerek ku lê were nehate dîtin
       page:
         confirm: Bikarhênerên bijartî bipejirîne
         hide: Bikarhênerên bijartî veşêre
+        empty: Bikarhênerek ku lê were nehate dîtin
       user:
         summary_html: '%{name} ji aliyê %{ip_address} ve di %{date} de hate çêkirin'
         summary_no_ip_html: '%{name} di %{date} de hate çêkirin'
index 07093d507a998ff37ebd86c3ab75a8b39670d75d..5f853bda6a8ae4678a43ca76601252f1422284bc 100644 (file)
@@ -244,9 +244,8 @@ lb:
         comment: Bemierkung
         full: Vollstännegen Hiweis
   accounts:
-    edit:
+    show:
       title: Benotzerkont änneren
-      my settings: Meng Astellungen
       current email address: Aktuell E-Mail-Adress
       external auth: Extern Authentifikatioun
       openid:
@@ -302,9 +301,6 @@ lb:
     terms:
       show:
         heading: Bedingungen
-        consider_pd: Zousätzlech zu den uewe genannte Konditioune betruechten ech
-          meng Bäiträg als gemengfräi (domaine public).
-        consider_pd_why: wat ass dat?
         informal_translations: informell Iwwersetzungen
         continue: Weider
         cancel: Ofbriechen
@@ -315,6 +311,9 @@ lb:
           rest_of_world: Rescht vun der Welt
       terms_declined_flash:
         terms_declined_link: dës Wiki-Säit
+    pd_declarations:
+      show:
+        confirm: Confirméieren
   browse:
     deleted_ago_by_html: '%{time_ago} vum %{user} geläscht'
     edited_ago_by_html: '%{time_ago} vum %{user} geännert'
@@ -888,6 +887,7 @@ lb:
           bridleway: Wee fir Päerd
           bus_guideway: Busspur
           bus_stop: Busarrêt
+          busway: Busspuer
           construction: Autobunn (am Bau)
           corridor: Couloir
           crossing: Kräizung
@@ -2227,8 +2227,8 @@ lb:
   application:
     settings_menu:
       account_settings: Astellunge vum Benotzerkont
-      oauth2_applications: OAuth 2 Applikatiounen
-      oauth2_authorizations: OAuth 2 Autorisatiounen
+      oauth2_applications: OAuth-2-Applikatiounen
+      oauth2_authorizations: OAuth-2-Autorisatiounen
     auth_providers:
       openid_url: OpenID-URL
       openid_login_button: Virufueren
@@ -2342,7 +2342,7 @@ lb:
       my notes: Meng Notizen
       my messages: Meng Messagen
       my profile: Mäi Profil
-      my settings: Meng Astellungen
+      my_account: Mäi Benotzerkont
       my comments: Meng Bemierkungen
       my_preferences: Meng Benotzerastellungen
       my_dashboard: Meng Iwwersiichtssäit
@@ -2392,13 +2392,21 @@ lb:
       show:
         title: Benotzer
         heading: Benotzer
-        empty: Et goufe keng sou Benotzer fonnt
+        select_status: Status auswielen
+        states:
+          active: Aktiv
+          confirmed: Confirméiert
+          deleted: Geläscht
+        name_or_email: Numm oder E-Mail
+        ip_address: IP-Adress
+        search: Sichen
       page:
         found_users:
           one: '%{count} Benotzer fonnt'
           other: '%{count} Benotzer fonnt'
         confirm: Erausgesicht Benotzer confirméieren
         hide: Erausgesicht Benotzer vrstoppen
+        empty: Et goufe keng sou Benotzer fonnt
     changeset_comments:
       page:
         when: Wéini
@@ -2491,6 +2499,7 @@ lb:
       closed_title: 'Geléisten Hiweis #%{note_name}'
       hidden_title: Verstoppt Notiz N° %{note_name}
       description_when_author_is_deleted: geläscht
+      description_when_there_is_no_opening_comment: onbekannt
       report: Dësen Hiweis mellen
       discussion: Diskussioun
       subscribe: Abonéieren
@@ -2615,6 +2624,8 @@ lb:
           ninth: néngt
           tenth: zéngt
       time: Zäit
+      download: Streck als GeoJSON eroflueden
+      filename: Streck
     query:
       way: Wee
       relation: Relatioun
index 04fe104300a27ab28755da6d3ce1ce0652aa5de9..1a75790efc3418eaf2748a69c59e87b1c13544b5 100644 (file)
@@ -286,9 +286,8 @@ lt:
         comment: Komentaras
         full: Pilna pastaba
   accounts:
-    edit:
+    show:
       title: Keisti paskyrą
-      my settings: Mano nustatymai
       current email address: Dabartinis el. pašto adresas
       external auth: Išorinė autentikacija
       openid:
@@ -364,8 +363,6 @@ lt:
           infrastruktūros naudojimą. Prašome paspausti nuorodą, perskaityti ir sutikti
           su tekstu.
         read_tou: Aš perskaičiau ir sutinku su naudojimo sąlygomis
-        consider_pd: Be pirmiau paminėtų, laikau, kad mano indėlis būtų Viešo Naudojimo
-        consider_pd_why: kas tai?
         guidance_info_html: 'Informacija, padedanti suprasti šiuos terminus: %{readable_summary_link}
           ir kai kurie %{informal_translations_link}'
         readable_summary: žmogui skirta santrauka
@@ -2667,8 +2664,6 @@ lt:
         privacy_policy_title: OSMF privatumo politika, įskaitant skyrių apie el. pašto
           adresus
         html: Jūsų adresas nerodomas viešai, daugiau informacijos rasite mūsų %{privacy_policy_link}.
-      consider_pd_html: Manau, kad mano indėlis yra %{consider_pd_link}.
-      consider_pd: viešo domeno
       or: ar
       use external auth: arba prisijunkite naudodami trečiąją šalį
     no_such_user:
@@ -2684,7 +2679,6 @@ lt:
       my notes: Mano žemėlapio pastabos
       my messages: Mano pranešimai
       my profile: Mano profilis
-      my settings: Mano nustatymai
       my comments: Mano komentarai
       my_preferences: Mano parinktys
       my_dashboard: Mano valdymo skydelis
@@ -2759,10 +2753,10 @@ lt:
       show:
         title: Naudotojai
         heading: Naudotojai
-        empty: Nerasta atitinkančių naudotojų
       page:
         confirm: Patvirtinti pažymėtus naudotojus
         hide: Slėpti parinktus naudotojus
+        empty: Nerasta atitinkančių naudotojų
       user:
         summary_html: '%{name} sukurta %{ip_address} %{date}'
         summary_no_ip_html: '%{name} sukurta %{date}'
index cfc410de2bb0d7260dde8f6566bce450fe4b974d..eef210c0569e5df429c69877cef63386c6dd17cc 100644 (file)
@@ -195,9 +195,8 @@ lv:
         comment: Komentārs
         full: Pilna piezīme
   accounts:
-    edit:
+    show:
       title: Rediģēt kontu
-      my settings: Mani iestatījumi
       current email address: Pašreizējā e-pasta adrese
       external auth: Ārējā autentifikācija
       openid:
@@ -240,9 +239,6 @@ lv:
       show:
         title: Dalībnieka noteikumi
         heading: Dalībnieka noteikumi
-        consider_pd: Papildinājumā augstākminētajai vienošanai, Es pieņemu mana devuma
-          būšanu Publiskajā Domēnā
-        consider_pd_why: kas tas ir?
         informal_translations: neformāli tulkojumi
         you need to accept or decline: Lūdzu izlasi un vai nu pieņem vai noraidi jaunos
           Veidotāju Noteikumus, lai turpinātu.
@@ -1819,7 +1815,6 @@ lv:
       my notes: Manas piezīmes
       my messages: Manas ziņas
       my profile: Mans profils
-      my settings: Mani iestatījumi
       my comments: Mani komentāri
       my_preferences: Mani iestatījumi
       my_dashboard: Mans vadības panelis
@@ -1874,10 +1869,10 @@ lv:
       show:
         title: Lietotāji
         heading: Lietotāji
-        empty: Nav atrasti atbilstoši lietotāji
       page:
         confirm: Apstiprināt atlasītos lietotājus
         hide: Paslēpt atlasītos lietotājus
+        empty: Nav atrasti atbilstoši lietotāji
       user:
         summary_html: '%{name} izveidoja no %{ip_address} @ %{date}'
         summary_no_ip_html: '%{name} izveidoja @ %{date}'
index bf77c4a6402883dcb379e46bfb70e198ada6b943..129a7ce06cdb81e532115647ae1c99ce24170d62 100644 (file)
@@ -245,9 +245,8 @@ mk:
         comment: Коментар
         full: Целата белешка
   accounts:
-    edit:
+    show:
       title: Уреди сметка
-      my settings: Мои нагодувања
       current email address: Тековна е-пошта
       external auth: Надворешна заверка
       openid:
@@ -320,8 +319,6 @@ mk:
           на мрежното место и останатата инфраструктура на OSMF. Стиснете на врската,
           прочитајте го текстот и согласете се со него.
         read_tou: Ги прочитав Условите на употреба и се согласувам со нив
-        consider_pd: Покрај горенаведеното, моите придонеси ги сметам за јавна сопственост
-        consider_pd_why: Што е ова?
         guidance_info_html: 'Информации што ќе ви помогнат да ги разберете овие поими:
           %{readable_summary_link} и некои %{informal_translations_link}'
         readable_summary: човечки читлив опис
@@ -2781,8 +2778,6 @@ mk:
         privacy_policy_title: Правилата за лични податоци на OSMF, со одделот за е-поштенски
           адреси
         html: Вашата адреса не се прикажува јавно. Повеќе ќе дознаете на %{privacy_policy_link}.
-      consider_pd_html: Моите придонеси ги сметам за %{consider_pd_link}.
-      consider_pd: јавна сопственост
       or: или
       use external auth: или зачленете се преку надворешно место
     no_such_user:
@@ -2798,7 +2793,6 @@ mk:
       my notes: Мои белешки
       my messages: Мои пораки
       my profile: Мојот профил
-      my settings: Мои поставки
       my comments: Мои коментари
       my_preferences: Мои нагодувања
       my_dashboard: Моја управувачница
@@ -2876,13 +2870,13 @@ mk:
       show:
         title: Корисници
         heading: Корисници
-        empty: Нема најдено такви корисници
       page:
         found_users:
           one: Најдов %{count} корисник
           other: Најдов %{count} корисници
         confirm: Потврди ги одбраните корисници
         hide: Скриј одбрани корисници
+        empty: Нема најдено такви корисници
       user:
         summary_html: '%{name} создадено од %{ip_address} на %{date}'
         summary_no_ip_html: '%{name} создадено на %{date}'
index 5c70eb0bec8dc35d4fa5b451b399477f27254c3b..6561fdaf86edf6d63cb7960f218fcbe177a3236b 100644 (file)
@@ -79,8 +79,7 @@ mo:
       user:
         new_email: (ну се афишязэ публик)
   accounts:
-    edit:
-      my settings: Реглажеле меле
+    show:
       current email address: 'Адреса де поштэ електроникэ курентэ:'
       external auth: 'Ынтраря ын конт екстернэ:'
       openid:
@@ -564,7 +563,6 @@ mo:
       my diary: Журналул меу
       my messages: Месажеле меле
       my profile: Профилул меу
-      my settings: Реглажеле меле
       my comments: Коментарииле меле
     changeset_comments:
       page:
index ebe96b84d8df99f256da5226ab95917c1c7623bd..016a26d52d4ac24fb99eeedebacce11e9855caf9 100644 (file)
@@ -175,9 +175,8 @@ mr:
       entry:
         comment: टिप्पणी
   accounts:
-    edit:
+    show:
       title: खाते संपादा
-      my settings: माझ्या मांडण्या
       current email address: वर्तमान ईमेल पत्ता
       openid:
         link text: हे काय आहे?
@@ -188,7 +187,6 @@ mr:
       show:
         title: योगदात्यांसाठी अटी
         heading: योगदात्यांसाठी अटी
-        consider_pd_why: हे काय आहे?
         legale_select: 'राहण्याचा देश:'
         legale_names:
           france: फ्रान्स
@@ -1244,7 +1242,6 @@ mr:
       my notes: माझ्या टीपा
       my messages: माझे संदेश
       my profile: माझी रूपरेखा
-      my settings: माझ्या मांडण्या
       my comments: माझे अभिप्राय
       my_preferences: माझे प्राधान्ये
       my_dashboard: माझे फलक
index 5a27ba68bf807c7305db097d7dedbb4f122e76af..68a97fbfb822c417ae541c3643c7481a48557e70 100644 (file)
@@ -218,9 +218,8 @@ ms:
         comment: Komen
         full: Nota penuh
   accounts:
-    edit:
+    show:
       title: Sunting akaun
-      my settings: Tetapan saya
       current email address: 'Alamat E-Mel Sekarang:'
       external auth: Pengesahan Luaran
       openid:
@@ -256,9 +255,6 @@ ms:
       show:
         title: Terma-terma penyumbang
         heading: Terma-terma penyumbang
-        consider_pd: Selain perjanjian di atas, saya sudi menyerahkan sumbangan-sumbangan
-          saya dalam Domain Awam
-        consider_pd_why: apakah ini?
         readable_summary: ringkasan yang boleh dibaca manusia
         informal_translations: penterjemahan tidak formal
         continue: Sambung
@@ -1840,7 +1836,6 @@ ms:
       my notes: Nota Saya
       my messages: Pesanan Saya
       my profile: Profil Saya
-      my settings: Tetapan Saya
       my comments: Komen Saya
       my_preferences: Keutamaan Saya
       my_dashboard: Papan Pemuka Saya
@@ -1897,10 +1892,10 @@ ms:
       show:
         title: Pengguna
         heading: Pengguna
-        empty: Tiada pengguna sepadan yang dijumpai
       page:
         confirm: Sahkan Pengguna-Pengguna Terpilih
         hide: Sorokkan Pengguna-Pengguna Terpilih
+        empty: Tiada pengguna sepadan yang dijumpai
       user:
         summary_html: '%{name} diwujudkan dari %{ip_address} pada %{date}'
         summary_no_ip_html: '%{name} diwujudkan pada %{date}'
index 4f1a01ec08129607f202a3f0b8a06f2367956d3d..6d63c4237cf258d1f8886e3f337435cb98bb5a90 100644 (file)
@@ -129,7 +129,7 @@ my:
         comment: မှတ်ချက်
         full: မှတ်စု အပြည့်အစုံ
   accounts:
-    edit:
+    show:
       title: အကောင့်ကို ပြင်ဆင်ရန်
       current email address: လက်ရှိ အီးမေးလ်လိပ်စာ
       save changes button: ပြောင်းလဲမှုများကို သိမ်းရန်
index 33f66188dd46d839245cc0f1bb1a9e44b0219a81..533b48c7a2d13d188ccb7e487fc83ecd8a1f401d 100644 (file)
@@ -264,9 +264,8 @@ nb:
         comment: Kommentar
         full: Fullstendig merknad
   accounts:
-    edit:
+    show:
       title: Rediger konto
-      my settings: Mine innstillinger
       current email address: Nåværende e-postadresse
       external auth: Ekstern autentisering
       openid:
@@ -321,9 +320,6 @@ nb:
         tou_explain_html: Disse %{tou_link} beskriver bruken av nettstedet og annen
           infrastruktur som tilbys av OSMF. Trykk på lenka, les og samtykk til teksten.
         read_tou: Jeg har lest og samtykker til bruksvilkårene
-        consider_pd: I tillegg til det ovennevnte anser jeg mine bidrag for å være
-          i public domain
-        consider_pd_why: hva er dette?
         continue: Fortsett
         you need to accept or decline: Les og deretter enten godta eller avslå de
           nye bidragsytervilkårene for å fortsette.
@@ -2070,7 +2066,6 @@ nb:
       my notes: Mine merknader
       my messages: Mine meldinger
       my profile: Min profil
-      my settings: Mine innstillinger
       my comments: Mine kommentarer
       blocks on me: Mine blokkeringer
       blocks by me: Blokkeringer opprettet av meg
@@ -2123,10 +2118,10 @@ nb:
       show:
         title: Brukere
         heading: Brukere
-        empty: Ingen samsvarende brukere funnet
       page:
         confirm: Bekreft valgte brukere
         hide: Skjul valgte brukere
+        empty: Ingen samsvarende brukere funnet
       user:
         summary_html: '%{name} opprettet fra %{ip_address} den %{date}'
         summary_no_ip_html: '%{name} opprettet %{date}'
index 43be4a57c36d679997da29cf28c450d96305c433..58e1b607b2c579a5b78769181574cbae6186648f 100644 (file)
@@ -73,7 +73,7 @@ nds:
       github: GitHub
       wikipedia: Wikipedia
   accounts:
-    edit:
+    show:
       title: Brukerkonto ännern
       save changes button: Ännern spiekern
     go_public:
index acb9ed2430a50bcede6ea7c4c0d987b33fd73676..7e2b95c78c5041fc5568186c1e5d7c23f206b601 100644 (file)
@@ -226,9 +226,8 @@ ne:
         comment: टिप्पणी
         full: पूर्ण टिप्पणी
   accounts:
-    edit:
+    show:
       title: खाता सम्पादन गर्नुहोस्
-      my settings: मेरो सेटिङहरू
       current email address: हालको इमेल ठेगाना
       external auth: वाह्य अथेन्टिकेसन
       openid:
@@ -257,7 +256,6 @@ ne:
         title: सर्तहरू
         heading: सर्तहरू
         heading_ct: योगदानकर्ता सर्तहरू
-        consider_pd_why: यो के हो ?
         continue: जारी राख्ने
         legale_names:
           france: फ्रान्स
@@ -1413,7 +1411,6 @@ ne:
       my notes: मेरा टिपोटहरू
       my messages: मेरा सन्देशहरू
       my profile: मेरो प्रोफाइल
-      my settings: मेरो सेटिङहरू
       my comments: मेरा टिप्पणीहरू
       edits: सम्पादनहरू
       traces: ट्रेसहरू
index 972316b6b22ae1b276182404bb98717233afb052..554a4f0615c4ad618b48702b4750d62312f6216c 100644 (file)
@@ -304,9 +304,8 @@ nl:
         comment: Opmerking
         full: Volledige opmerking
   accounts:
-    edit:
+    show:
       title: Account bewerken
-      my settings: Mijn instellingen
       current email address: Huidig e-mailadres
       external auth: Externe authenticatie
       openid:
@@ -386,9 +385,6 @@ nl:
           infrastructuur die door de OSMF wordt aangeboden. Klik op de link, lees
           en ga akkoord met de tekst.
         read_tou: Ik heb de gebruiksvoorwaarden gelezen en ga hiermee akkoord
-        consider_pd: Met inachtneming van bovenstaande, bevinden mijn bijdragen zich
-          in het publieke domein
-        consider_pd_why: wat is dit?
         guidance_info_html: 'Informatie om deze termen te helpen begrijpen: een %{readable_summary_link}
           en enkele %{informal_translations_link}'
         readable_summary: voor mensen leesbare samenvatting
@@ -2767,8 +2763,8 @@ nl:
         niet te onderschijven, maar moet ze wel gezien hebben.
     settings_menu:
       account_settings: Accountinstellingen
-      oauth2_applications: OAuth 2 toepassingen
-      oauth2_authorizations: OAuth 2 autorisaties
+      oauth2_applications: OAuth 2-toepassingen
+      oauth2_authorizations: OAuth 2-autorisaties
       muted_users: Gedempte gebruikers
     auth_providers:
       openid_url: OpenID-URL
@@ -2918,8 +2914,6 @@ nl:
         privacy_policy_title: OSMF-privacybeleid, met een sectie over e-mailadressen
         html: Uw adres wordt niet openbaar gemaakt, zie ons %{privacy_policy_link}
           voor meer informatie.
-      consider_pd_html: Ik beschouw mijn bijdragen als onderdeel van het %{consider_pd_link}.
-      consider_pd: publiek domein
       or: of
       use external auth: of schrijf u in via een derde partij
     no_such_user:
@@ -2935,7 +2929,6 @@ nl:
       my notes: Mijn opmerkingen
       my messages: Mijn berichten
       my profile: Mijn profiel
-      my settings: Mijn instellingen
       my comments: Mijn reacties
       my_preferences: Mijn voorkeuren
       my_dashboard: Mijn dashboard
@@ -3015,13 +3008,13 @@ nl:
       show:
         title: Gebruikers
         heading: Gebruikers
-        empty: Geen gebruikers gevonden
       page:
         found_users:
           one: '%{count} gebruiker gevonden'
           other: '%{count} gebruikers gevonden'
         confirm: Geselecteerde gebruikers bevestigen
         hide: Gelelecteerde gebruikers verbergen
+        empty: Geen gebruikers gevonden
       user:
         summary_html: '%{name} aangemaakt vanaf %{ip_address} op %{date}'
         summary_no_ip_html: '%{name} aangemaakt op %{date}'
@@ -3267,7 +3260,6 @@ nl:
         url: https://wiki.openstreetmap.org/wiki/NL:Beginnershandleiding
       counter_warning_forum_link:
         text: de community helpt je graag
-        url: https://community.openstreetmap.org/
       advice: Deze opmerking is openbaar en kan gebruikt worden om de kaart bij te
         werken. Vul hier dus geen persoonlijke informatie in, en ook geen informatie
         uit kaarten of telefoonboeken waar auteursrechtelijke bescherming op rust.
index 0ab6beb615f4ea33f6f09a7b502f4abc6bea2631..6f9f0eeb7dd20c9d81beddb7d6307101de782cec 100644 (file)
@@ -217,9 +217,8 @@ nn:
         comment: Kommentar
         full: Fullstendig merknad
   accounts:
-    edit:
+    show:
       title: Rediger konto
-      my settings: Innstellingane mine
       current email address: Noverande e-postadresse
       external auth: Ekstern autentisering
       openid:
@@ -282,9 +281,6 @@ nn:
       show:
         title: Bidragsytervilkår
         heading: Bidragsytervilkåra
-        consider_pd: I tillegg til den ovannemnde avtala ansar eg bidraga mine for
-          å vere i public domain
-        consider_pd_why: kva er dette?
         you need to accept or decline: Les og deretter anten godta eller avslå dei
           nye bidragsytervilkåra for å halde fram.
         legale_select: 'Vel ditt bostedsland:'
@@ -2225,7 +2221,6 @@ nn:
       my notes: Mine merknadar
       my messages: Mine meldingar
       my profile: Min profil
-      my settings: Mine innstillingar
       my comments: Mine kommentarar
       blocks on me: Mine blokeringar
       blocks by me: blokkeringar utført av meg
@@ -2279,10 +2274,10 @@ nn:
       show:
         title: Brukarar
         heading: Brukarar
-        empty: Ingen samsvarande brukarar funne
       page:
         confirm: Stadfest valde brukarar
         hide: Skjul valde brukarar
+        empty: Ingen samsvarande brukarar funne
       user:
         summary_html: '%{name} oppretta frå %{ip_address} den %{date}'
         summary_no_ip_html: '%{name} oppretta %{date}'
index c68ed3cb67d5163fa2dc0615b4cb73c00d6f1aae..175236c927fa02447348bdc57981861858d68987 100644 (file)
@@ -195,9 +195,8 @@ nqo:
         comment: ߡߙߌߣߊ߲
         full: ߦߟߌߣߐ ߘߝߊߣߍ߲
   accounts:
-    edit:
+    show:
       title: ߖߊ߬ߕߋ߬ߘߊ ߡߊߦߟߍ߬ߡߊ߲߬
-      my settings: ߒ ߠߊ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߦߊ߬ߘߊ ߟߎ߬
       current email address: ߕߋ߲߭ߕߋ߲߭ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ
       external auth: ߞߐߞߊ߲ߠߊ ߕߎ߬ߡߊ߬ߢߐ߲߰ߦߊ߬ߟߌ
       openid:
@@ -268,9 +267,6 @@ nqo:
         read_ct: ߒ ߓߘߊ߫ ߛߊ߲ߝߍ߫ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߛߙߊߕߌ ߟߎ߬ ߘߐߞߊ߬ߙߊ߲߬ ߊ߬ ߣߌ߫ ߞߊ߬ ߘߌ߬ߢߍ߬
           ߊ߬ ߡߊ߬ ߝߣߊ߫.
         read_tou: ߒ ߓߘߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ ߛߙߊߕߌ ߘߐߞߊ߬ߙߊ߲߬ ߊ߬ ߣߌ߫ ߞߊ߬ ߘߌ߬ߢߍ߬ ߊ߬ ߡߊ߬
-        consider_pd: ߛߊ߲ߝߍߟߊ ߏ߬ ߡߊߞߊ߬ߝߏ߬ߟߌ ߘߐ߫ ߌ ߞߐ߫߸ ߒ ߧߋ߫ ߒ ߠߊ߫ ߓߟߏߡߊߜߍ߲ ߖߊ߬ߕߋ߬
-          ߟߴߊ߬ ߞߍ ߘߐ߫ ߖߊ߬ߡߊ ߘߍ߬ߒ߬ߡߊ߬ߝߋ߲ ߘߌ߫
-        consider_pd_why: ߣߌ߲߬ ߦߋ߫ ߡߎ߲߬ ߘߌ߫؟
         continue: ߊ߬ ߘߊߓߊ߲߫
         legale_select: 'ߌ ߛߌ߰ߣߍ߲߬ ߦߋ߫ ߖߡߊ߬ߣߊ ߡߍ߲ ߘߐ߫:'
         legale_names:
@@ -1615,7 +1611,6 @@ nqo:
       my notes: ߒ ߠߊ߫ ߦߟߌߣߐ ߟߎ߫
       my messages: ߒ ߠߊ߫ ߗߋߛߓߍ ߟߎ߬
       my profile: ߒ ߠߊ߫ ߢߊߞߙߍ
-      my settings: ߒ ߠߊ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߦߊ߬ߘߊ ߟߎ߬
       my comments: ߒ ߠߊ߫ ߡߙߌߣߊ߲ ߠߎ߬
       my_preferences: ߒ ߠߊ߫ ߝߌ߬ߛߊ߬ߡߊ߲߬ߕߋ ߟߎ߬
       blocks on me: ߓߊ߬ߟߊ߲߬ߠߌ߲ ߡߍ߲ ߦߋ߫ ߒ ߞߊ߲߬
@@ -1644,10 +1639,10 @@ nqo:
       show:
         title: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬
         heading: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬
-        empty: ߕߙߏ߬ߞߏ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߡߊ߫ ߛߐ߬ߘߐ߲߫
       page:
         confirm: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߠߎ߬ ߟߊߛߙߋߦߊ߫
         hide: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߠߎ߬ ߢߡߊߘߏ߲߰
+        empty: ߕߙߏ߬ߞߏ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߡߊ߫ ߛߐ߬ߘߐ߲߫
       user:
         summary_html: '%{name} ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{ip_address} ߟߋ߬ ߡߊ߬ %{date} ߟߊ߫'
         summary_no_ip_html: '%{name} ߛߌ߲ߘߌߣߍ߲߫ ߦߋ߫ %{date} ߟߋ߬ ߟߊ߫'
index 7f5dab8afcd1f1a56bfbf85f9fa8203d5e2c3328..c0ea5e6722ec72ac3ae3f141127b6fe81b8a7b56 100644 (file)
@@ -243,9 +243,8 @@ oc:
         comment: Comentari
         full: Nòta completa
   accounts:
-    edit:
+    show:
       title: Modificar lo compte
-      my settings: Meis opcions
       current email address: 'Adreiça de corrier electronic actuala:'
       external auth: 'Autentificacion extèrna:'
       openid:
@@ -302,9 +301,6 @@ oc:
       show:
         title: Tèrmes del contributor
         heading: Tèrmes del contributor
-        consider_pd: En mai de l’acòrd çaisús, considèri mas contribucions coma essent
-          dins lo domeni public
-        consider_pd_why: qu’es aquò ?
         continue: Contunhar
         you need to accept or decline: Legissètz e puèi, siá acceptatz o refusatz
           las novèlas condicions de contributor per contunhar.
@@ -2095,7 +2091,6 @@ oc:
       my notes: Mas nòtas de mapa
       my messages: Mos messatges
       my profile: Mon perfil
-      my settings: Mas opcions
       my comments: Mos comentaris
       blocks on me: Mos blocatges
       blocks by me: Mos blocatges
@@ -2146,10 +2141,10 @@ oc:
       show:
         title: Utilizaires
         heading: Utilizaires
-        empty: Cap d'utilizaire correspondent es pas estat trobat
       page:
         confirm: Confirmar los utilizaires seleccionats
         hide: Amagar los utilizaires seleccionats
+        empty: Cap d'utilizaire correspondent es pas estat trobat
       user:
         summary_html: '%{name} creat dempuèi %{ip_address} lo %{date}'
         summary_no_ip_html: '%{name} creat lo %{date}'
index 8f30a57d7eaadb8ad78dc2187668133e1ef98bfc..b7079c2fbc64881c127609339f991e86f24022aa 100644 (file)
@@ -240,9 +240,8 @@ pa:
         comment: ਟਿੱਪਣੀ
         full: ਪੂਰੀ ਟਿੱਪਣੀ
   accounts:
-    edit:
+    show:
       title: ਖਾਤਾ ਸੋਧੋ
-      my settings: ਮੇਰੀਆਂ ਸੈਟਿੰਗਾਂ
       current email address: 'ਮੌਜੂਦਾ ਈਮੇਲ ਪਤਾ:'
       external auth: ਬਾਹਰੀ ਪ੍ਰਮਾਣਿਕਤਾ
       openid:
@@ -319,8 +318,6 @@ pa:
         read_ct: ਮੈਂ ਉਪਰੋਕਤ ਯੋਗਦਾਨ ਪਾਉਣ ਵਾਲੀਆਂ ਸ਼ਰਤਾਂ ਨੂੰ ਪਡ਼੍ਹਿਆ ਅਤੇ ਉਹਨਾਂ ਨਾਲ ਸਹਿਮਤ
           ਹਾਂ।
         read_tou: ਮੈਂ ਵਰਤੋਂ ਦੀਆਂ ਸ਼ਰਤਾਂ ਨੂੰ ਪੜ੍ਹ ਲਿਆ ਹੈ ਅਤੇ ਉਹਨਾਂ ਨਾਲ ਸਹਿਮਤ ਹਾਂ
-        consider_pd: ਉਪਰੋਕਤ ਤੋਂ ਇਲਾਵਾ, ਮੈਂ ਆਪਣੇ ਯੋਗਦਾਨ ਨੂੰ ਜਨਤਕ ਖੇਤਰ ਵਿੱਚ ਮੰਨਦਾ ਹਾਂ
-        consider_pd_why: ਇਹ ਕੀ ਹੈ?
         guidance_info_html: 'ਇਹਨਾਂ ਸ਼ਰਤਾਂ ਨੂੰ ਸਮਝਣ ਲਈ ਜਾਣਕਾਰੀ: ਇੱਕ %{readable_summary_link}
           ਅਤੇ ਕੁਝ %{informal_translations_link}'
         readable_summary: ਮਨੁੱਖੀ ਪਡ਼੍ਹਨਯੋਗ ਸੰਖੇਪ
@@ -341,6 +338,10 @@ pa:
           ਨੂੰ ਸਵੀਕਾਰ ਨਾ ਕਰਨ ਦਾ ਫੈਸਲਾ ਕੀਤਾ ਹੈ। ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ %{terms_declined_link}
           ਵੇਖੋ।
         terms_declined_link: ਇਹ ਵਿਕੀ ਸਫ਼ਾ
+    pd_declarations:
+      show:
+        consider_pd: ਮੈਂ ਆਪਣੇ ਯੋਗਦਾਨਾਂ ਨੂੰ ਜਨਤਕ ਖੇਤਰ ਵਿੱਚ ਮੰਨਦਾ ਹਾਂ।
+        confirm: ਤਸਦੀਕ ਕਰੋ
   browse:
     deleted_ago_by_html: '%{time_ago} ਨੂੰ %{user} ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ'
     edited_ago_by_html: '%{time_ago} ਨੂੰ %{user} ਵੱਲੋਂ ਸੋਧਿਆ ਗਿਆ'
@@ -1946,8 +1947,6 @@ pa:
           ਹਨ
         html: ਤੁਹਾਡਾ ਪਤਾ ਜਨਤਕ ਤੌਰ 'ਤੇ ਪ੍ਰਦਰਸ਼ਿਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ
           ਸਾਡਾ %{privacy_policy_link} ਵੇਖੋ।
-      consider_pd_html: ਮੈਂ ਆਪਣੇ ਯੋਗਦਾਨਾਂ ਨੂੰ %{consider_pd_link} ਵਿੱਚ ਮੰਨਦਾ ਹਾਂ।
-      consider_pd: ਜਨਤਕ ਖੇਤਰ
       or: ਜਾਂ
       use external auth: ਜਾਂ ਕਿਸੇ ਤੀਜੀ ਧਿਰ ਨਾਲ ਦਾਖਲ ਹੋਵੋ
     no_such_user:
@@ -1963,7 +1962,7 @@ pa:
       my notes: ਮੇਰੇ ਨੋਟ
       my messages: ਮੇਰੇ ਸੁਨੇਹੇ
       my profile: ਮੇਰੀ ਪ੍ਰੋਫ਼ਾਈਲ
-      my settings: ਮੇਰੀਆਂ ਸੈਟਿੰਗਾਂ
+      my_account: ਮੇਰਾ ਖਾਤਾ
       my comments: ਮੇਰੀਆਂ ਟਿੱਪਣੀਆਂ
       my_preferences: ਮੇਰੀਆਂ ਤਰਜੀਹਾਂ
       blocks on me: ਮੇਰੇ ਉੱਤੇ ਰੋਕਾਂ
@@ -2036,16 +2035,27 @@ pa:
       show:
         title: ਵਰਤੋਂਕਾਰ
         heading: ਵਰਤੋਂਕਾਰ
-        empty: ਕੋਈ ਮੇਲ ਖਾਂਦੇ ਵਰਤੋਂਕਾਰ ਨਹੀਂ ਲੱਭੇ
+        states:
+          pending: ਬਕਾਇਆ
+          active: ਸਰਗਰਮ
+          confirmed: ਤਸਦੀਕ ਕੀਤੀ ਗਈ
+          suspended: ਬਰਖਾਸਤ ਕੀਤਾ ਗਿਆ
+          deleted: ਮਿਟਾਇਆ ਗਿਆ
+        ip_address: IP ਪਤਾ
+        search: ਖੋਜੋ
       page:
         found_users:
           one: '%{count} ਵਰਤੋਂਕਾਰ ਲੱਭੇ'
           other: '%{count} ਵਰਤੋਂਕਾਰ ਲੱਭੇ'
         confirm: ਚੁਣੇ ਹੋਏ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਤਸਦੀਕ ਕਰੋ
         hide: ਚੁਣੇ ਹੋਏ ਵਰਤੋਂਕਾਰ ਲੁਕਾਉ
+        empty: ਕੋਈ ਮੇਲ ਖਾਂਦੇ ਵਰਤੋਂਕਾਰ ਨਹੀਂ ਲੱਭੇ
       user:
         summary_html: '%{date} ਨੂੰ %{ip_address} ਤੋਂ %{name} ਬਣਾਇਆ ਗਿਆ'
         summary_no_ip_html: '%{name} ਨੂੰ %{date} ਨੂੰ ਬਣਾਇਆ ਗਿਆ'
+    comments:
+      index:
+        diary_entries: ਰੋਜ਼ਨਾਮਚਾ ਇੰਦਰਾਜ
     changeset_comments:
       page:
         when: ਕਦੋਂ
@@ -2333,6 +2343,9 @@ pa:
       show_address: ਪਤਾ ਦਿਖਾਓ
       query_features: ਪੁੱਛਗਿੱਛ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ
       centre_map: ਨਕਸ਼ੇ ਦਾ ਕੇਂਦਰ ਇੱਥੇ
+    home:
+      marker_title: ਮੇਰੇ ਘਰ ਦਾ ਟਿਕਾਣਾ
+      not_set: ਤੁਹਾਡੇ ਖਾਤੇ ਲਈ ਘਰ ਦਾ ਟਿਕਾਣਾ ਕਾਇਮ ਨਹੀਂ ਹੈ।
   redactions:
     edit:
       heading: ਸੁਧਾਈ ਸੋਧੋ
index d0eb7499473b4a8a9bc841710ce4d19e64d477d1..7541d4c9db290bb0a1377ce7d64a41e14725b9be 100644 (file)
@@ -161,6 +161,7 @@ pl:
         allow_write_prefs: Modyfikowanie ich ustawień
         allow_write_diary: Tworzenie wpisów w dzienniku i dodawanie komentarzy
         allow_write_api: Modyfikowanie mapy
+        allow_write_changeset_comments: Komentowanie zestawów zmian
         allow_read_gpx: Odczytywanie ich prywatnych śladów GPS
         allow_write_gpx: Przesyłanie śladów GPS
         allow_write_notes: Modyfikowanie uwag
@@ -177,7 +178,7 @@ pl:
         name: Nazwa
         redirect_uri: URI przekierowań
         confidential: Poufna aplikacja?
-        scopes: 'Żądanie następujących uprawnień od użytkowników:'
+        scopes: Uprawnienia
       friend:
         user: Użytkownik
         friend: Znajomy
@@ -343,9 +344,9 @@ pl:
         comment: Komentarz
         full: Pełna treść uwagi
   accounts:
-    edit:
+    show:
       title: Zmiana ustawień konta
-      my settings: Ustawienia
+      my_account: Moje konto
       current email address: Aktualny adres e-mail
       external auth: Zewnętrzne uwierzytelnienie
       openid:
@@ -360,6 +361,9 @@ pl:
         agreed_with_pd: Zadeklarowałeś, że swoje edycje publikujesz w domenie publicznej.
         link: https://osmfoundation.org/wiki/Licence/Contributor_Terms
         link text: co to jest?
+        not_agreed_with_pd: Nie zadeklarowałeś, że uznajesz swoje zmiany za należące
+          do domeny publicznej.
+        pd_link_text: zadeklaruj
       save changes button: Zapisz zmiany
       delete_account: Usuń konto...
     go_public:
@@ -422,10 +426,6 @@ pl:
           i innej infrastruktury zapewnianej przez OSMF. Kliknij link, przeczytaj
           i zaakceptuj tekst.
         read_tou: Przeczytałem i akceptuję Warunki użytkowania
-        consider_pd: Oprócz powyższych warunków, stwierdzam również, że mój wkład
-          jest w domenie publicznej
-        consider_pd_why: co to oznacza?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Informacje pomocne w zrozumieniu tych terminów: %{readable_summary_link}
           i %{informal_translations_link}'
         readable_summary: czytelne podsumowanie
@@ -446,6 +446,20 @@ pl:
           nowych Warunków uczestnictwa. Więcej informacji możesz znaleźć %{terms_declined_link}.
         terms_declined_link: na tej stronie
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Uznaj mój wkład za należący do domeny publicznej
+        consider_pd: Uznaję swój wkład za należący do domeny publicznej
+        consider_pd_why: Dlaczego miałbym chcieć, aby mój wkład był w domenie publicznej?
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Potwierdzam
+      create:
+        successfully_declared: Pomyślnie zadeklarowałeś, że uznajesz swoje zmiany
+          za należące do domeny publicznej.
+        already_declared: Oświadczyłeś już, że uważasz swoje zmiany za należące do
+          domeny publicznej.
+        did_not_confirm: Nie potwierdziłeś, że uważasz swoje zmiany za należące do
+          domeny publicznej.
   browse:
     deleted_ago_by_html: Usunięte %{time_ago} przez %{user}
     edited_ago_by_html: Edytowane %{time_ago} przez %{user}
@@ -525,6 +539,7 @@ pl:
     start_rjs:
       feature_warning: Wczytywanie %{num_features} obiektów, może spowolnić lub zawiesić
         przeglądarkę. Wyświetlić te dane?
+      feature_error: 'Błąd przy ładowaniu obiektów: %{message}'
       load_data: Wczytaj dane
       loading: Wczytywanie...
     tag_details:
@@ -1099,6 +1114,7 @@ pl:
           bridleway: Droga dla koni
           bus_guideway: Droga dla autobusów
           bus_stop: Przystanek autobusowy
+          busway: Droga dla autobusów
           construction: Droga w trakcie budowy
           corridor: Korytarz
           crossing: Przejście
@@ -1669,11 +1685,13 @@ pl:
       reports: Zgłoszenia
       last_updated: Ostatnia aktualizacja
       last_updated_time_ago_user_html: '%{time_ago} przez %{user}'
+      reporting_users: Raportowanie użytkowników
       reports_count:
         one: 1 zgłoszenie
         few: '%{count} zgłoszenia'
         many: '%{count} zgłoszeń'
         other: '%{count} zgłoszenia'
+      more_reporters: i jeszcze %{count}
       reported_item: Zgłoszony element
       states:
         ignored: Zignorowano
@@ -1711,6 +1729,8 @@ pl:
       reopened: Status sprawy został ustawiony na „Otwarta”
     comments:
       comment_from_html: Komentarz od %{user_link} z %{comment_created_at}
+      reassign_to_moderators: Przydziel sprawę moderatorom
+      reassign_to_administrators: Przydziel sprawę administratorom
     reports:
       reported_by_html: Zgłoszone %{updated_at} jako %{category} przez %{user}
     helper:
@@ -1791,6 +1811,13 @@ pl:
     communities: Społeczności
     learn_more: Dowiedz się więcej
     more: Więcej
+    offline_flash:
+      osm_offline: Baza danych OpenStreetMap jest w trybie offline na czas ważnych
+        zadań administracyjnych, które są w tym momencie wykonywane.
+      osm_read_only: Baza danych OpenStreetMap jest w trybie tylko do odczytu na czas
+        ważnych zadań administracyjnych, które są w tym momencie wykonywane.
+      expected_restore_html: Przywrócenie usług spodziewane jest w ciągu %{time}.
+      announcement: Ogłoszenie można przeczytać tutaj.
   user_mailer:
     diary_comment_notification:
       description: 'Wpis dziennika OpenStreetMap #%{id}'
@@ -2446,6 +2473,7 @@ pl:
         zmienić je na publiczne na %{user_page}.
       user_page_link: stronie użytkownika
       anon_edits_html: (%{link})
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Anonymous_edits
       anon_edits_link_text: Tu dowiesz się dlaczego.
     edit:
       id_not_configured: iD nie został skonfigurowany
@@ -2898,18 +2926,20 @@ pl:
     permissions:
       missing: Nie zezwoliłeś aplikacji na dostęp do tej funkcji
     scopes:
-      openid: Zaloguj się za pomocą OpenStreetMap
+      openid: Logowanie się za pomocą OpenStreetMap
       read_prefs: Odczytywanie preferencji użytkownika
       write_prefs: Modyfikowanie preferencji użytkownika
       write_diary: Tworzenie wpisów w dzienniku i dodawanie komentarzy
       write_api: Modyfikowanie mapy
-      read_gpx: Odczytywanie ich prywatnych śladów GPS
+      write_changeset_comments: Komentowanie zestawów zmian
+      read_gpx: Odczytywanie prywatnych śladów GPS
       write_gpx: Przesyłanie śladów GPS
       write_notes: Modyfikowanie uwag
       write_redactions: Redagowanie danych mapy
+      write_blocks: Tworzenie i odwoływanie blokad użytkowników
       read_email: Odczytywanie adresu e-mail użytkownika
-      consume_messages: Czytaj, aktualizuj status i usuwaj wiadomości użytkownika
-      send_messages: Wysyłaj prywatne wiadomości do innych użytkowników
+      consume_messages: Czytanie, zmiana statusu i usuwanie wiadomości użytkownika
+      send_messages: Wysyłanie prywatnych wiadomości do innych użytkowników
       skip_authorization: Automatycznie akceptuj aplikację
     for_roles:
       moderator: To uprawnienie dotyczy działań dostępnych wyłącznie dla moderatorów
@@ -3004,9 +3034,6 @@ pl:
           e-mail
         html: Twój adres nie jest wyświetlany publicznie, zobacz naszą %{privacy_policy_link},
           aby uzyskać więcej informacji.
-      consider_pd_html: Uznaję mój wkład za należący do %{consider_pd_link}
-      consider_pd: domeny publicznej
-      consider_pd_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
       or: lub
       use external auth: 'Alternatywnie, zarejestruj się przez:'
     no_such_user:
@@ -3023,7 +3050,7 @@ pl:
       my notes: Uwagi
       my messages: Wiadomości
       my profile: Profil
-      my settings: Ustawienia
+      my_account: Ustawienia konta
       my comments: Komentarze
       my_preferences: Preferencje
       my_dashboard: Mój panel
@@ -3106,7 +3133,10 @@ pl:
       show:
         title: Użytkownicy
         heading: Użytkownicy
-        empty: Nie znaleziono pasujących użytkowników
+        select_status: Wybierz status
+        name_or_email: Nazwa lub e-mail
+        ip_address: Adres IP
+        search: Szukaj
       page:
         found_users:
           one: Znaleziono %{count} użytkownika
@@ -3115,6 +3145,7 @@ pl:
           other: Znaleziono %{count} użytkowników
         confirm: Zatwierdź zaznaczonych użytkowników
         hide: Ukryj zaznaczonych użytkowników
+        empty: Nie znaleziono pasujących użytkowników
       user:
         summary_html: '%{name} utworzony z adresu %{ip_address} dnia %{date}'
         summary_no_ip_html: '%{name} utworzony %{date}'
@@ -3378,7 +3409,7 @@ pl:
         url: https://wiki.openstreetmap.org/wiki/Pl:Przewodnik_dla_pocz%C4%85tkuj%C4%85cych
       counter_warning_forum_link:
         text: społeczność może ci pomóc
-        url: https://community.openstreetmap.org/
+        url: https://community.openstreetmap.org
       advice: Twoja uwaga jest publiczna i może zostać użyta do zaktualizowania mapy,
         nie podawaj tu więc informacji osobistych oraz informacji z map i źródeł chronionych
         prawami autorskimi.
@@ -3573,6 +3604,8 @@ pl:
           ninth: "9."
           tenth: "10."
       time: Czas
+      download: Pobierz trasę jako GeoJSON
+      filename: trasa
     query:
       node: Węzeł
       way: Linia
@@ -3587,6 +3620,9 @@ pl:
       show_address: Pokaż adres
       query_features: Wyświetl dane obiektów
       centre_map: Wycentruj mapę tutaj
+    home:
+      marker_title: Położenie domu
+      not_set: Położenie domu nie jest ustawione w twoim profilu
   redactions:
     edit:
       heading: Edytuj poprawkę
index 984e3914b87c0ded4acb412b1c516933693dea5e..81d29c573c1a36610ea187017bea25ba863a6362 100644 (file)
@@ -228,9 +228,8 @@ pnb:
         comment: ٹپݨی
         full: پورا نوٹ
   accounts:
-    edit:
+    show:
       title: کھاتہ سودھو
-      my settings: سیٹِنگاں
       current email address: حالاں ای‌میل پتہ
       external auth: باہرلی تصدیق
       openid:
@@ -265,9 +264,6 @@ pnb:
         title: شرطنامہ
         heading: شرطنامہ
         heading_ct: لیکھکاں لئی شرطنامہ
-        consider_pd: اگے، میریاں ساریاں سودھاں عام ورتوں ہوواں‌گیاں سی (سارے ورتوں
-          نہیں منع)۔
-        consider_pd_why: ایہہ کیہ اے؟
         continue: اگے
         legale_select: 'تسیں کیہ دیش رہندے:'
         legale_names:
@@ -1747,7 +1743,6 @@ pnb:
       my notes: نوٹ
       my messages: سنیہے
       my profile: شخصی صفحہ
-      my settings: سیٹِنگاں
       my comments: ٹپݨیاں
       my_preferences: ترجیحاں
       my_dashboard: ڈیش بورڈ
@@ -1791,10 +1786,10 @@ pnb:
       show:
         title: ورتنوالے
         heading: ورتنوالے
-        empty: کوئی میل کھاندے ورتنوالے نہیں لبھے
       page:
         confirm: چݨے ہوۓ ورتنوالیاں دی تصدیق کرو
         hide: چݨے ہوۓ ورتنوالے لُکاؤ
+        empty: کوئی میل کھاندے ورتنوالے نہیں لبھے
     changeset_comments:
       page:
         when: کدوں
index 15bdca632f40c132d8432e31a56f3f703dba0e5f..23d53f006918386f55a364037a5b812736dde695 100644 (file)
@@ -81,8 +81,7 @@ ps:
     id:
       name: iD
   accounts:
-    edit:
-      my settings: زما امستنې
+    show:
       openid:
         link text: دا څه دی؟
       contributor terms:
@@ -301,7 +300,7 @@ ps:
   passwords:
     new:
       heading: آيا پټنوم مو هېر شوی؟
-      email address: 'برېښليک پته:'
+      email address: برېښليک‌پته
   profiles:
     edit:
       image: 'انځور:'
@@ -375,7 +374,7 @@ ps:
       my messages: زما پيغامونه
       send message: پيغام لېږل
       edits: سمونونه
-      email address: 'برېښليک پته:'
+      email address: 'برېښليکپته:'
       status: 'دريځ:'
       block_history: فعاله بنديزونه
       moderator_history: لگېدلي بنديزونه
index b8ef26a45bd7ebc154526c6dda879a25c3227b6d..a3946ccef652df6a020dc8a8bf8d0bee56b93254 100644 (file)
@@ -284,9 +284,8 @@ pt-PT:
         comment: Comentário
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Editar conta
-      my settings: Definições
       current email address: E-mail atual
       external auth: Autenticação externa
       openid:
@@ -365,9 +364,6 @@ pt-PT:
           infraestruturas fornecidas pela OSMF. Por favor, clica na hiperligação,
           lê e aceita o texto.
         read_tou: Li e aceito os Termos de Utilização
-        consider_pd: Além do referido anteriormente, considero que as minhas contribuições
-          fazem parte âmbito do Domínio Público.
-        consider_pd_why: O que é isto?
         guidance_info_html: 'Informações para ajudar a entender estes termos: um %{readable_summary_link}
           e algumas %{informal_translations_link}'
         readable_summary: sumário legível por humanos
@@ -2792,8 +2788,6 @@ pt-PT:
           endereços de email
         html: O seu endereço não é mostrado publicamente. Consulte a nossa %{privacy_policy_link}
           para mais informações.
-      consider_pd_html: Considero que as minhas contribuições estão no %{consider_pd_link}.
-      consider_pd: domínio público
       or: ou
       use external auth: ou regista-te com um serviço externo
     no_such_user:
@@ -2810,7 +2804,6 @@ pt-PT:
       my notes: Notas
       my messages: Mensagens
       my profile: Perfil
-      my settings: Definições
       my comments: Comentários
       my_preferences: Preferências
       my_dashboard: Painel de controlo
@@ -2889,13 +2882,13 @@ pt-PT:
       show:
         title: Utilizadores
         heading: Utilizadores
-        empty: Não foram encontrados utilizadores correspondentes
       page:
         found_users:
           one: '%{count} utilizador encontrado'
           other: '%{count} utilizadores encontrados'
         confirm: Confirmar utilizadores selecionados
         hide: Ocultar utilizadores selecionados
+        empty: Não foram encontrados utilizadores correspondentes
       user:
         summary_html: '%{name} criado com o ip %{ip_address} em %{date}'
         summary_no_ip_html: '%{name} criado em %{date}'
index bbbb8bfbb20e072475cf5937a9c65b38a61130ce..44a6e3a7b6dd82844fde7979372fcc5ff130873b 100644 (file)
@@ -151,8 +151,9 @@ pt:
         support_url: URL de suporte
         allow_read_prefs: ler preferências do usuário
         allow_write_prefs: modificar preferências do usuário
-        allow_write_diary: criar publicações no diário, comentários e adicionar amigos
+        allow_write_diary: criar publicações no diário e comentários
         allow_write_api: modificar o mapa
+        allow_write_changeset_comments: comentar os conjuntos de alterações
         allow_read_gpx: ler as rotas GPS privadas do usuário
         allow_write_gpx: enviar rotas GPS
         allow_write_notes: modificar notas
@@ -306,9 +307,9 @@ pt:
         comment: Comentário
         full: Nota completa
   accounts:
-    edit:
+    show:
       title: Editar conta
-      my settings: Minhas configurações
+      my_account: Minha conta
       current email address: Endereço de e-mail atual
       external auth: Autenticação externa
       openid:
@@ -321,7 +322,11 @@ pt:
           e aceitar os novos Termos de Contribuição.
         agreed_with_pd: Você também declara que considera suas edições em Domínio
           Público.
+        link: https://wiki.openstreetmap.org/wiki/Pt:Open_Database_License/Contributor_Terms
         link text: o que é isso?
+        not_agreed_with_pd: Você não declarou que considera suas edições como sendo
+          de Domínio Público.
+        pd_link_text: declarar
       save changes button: Salvar alterações
       delete_account: Eliminar Conta...
     go_public:
@@ -360,7 +365,7 @@ pt:
         retain_edits: Suas edições ao banco de dados de mapas, se houverem, serão
           mantidas.
         retain_traces: Seus rastros enviados, caso existam, serão retidos.
-        retain_diary_entries: Seus diários e comentários em diários, se existirem,
+        retain_diary_entries: Suas publicações e comentários no diário, se existirem,
           serão retidos mas escondidos.
         retain_notes: Suas notas de mapa e comentários das notas, se existirem, serão
           retidas mas escondidas.
@@ -385,8 +390,6 @@ pt:
         tou_explain_html: Esses %{tou_link} governam o uso do site e de outras infraestruturas
           fornecidas pelo OSMF. Por favor, clique no link, leia e concorde com o texto.
         read_tou: Li e aceito os Termos de uso
-        consider_pd: Além do acima, considero minhas contribuições como Public Domain
-        consider_pd_why: o que é isso?
         guidance_info_html: 'Informações para ajudar a entender estes termos: um %{readable_summary_link}
           e alguns %{informal_translations_link}'
         readable_summary: resumo legível para humanos
@@ -407,6 +410,20 @@ pt:
           contribuidor. Para mais informações, consulta %{terms_declined_link}.
         terms_declined_link: esta página wiki
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=pt-br
+    pd_declarations:
+      show:
+        title: Considerar minhas contribuições como sendo de Domínio Público
+        consider_pd: Eu considero que minhas contribuições são de Domínio Público
+        consider_pd_why: Por que eu gostaria que minhas contribuições fossem de Domínio
+          Público?
+        confirm: Confirmar
+      create:
+        successfully_declared: Você declarou com sucesso que considera suas edições
+          como sendo de Domínio Público.
+        already_declared: Você já declarou que considera suas edições como sendo de
+          Domínio Público.
+        did_not_confirm: Você não confirmou que considera suas edições como sendo
+          de Domínio Público.
   browse:
     deleted_ago_by_html: Excluído há %{time_ago} por %{user}
     edited_ago_by_html: Editado %{time_ago} por %{user}
@@ -475,6 +492,7 @@ pt:
     start_rjs:
       feature_warning: Carregando %{num_features} elementos, o que pode deixar seu
         navegador lento ou travado. Deseja mesmo exibir estes dados?
+      feature_error: 'Os elementos não puderam ser carregados: %{message}'
       load_data: Carregar dados
       loading: Carregando...
     tag_details:
@@ -505,6 +523,8 @@ pt:
       view_redacted_data: Ver dados reduzidos
       view_redaction_message: Ver mensagem de redação
   nodes:
+    not_found_message:
+      sorry: 'Desculpe, não foi possível encontrar o nó #%{id}.'
     timeout:
       sorry: Desculpe, os dados para o nó com id %{id} demoraram demais para ser obtidos.
   old_nodes:
@@ -513,6 +533,8 @@ pt:
     timeout:
       sorry: Desculpe, o histórico do nó com id %{id} demorou demais para ser obtido.
   ways:
+    not_found_message:
+      sorry: 'Desculpe, não foi possível encontrar o caminho #%{id}.'
     timeout:
       sorry: Desculpe, os dados do caminho com o id %{id} demoraram muito para serem
         recuperados.
@@ -523,6 +545,8 @@ pt:
       sorry: Desculpe, o histórico do caminho com o id %{id} levou muito tempo para
         ser recuperado.
   relations:
+    not_found_message:
+      sorry: 'Desculpe, não foi possível encontrar a relação #%{id}.'
     timeout:
       sorry: Desculpe, os dados do caminho com o id %{id} demoraram muito para serem
         recuperados.
@@ -552,6 +576,7 @@ pt:
       title: Conjuntos de alterações
       title_user: Conjuntos de alterações de %{user}
       title_user_link_html: Conjuntos de alterações de %{user_link}
+      title_followed: Conjuntos de alterações das pessoas que sigo
       title_nearby: Conjuntos de alterações de usuários próximos
       empty: Nenhum conjunto de alterações encontrado.
       empty_area: Nenhum conjunto de alterações nesta área.
@@ -594,6 +619,8 @@ pt:
       ways_paginated: Linhas (%{x}-%{y} de %{count})
       relations: Relações (%{count})
       relations_paginated: Relações (%{x}-%{y} de %{count})
+    not_found_message:
+      sorry: 'Desculpe, não foi possível encontrar o conjunto de alteração #%{id}.'
     timeout:
       sorry: A lista de conjuntos de alterações solicitada está demorando demais para
         chegar.
@@ -621,13 +648,18 @@ pt:
     popup:
       your location: Sua localização
       nearby mapper: Mapeador próximo
+      following: Seguindo
     show:
       title: Meu painel
       no_home_location_html: '%{edit_profile_link} e defina seu local de origem para
         ver usuários próximos.'
       edit_your_profile: Editar seu perfil
+      followings: Pessoas que sigo
+      no followings: Você ainda não seguiu nenhum usuário.
       nearby users: Outros usuários próximos
       no nearby users: Ainda não há outros usuários mapeando por perto.
+      followed_changesets: conjuntos de alterações
+      followed_diaries: publicações no diário
       nearby_changesets: conjuntos de alterações de usuários próximos
       nearby_diaries: publicações no diário dos usuários próximos
   diary_entries:
@@ -638,9 +670,10 @@ pt:
       use_map_link: Usar mapa
     index:
       title: Diários dos usuários
+      title_followed: Diários das pessoas que sigo
       title_nearby: Diários dos usuários próximos
       user_title: Diário de %{user}
-      in_language_title: Publicações de Diário em %{language}
+      in_language_title: Publicações no diário em %{language}
       new: Nova publicação no diário
       new_title: Escrever uma nova entrada no meu diário de usuário
       my_diary: Meu diário
@@ -688,11 +721,11 @@ pt:
       location: 'Local:'
     feed:
       user:
-        title: Publicações do diário do OpenStreetMap de %{user}
+        title: Publicações no diário do OpenStreetMap de %{user}
         description: Publicações recentes no diário do OpenStreetMap de %{user}
       language:
         title: Publicações no diário do OpenStreetMap em %{language_name}
-        description: Publicações de diário recentes de usuários do OpenStreetMap em
+        description: Publicações no diário recentes de usuários do OpenStreetMap em
           %{language_name}
       all:
         title: Publicações no diário do OpenStreetMap
@@ -765,6 +798,23 @@ pt:
       title: Arquivo não encontrado
       description: Não foi possível encontrar uma operação de arquivo/diretório/API
         com esse nome no servidor OpenStreetMap (HTTP 404)
+  follows:
+    show:
+      follow:
+        heading: Você quer seguir %{user}?
+        button: Seguir usuário
+      unfollow:
+        heading: Você quer deixar de seguir %{user}?
+        button: Deixar de seguir usuário
+    create:
+      success: Agora você está seguindo %{name}!
+      failed: Desculpe, sua solicitação para seguir %{name} falhou.
+      already_followed: Você já segue %{name}.
+      limit_exceeded: Você seguiu muitos usuários recentemente. Por favor, espere
+        um pouco antes de tentar seguir alguém mais.
+    destroy:
+      success: Você deixou de seguir %{name} com sucesso.
+      not_followed: Você não está seguindo %{name}.
   geocoder:
     search:
       title:
@@ -1019,6 +1069,7 @@ pt:
           bridleway: Hipovia
           bus_guideway: Guiamento de Ônibus
           bus_stop: Ponto de ônibus
+          busway: Via exclusiva de ônibus
           construction: Via em Construção
           corridor: Corredor
           crossing: Faixa de pedestres
@@ -1102,11 +1153,13 @@ pt:
           wreck: Naufrágio
           "yes": Local Histórico
         information:
+          guidepost: Poste de sinalização
           board: Painel de informação
           map: Mapa
           office: Informações Turísticas
           terminal: Terminal de informações
           sign: Sinal de informação
+          stele: Estela informativa
         junction:
           "yes": Entroncamento
         landuse:
@@ -1525,6 +1578,7 @@ pt:
           lake: Lago
           pond: Lagoa
           reservoir: Lago Artificial
+          basin: Bacia artificial
           fishpond: Tanque de peixes
           lagoon: Lagoa
           wastewater: Agua residual
@@ -1728,6 +1782,13 @@ pt:
       hi: Olá %{to_user},
       see_their_profile: Você pode ver o perfil dele(a) em %{userurl}.
       see_their_profile_html: Você pode ver o perfil dele(a) em %{userurl}.
+    gpx_details:
+      filename: Nome do arquivo
+      url: URL
+      description: Descrição
+      tags: Etiquetas
+      total_points: Número total de pontos
+      imported_points: Número de pontos importados
     gpx_failure:
       hi: Olá %{to_user},
       failed_to_import: 'falha na importação do arquivo de rastreamento de GPS. Por
@@ -2054,6 +2115,9 @@ pt:
       preview: Pré-visualizar
       help: Ajuda
     pagination:
+      changeset_comments:
+        older: Comentários mais antigos
+        newer: Comentários mais recentes
       diary_comments:
         older: Comentários mais antigos
         newer: Comentários mais recentes
@@ -2751,12 +2815,14 @@ pt:
       openid: Iniciar sessão usando OpenStreetMap
       read_prefs: Ler preferências de usuário
       write_prefs: Modificar preferências de usuário
-      write_diary: Criar entradas de diário, comentar e fazer amigos
+      write_diary: Criar publicações e comentários no diário
       write_api: Modificar o mapa
+      write_changeset_comments: Comentar os conjuntos de alterações
       read_gpx: Ler rotas GPS privadas
       write_gpx: Enviar rotas GPS
       write_notes: Modificar notas
       write_redactions: Rever dados do mapa
+      write_blocks: Criar e revogar bloqueios de usuários
       read_email: Ler o endereço de e-mail do usuário
       consume_messages: Ver, atualizar o status e apagar mensagens de usuários
       send_messages: Enviar mensagens privadas para outros usuários
@@ -2850,8 +2916,6 @@ pt:
           endereços de e-mail
         html: Seu endereço não é exibido publicamente, consulte nossa %{privacy_policy_link}
           para obter mais informações.
-      consider_pd_html: Considero que minhas contribuições estão no %{consider_pd_link}.
-      consider_pd: domínio público
       or: ou
       use external auth: ou inscreva-se com um terceiro
     no_such_user:
@@ -2867,7 +2931,7 @@ pt:
       my notes: Minhas notas de mapa
       my messages: Minhas mensagens
       my profile: Meu perfil
-      my settings: Minhas configurações
+      my_account: Minha conta
       my comments: Meus comentários
       my_preferences: Minhas preferências
       my_dashboard: Meu painel
@@ -2881,6 +2945,8 @@ pt:
       edits: Edições
       traces: Trilhas
       notes: Notas de Mapa
+      unfollow: Deixar de seguir
+      follow: Seguir
       mapper since: 'Mapeador desde:'
       last map edit: 'Última edição do mapa:'
       no activity yet: Ainda sem atividade
@@ -2946,18 +3012,36 @@ pt:
       show:
         title: Usuários
         heading: Usuários
-        empty: Não há usuários correspondentes
+        select_status: Selecionar status
+        states:
+          pending: Pendente
+          active: Ativo
+          confirmed: Confirmado
+          suspended: Suspenso
+          deleted: Excluído
+        ip_address: Endereço IP
+        search: Pesquisar
       page:
         found_users:
           one: '%{count} usuário encontrado'
           other: '%{count} usuários encontrados'
         confirm: Confirmar Usuários Selecionados
         hide: Ocultar Usuários Selecionados
+        empty: Não há usuários correspondentes
       user:
         summary_html: '%{name} criado no computador %{ip_address} em %{date}'
         summary_no_ip_html: '%{name} criado em %{date}'
+    comments:
+      index:
+        heading_html: Comentários de %{user}
+        changesets: Conjuntos de alterações
+        diary_entries: Publicações no diário
+        no_comments: Sem comentários
     changeset_comments:
+      index:
+        title: Comentários em conjuntos de alterações feitos por %{user}
       page:
+        changeset: Conjunto de alterações
         when: Quando
         comment: Comentário
     diary_comments:
@@ -2965,6 +3049,8 @@ pt:
         title: Comentários no diário feitos por %{user}
       page:
         post: Entrada
+        when: Quando
+        comment: Comentário
     suspended:
       title: Conta suspensa
       heading: Conta suspensa
@@ -3060,6 +3146,7 @@ pt:
         ended: finalizado
         revoked_html: revogado por %{name}
         active: ativo
+        active_until_read: ativo até ler
         read_html: Lido em %{time}
         time_in_future_title: '%{time_absolute}; em %{time_relative}'
         time_in_past_title: '%{time_absolute}; %{time_relative}'
@@ -3138,6 +3225,7 @@ pt:
       open_title: 'Nota não resolvida #%{note_name}'
       closed_title: 'Nota resolvida #%{note_name}'
       hidden_title: 'Nota oculta #%{note_name}'
+      description_when_author_is_deleted: excluído
       event_opened_by_html: Criado por %{user} há %{time_ago}
       event_opened_by_anonymous_html: Criado por anônimo há %{time_ago}
       event_commented_by_html: Comentário de %{user} há %{time_ago}
@@ -3171,9 +3259,21 @@ pt:
         isso possa ser corrigido. Mova o marcador para a posição correta e digite
         uma nota para explicar o problema.
       anonymous_warning_html: Você não iniciou sessão. Por favor, %{log_in} ou %{sign_up}
-        se você deseja receber atualizações sobre sua nota.
+        se você deseja receber atualizações sobre sua nota e ajudar outros mapeadores
+        a resolvê-la.
       anonymous_warning_log_in: entre
       anonymous_warning_sign_up: crie uma conta
+      counter_warning_html: Você já postou pelo menos %{x_anonymous_notes}, isso é
+        ótimo para a comunidade, obrigado! Agora, nós o encorajamos a %{contribute_by_yourself},
+        não é tão complicado, e %{community_can_help}.
+      x_anonymous_notes:
+        one: '%{count} nota anônima'
+        other: '%{count} notas anônimas'
+      counter_warning_guide_link:
+        text: contribuir por si mesmo
+        url: https://wiki.openstreetmap.org/wiki/Pt:Beginners%27_guide
+      counter_warning_forum_link:
+        text: a comunidade pode lhe ajudar
       advice: A sua nota será pública e pode ser usada para atualizar o mapa, portanto,
         não insira informações pessoais ou dados de mapas protegidos por direitos
         autorais ou listas de diretórios.
@@ -3186,6 +3286,8 @@ pt:
       showing_page: Página %{page}
       next: Próxima
       previous: Anterior
+    not_found_message:
+      sorry: 'Desculpe, não foi possível encontrar a nota #%{id}.'
   javascripts:
     close: Fechar
     share:
@@ -3372,6 +3474,9 @@ pt:
       show_address: Mostrar endereço
       query_features: Consultar elementos
       centre_map: Centralizar o mapa aqui
+    home:
+      marker_title: A localização da minha casa
+      not_set: A localização da casa não está definido para sua conta
   redactions:
     edit:
       heading: Editar anulação
index 03454a5a0f5db72ed21e7a7be3a720b6f53d5365..98c13b245fdcada666914efb1bcbae0cc5cc03e0 100644 (file)
@@ -275,9 +275,8 @@ ro:
         comment: Comentariu
         full: Notă completă
   accounts:
-    edit:
+    show:
       title: Modificare cont
-      my settings: Setările mele
       current email address: Adresa de e-mail actuală
       external auth: Autentificare externă
       openid:
@@ -355,10 +354,6 @@ ro:
           a altor infrastructuri furnizate de OSMF. Faceți clic pe link, citiți și
           agregați textul.
         read_tou: Am citit și sunt de acord cu Termenii și condițiile
-        consider_pd: Pe lângă acordul de mai sus, consider că contribuțiile mele sunt
-          în Domeniul Public
-        consider_pd_why: Ce este aceasta?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Informații pentru a ajuta la înțelegerea acestor termeni:
           un %{readable_summary_link} și câteva %{informal_translations_link}'
         readable_summary: rezumat care poate fi citit de om
@@ -379,6 +374,9 @@ ro:
           de Contributor. Pentru mai multe informații, consultați %{terms_declined_link}.
         terms_declined_link: această pagină wiki
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
   browse:
     deleted_ago_by_html: Șters %{time_ago} de %{user}
     edited_ago_by_html: Editat %{time_ago} de %{user}
@@ -2744,8 +2742,6 @@ ro:
           privind adresele de e-mail
         html: Adresa dvs. nu este afișată public, consultați %{privacy_policy_link}
           pentru mai multe informații.
-      consider_pd_html: Consider că contribuțiile mele sunt în %{consider_pd_link}.
-      consider_pd: domeniul public
       or: sau
       use external auth: sau înregistrați-vă cu o terță parte
     no_such_user:
@@ -2761,7 +2757,6 @@ ro:
       my notes: Notițele mele
       my messages: Mesajele mele
       my profile: Profilul meu
-      my settings: Setările mele
       my comments: Comentariile mele
       my_preferences: Preferințele mele
       my_dashboard: Dashboardul meu
@@ -2841,7 +2836,6 @@ ro:
       show:
         title: Utilizatori
         heading: Utilizatori
-        empty: Nu au fost găsiți utilizatori potriviți
       page:
         found_users:
           one: '%{count} utilizator găsit'
@@ -2849,6 +2843,7 @@ ro:
           other: ""
         confirm: Confirmați utilizatorii selectați
         hide: Ascundeți utilizatorii selectați
+        empty: Nu au fost găsiți utilizatori potriviți
       user:
         summary_html: '%{name} creat de %{ip_address} pe %{date}'
         summary_no_ip_html: '%{name} creat pe %{date}'
index 30b29e742cc943f29f230a149a7d1684ff67f7c2..9c0c9daee4ec7390b6cb23df2c977f1e34e7e456 100644 (file)
@@ -15,6 +15,7 @@
 # Author: Anton Khorev
 # Author: Ashed
 # Author: Banonotit
+# Author: Borealex
 # Author: BushmanK
 # Author: Butko
 # Author: CM3X
 # Author: XnL
 # Author: Yuri Nazarov
 # Author: Yurik
+# Author: Yurina Tatiana
 # Author: Yuryleb
 # Author: Zverik
 # Author: Александр Сигачёв
@@ -204,6 +206,7 @@ ru:
         allow_write_prefs: изменять пользовательские настройки
         allow_write_diary: создавать записи в дневнике и комментарии
         allow_write_api: редактировать карту
+        allow_write_changeset_comments: комментировать пакеты правок
         allow_read_gpx: читать частные GPS-треки
         allow_write_gpx: загружать GPS-треки
         allow_write_notes: исправлять заметки
@@ -382,9 +385,9 @@ ru:
         comment: Комментарий
         full: Полный текст
   accounts:
-    edit:
+    show:
       title: Изменить учетную запись
-      my settings: Мои настройки
+      my_account: Мой аккаунт
       current email address: Текущий адрес электронной почты
       external auth: 'Внешняя аутентификация:'
       openid:
@@ -400,6 +403,9 @@ ru:
           в общественном достоянии.
         link: https://openstreetmap.org/wiki/RU:Open_Database_License/Contributor_Terms?uselang=ru
         link text: что это?
+        not_agreed_with_pd: Вы не заявили, что считаете свои правки находящимися в
+          общественном достоянии.
+        pd_link_text: объявить
       save changes button: Сохранить изменения
       delete_account: Удалить учётную запись…
     go_public:
@@ -463,10 +469,6 @@ ru:
         tou_explain_html: '%{tou_link} управляет сайтом и иной инфраструктурой, предоставляемой
           OSMF. Пожалуйста, перейдите по ссылке и ознакомьтесь с текстом.'
         read_tou: Я соглашаюсь с Условиями использования
-        consider_pd: В дополнение к вышеизложенному, я принимаю во внимание, что мой
-          вклад находится в общественном достоянии
-        consider_pd_why: что это значит?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Информация, помогающая понять эти условия: %{readable_summary_link}
           и некоторые %{informal_translations_link}'
         readable_summary: краткое содержание
@@ -487,6 +489,20 @@ ru:
           Для получения дополнительной информации смотрите %{terms_declined_link}.
         terms_declined_link: эта страница вики
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=ru
+    pd_declarations:
+      show:
+        title: Считайте мои вклады общественным достоянием
+        consider_pd: Я считаю , мои вклады общественным достоянием.
+        consider_pd_why: Почему я хотел бы, чтобы мои материалы стали общественным
+          достоянием?
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: Подтвердить
+      create:
+        successfully_declared: Вы успешно заявили, что считаете свои правки общественным
+          достоянием.
+        already_declared: Вы уже заявили, что считаете свои правки общественным достоянием.
+        did_not_confirm: Вы не подтвердили, что считаете свои редактирования общественным
+          достоянием.
   browse:
     deleted_ago_by_html: Удален %{time_ago} пользователем %{user}
     edited_ago_by_html: Редактировал %{time_ago} %{user}
@@ -563,6 +579,7 @@ ru:
     start_rjs:
       feature_warning: Необходимо загрузить %{num_features} объектов, что может замедлить
         ваш браузер. Вы уверены, что хотите просмотреть эти данные?
+      feature_error: 'Не удалось загрузить объекты: %{message}'
       load_data: Загрузить данные
       loading: Загружается…
     tag_details:
@@ -725,6 +742,8 @@ ru:
       nearby users: Другие ближайшие пользователи
       no nearby users: Пока нет других пользователей, которые признают, что занимаются
         составлением карты поблизости.
+      followed_changesets: пакеты правок
+      followed_diaries: дневники
       nearby_changesets: пакеты правок соседей
       nearby_diaries: дневники соседей
   diary_entries:
@@ -2745,12 +2764,13 @@ ru:
     scopes:
       read_prefs: Прочитать настройки пользователя
       write_prefs: Изменить настройки пользователя
-      write_diary: Создавать записи в дневнике, комментировать и заводить друзей
+      write_diary: Создавать записи в дневнике и комментарии
       write_api: Изменить карту
       read_gpx: Читать частные GPS-треки
       write_gpx: Загрузить GPS-треки
       write_notes: Изменить заметки
       write_redactions: Редактировать данные карты
+      write_blocks: Создание и отмена блокировок пользователей
       read_email: Читать адрес электронной почты пользователя
       consume_messages: Читать, обновлять статус и удалять сообщения пользователей
       send_messages: Отправлять личные сообщения другим пользователям
@@ -2846,7 +2866,7 @@ ru:
       my notes: Мои заметки
       my messages: Мои сообщения
       my profile: Мой профиль
-      my settings: Мои настройки
+      my_account: Мой аккаунт
       my comments: Мои комментарии
       my_preferences: Мои предпочтения
       my_dashboard: Мой пульт
@@ -2910,15 +2930,31 @@ ru:
       show:
         title: Пользователи
         heading: Пользователи
-        empty: Не найдено соответствующих пользователей
+        states:
+          pending: В ожидании
+          active: Активен
+          confirmed: Подтверждено
+          suspended: Приостановлено
+          deleted: Удалено
+        name_or_email: Имя или адрес эл. почты
+        ip_address: IP-адрес
+        search: Поиск
       page:
         confirm: Подтвердить выделенных пользователей
         hide: Скрыть выделенных пользователей
+        empty: Не найдено соответствующих пользователей
       user:
         summary_html: '%{name} создан %{date}, с адреса %{ip_address}'
         summary_no_ip_html: '%{name} создан %{date}'
+    comments:
+      index:
+        heading_html: Комментарии пользователя %{user}
+        changesets: Пакеты правок
+        diary_entries: Записи в дневнике
+        no_comments: Нету комментариев
     changeset_comments:
       page:
+        changeset: Пакет правок
         when: Когда
         comment: Комментарий
     diary_comments:
@@ -2926,6 +2962,8 @@ ru:
         title: Комментарии к записям в дневнике, добавленные пользователем %{user}
       page:
         post: Сообщение
+        when: Когда
+        comment: Комментарий
     suspended:
       title: Учётная запись приостановлена
       heading: Учётная запись приостановлена
@@ -3139,8 +3177,6 @@ ru:
       anonymous_warning_sign_up: зарегистрироваться
       counter_warning_guide_link:
         url: https://wiki.openstreetmap.org/wiki/RU:%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0
-      counter_warning_forum_link:
-        url: https://community.openstreetmap.org/
       advice: Ваша заметка является общедоступной и может использоваться для обновления
         карты, поэтому не вводите личную информацию, информацию из защищённых авторскими
         правами карт или справочников.
@@ -3345,6 +3381,9 @@ ru:
       show_address: Показать адрес
       query_features: Что здесь?
       centre_map: Центрировать карту
+    home:
+      marker_title: Мой домашний адрес
+      not_set: Установка места нахождения не установлена для вашей учётной записи
   redactions:
     edit:
       heading: Редактировать исправление
index 1a14e727a49975535536f6f16aca28e8829e626d..bff9f7440f391791eb3be42b7db45d42b294163a 100644 (file)
@@ -125,9 +125,8 @@ sat:
         comment: ᱚᱠᱛᱟ
         full: ᱜᱚᱴᱟ ᱠᱷᱟᱴᱟᱹ ᱚᱞ
   accounts:
-    edit:
+    show:
       title: ᱠᱷᱟᱛᱟ ᱥᱟᱯᱲᱟᱣ ᱢᱮ
-      my settings: ᱤᱧᱟᱜ ᱥᱟᱡᱟᱣᱠᱚ
       current email address: 'ᱱᱮᱛᱚᱜ-ᱟᱜ ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱬᱟ:'
       openid:
         link text: ᱱᱤᱭᱟᱹ ᱫᱚ ᱪᱮᱫ?
@@ -136,7 +135,6 @@ sat:
       save changes button: ᱵᱚᱫᱚᱞᱠᱚ ᱪᱟᱺᱪᱟᱣ ᱢᱮ
     terms:
       show:
-        consider_pd_why: ᱱᱤᱭᱟᱹ ᱫᱚ ᱪᱮᱫ?
         continue: ᱞᱮᱛᱟᱲ
   browse:
     anonymous: ᱵᱟᱝ ᱵᱟᱰᱟᱭ
@@ -586,7 +584,6 @@ sat:
       my notes: ᱤᱧᱭᱟᱜ ᱠᱷᱟᱴᱟᱹ ᱚᱞᱠᱚ
       my messages: ᱤᱧᱭᱟᱜ ᱠᱷᱚᱵᱚᱨ ᱠᱚ
       my profile: ᱤᱧᱭᱟᱜ ᱢᱚᱦᱲᱟ
-      my settings: ᱤᱧᱟᱜ ᱥᱟᱡᱟᱣᱠᱚ
       my comments: ᱤᱧᱭᱟᱜ ᱚᱠᱛᱟ ᱠᱚ
       send message: ᱠᱷᱚᱵᱚᱨ ᱠᱩᱞ ᱢᱮ
       diary: ᱰᱟᱭᱨᱤ
index 36d82aac5264b333f2b9211f1cca07095e8eb7e4..9ab63efeadf2cea89cd7c3f949c634abc948a773 100644 (file)
@@ -1,6 +1,7 @@
 # Messages for Sardinian (sardu)
 # Exported from translatewiki.net
 # Export driver: phpyaml
+# Author: Eic17H
 # Author: Gravitystorm
 # Author: L2212
 # Author: Larentzu
@@ -240,9 +241,9 @@ sc:
         comment: Cummentu
         full: Nota intrea
   accounts:
-    edit:
+    show:
       title: Modìfica su profilu
-      my settings: Preferèntzias meas
+      my_account: Su contu meu
       current email address: Indiritzu de posta eletrònica atuale
       external auth: Autenticatzione esterna
       openid:
@@ -324,9 +325,6 @@ sc:
           àteras infrastruturas frunidas dae s'OSFM. Incarca in su ligàmene, leghe
           su testu e atzetade·lu.
         read_tou: Apo letu e atzeto sas cunditziones de impreu
-        consider_pd: Paris a totu su chi b'at inoghe in subra, atzeto chi sos contributos
-          meos siant de domìniu pùblicu
-        consider_pd_why: ite est custu?
         guidance_info_html: 'Informatziones pro t''agiuare a cumprèndere custas cunditziones:
           unu %{readable_summary_link} e unas cantas %{informal_translations_link}'
         readable_summary: resumu chi un'èssere umanu podet lèghere
@@ -2624,7 +2622,7 @@ sc:
       my notes: Sas notas meas
       my messages: Sos messàgios meos
       my profile: Su profilu meu
-      my settings: Sas impostatziones meas
+      my_account: Su contu meu
       my comments: Sos cummentos meos
       my_preferences: Sas preferèntzias meas
       my_dashboard: Su pannellu de controllu meu
@@ -2687,10 +2685,10 @@ sc:
       show:
         title: Utentes
         heading: Utentes
-        empty: Non b'at perunu utente chi currispondat
       page:
         confirm: Cunfirma sos utentes seletzionados
         hide: Cua sos utentes seletzionados
+        empty: Non b'at perunu utente chi currispondat
       user:
         summary_html: '%{name} creadu dae %{ip_address} su %{date}'
         summary_no_ip_html: '%{name} creadu su %{date}'
index a10e34aef3441244120dac02a487e6333ec18200..096b199293f73b808cef331cef0ac630834ebca6 100644 (file)
@@ -212,9 +212,8 @@ scn:
         comment: Cummentu
         full: Nota cumpleta
   accounts:
-    edit:
+    show:
       title: Cancia u cuntu
-      my settings: Mpustazzioni
       current email address: Nnirizzu e-mail attuali
       external auth: Tranzuntari di fora
       openid:
@@ -250,9 +249,6 @@ scn:
       show:
         title: Cunnizzioni
         heading: Cunnizzioni
-        consider_pd: Sparti dû cuntrattu ccassupra, cunzìddiru chi li mè cuntribbuti
-          sunnu ntô Duminiu Pùbblicu
-        consider_pd_why: chi voli diri?
         you need to accept or decline: Pi cuntinuari, pi favuri leggi li cunnizzioni
           di cuntribbuzzioni novi e appoi accèttali o rifiùtali.
         legale_select: 'Paisi di risidenza:'
@@ -1662,7 +1658,6 @@ scn:
       my notes: Li mè noti
       my messages: Li mè missaggi
       my profile: Lu mè prufilu
-      my settings: Li mè mpustazzioni
       my comments: Li mè cummenti
       my_preferences: Li mè prifirenzi
       blocks on me: Cu blocca a mìa
@@ -1717,10 +1712,10 @@ scn:
       show:
         title: Utenti
         heading: Utenti
-        empty: Nun fu attruvatu nuḍḍu utenti chi currispunni
       page:
         confirm: Cunferma a l'utenti scigghiuti
         hide: Ammuccia a l'utenti scigghiuti
+        empty: Nun fu attruvatu nuḍḍu utenti chi currispunni
       user:
         summary_html: '%{name} criatu di %{ip_address} lu %{date}'
         summary_no_ip_html: '%{name} criatu lu %{date}'
index b3bd6e4ef2c9d9b49a97b7c2f2261ccf9268c0df..061c90cadd52ba7a136f8901c2b0a7995a6904ef 100644 (file)
@@ -102,7 +102,7 @@ sco:
       name: Remote Control
       description: Remote Control (JOSM or Merkaartor)
   accounts:
-    edit:
+    show:
       title: Edit accoont
   browse:
     version: Vairsion
index 1dc8d90cee5c37751e359bbb078a79d5c0bf3ce5..a3ea81ec4db1094df77d659cd843f69e820afd45 100644 (file)
@@ -179,9 +179,8 @@ sh:
         comment: Komentar
         full: Cijela napomena
   accounts:
-    edit:
+    show:
       title: Uredi račun
-      my settings: Moje postavke
       current email address: Trenutna adresa e-pošte
       openid:
         link text: šta je ovo?
index 47f602bc438d74f094c161d1372916f791153cc5..3156e41ef52240100c798229ceb99bb863ca27d5 100644 (file)
@@ -285,9 +285,8 @@ sk:
         comment: Komentár
         full: Celá poznámka
   accounts:
-    edit:
+    show:
       title: Upraviť účet
-      my settings: Moje nastavenia
       current email address: Aktuálna e-mailová adresa
       external auth: Externá autentifikácia
       openid:
@@ -356,9 +355,6 @@ sk:
           používania, po dokončení začiarknite obe políčka a potom stlačte tlačidlo
           pokračovať.
         read_tou: Prečítal som si Podmienky používania a súhlasím s nimi
-        consider_pd: Navyše k vyššie uvedenému vyhlasujem, že považujem svoje príspevky
-          za slobodné dielo (Public Domain).
-        consider_pd_why: čo to znamená?
         continue: Pokračovať
         cancel: Zrušiť
         you need to accept or decline: Pre pokračovanie si prosím prečítajte a príjmite,
@@ -2584,8 +2580,6 @@ sk:
       email_help:
         html: Vaša adresa sa nezobrazuje verejne, pre ďalšie informácie venujte pozornosť
           našim %{privacy_policy_link}.
-      consider_pd_html: Moje príspevky považujem za %{consider_pd_link}.
-      consider_pd: Verejná doména
       or: alebo
       use external auth: prípadne využite na registráciu služby tretích strán
     no_such_user:
@@ -2601,7 +2595,6 @@ sk:
       my notes: Moje poznámky k mape
       my messages: Moje správy
       my profile: Môj profil
-      my settings: Moje nastavenia
       my comments: Moje komentáre
       my_preferences: Moje predvoľby
       my_dashboard: Moja nástenka
@@ -2668,10 +2661,10 @@ sk:
       show:
         title: Používatelia
         heading: Používatelia
-        empty: Žiadni používatelia vyhovujúci podmienkam neboli nájdení
       page:
         confirm: Potvrdiť zvolených používateľov
         hide: Skryť vybraných používateľov
+        empty: Žiadni používatelia vyhovujúci podmienkam neboli nájdení
       user:
         summary_html: '%{name} založené %{date} z %{ip_address}'
         summary_no_ip_html: '%{name} založený %{date}'
index 3f1d4dad3451789f4f0a138e1573db8d5e2e94b7..2f2a9dee300ec6c4809abab3ece7708a093a2a9a 100644 (file)
@@ -4,6 +4,7 @@
 # Author: Ajeje Brazorf
 # Author: Saraiki
 # Author: Sayam Asjad
+# Author: Umar Shahid
 ---
 skr-arab:
   html:
@@ -155,9 +156,9 @@ skr-arab:
         comment: رائے
         full: پورا نوٹ
   accounts:
-    edit:
+    show:
       title: کھاتے وچ تبدیلی کرو
-      my settings: میݙیاں ترتیباں
+      my_account: میݙا کھاتہ
       current email address: موجودہ ای میل پتہ
       external auth: باہرلی تصدیق
       openid:
@@ -1105,7 +1106,7 @@ skr-arab:
       undelete: بحال
   sessions:
     new:
-      tab_title: لاگ ان
+      tab_title: لاگ ان تھیوو
       email or username: ای میل پتہ یا ورتݨ ناں
       password: پاس ورڈ
       remember: میکوں یاد رکھو
@@ -1325,10 +1326,18 @@ skr-arab:
       or: یا
     show:
       my profile: میݙی پروفائل
-      my settings: میݙیاں ترتیباں
+      my_account: میݙا کھاتہ
       my comments: میݙے تبصرے
+    lists:
+      show:
+        select_status: حیثیت چݨو
+        states:
+          active: فعال
+          deleted: مٹا ݙتے
+        ip_address: آئی پی پتہ
     comments:
       index:
+        diary_entries: ڈائری دی انٹری
         no_comments: کوئی تبصرہ کائنی
     changeset_comments:
       page:
@@ -1414,6 +1423,7 @@ skr-arab:
           eighth: ٨واں
           ninth: ٩واں
           tenth: ١٠واں
+      download: روٹ کوں GeoJSON دے طور تے ڈاؤن لوڈ کرو۔
   redactions:
     show:
       confirm: بھلا تہاکوں پک ہے؟
index fa218dd78a63e3352f33710f83e8721a460414c2..d5286ff01a3a234268c0206c839fbcc610ef0bcc 100644 (file)
@@ -280,9 +280,8 @@ sl:
         comment: Komentar
         full: Celotna opomba
   accounts:
-    edit:
+    show:
       title: Urejanje uporabniškega računa
-      my settings: Moje nastavitve
       current email address: Trenutni e-poštni naslov
       external auth: Zunanja avtentikacija
       openid:
@@ -358,8 +357,6 @@ sl:
           infrastrukturo, ki jo zagotavlja OSMF. Kliknite povezavo, preberite jih
           in potrdite strinjanje z besedilom.
         read_tou: Prebral sem pogoje uporabe in soglašam z njimi
-        consider_pd: Poleg zgoraj navedenega menim, da so moji prispevki v javni domeni
-        consider_pd_why: kaj je to?
         guidance_info_html: 'Informacije za lažje razumevanje teh izrazov: %{readable_summary_link}
           in nekaj %{informal_translations_link}'
         readable_summary: človeško berljiv povzetek
@@ -1711,7 +1708,7 @@ sl:
           ste jo dodali. Opomba je v bližini %{place}.'
         commented_note_html: '%{commenter} je spet aktiviral_a opombo na zemljevidu,
           ki ste jo dodali. Opomba je v bližini %{place}.'
-      details: Več podatkov o opombi lahko najdete na %{url}.
+      details: Več podatkov o opombi je na voljo na %{url}.
       details_html: Na opombo lahko odgovorite ali izveste več o njej na %{url}.
     changeset_comment_notification:
       description: Nabor sprememb OpenStreetMap št. %{id}
@@ -2706,8 +2703,6 @@ sl:
         privacy_policy_title: Pravilnik o zasebnosti OSMF, vključno z razdelkom o
           e-poštnih naslovih
         html: Vaš naslov ni javno prikazan, za več informacij glejte naš %{privacy_policy_link}.
-      consider_pd_html: Svoje prispevke štejem za %{consider_pd_link}.
-      consider_pd: javna domena
       or: ali
       use external auth: ali se prijavite prek tretje osebe
     no_such_user:
@@ -2723,7 +2718,6 @@ sl:
       my notes: Moje opombe
       my messages: Sporočila
       my profile: Moj profil
-      my settings: Moje nastavitve
       my comments: Moji komentarji
       my_preferences: Moje prilagoditve
       my_dashboard: Moja nadzorna plošča
@@ -2801,10 +2795,10 @@ sl:
       show:
         title: Uporabniki
         heading: Uporabniki
-        empty: Nobenega uporabnika ni bilo mogoče najti
       page:
         confirm: Potrdi izbrane uporabnike
         hide: Skrij izbrane uporabnike
+        empty: Nobenega uporabnika ni bilo mogoče najti
       user:
         summary_html: '%{name} ustvarjen iz %{ip_address} dne %{date}'
         summary_no_ip_html: '%{name} ustvarjen dne %{date}'
@@ -2924,6 +2918,7 @@ sl:
       status: Stanje
     navigation:
       block: 'Blokiraj #%{id}'
+      new_block: Novo blokiranje
   user_mutes:
     index:
       title: Utišani uporabniki
index d7e41da32d2e9316ab20d7a7f6378ed63e76872b..1e83e75124ae2165175c1542dd6c84cdf24d652c 100644 (file)
@@ -122,9 +122,8 @@ sq:
       name: Kontroll nga Larg
       description: Kontrollo nga larg (JOSM, Potlatch, Merkaartor)
   accounts:
-    edit:
+    show:
       title: Redakto llogarinë
-      my settings: Preferencat e mia
       current email address: Adresa e Tanishme e Emailit
       openid:
         link text: çfarë është kjo?
@@ -149,9 +148,6 @@ sq:
       show:
         title: Kushtet
         heading: Kushtet
-        consider_pd: Përveç marrëveshjes së mësipërme, unë i konsideroj kontributet
-          e mia të jenë në Domeinin Publik
-        consider_pd_why: çfarë është kjo?
         legale_select: 'Vendi i banimit:'
         legale_names:
           france: Francë
@@ -1227,7 +1223,6 @@ sq:
       my notes: Shënimet e mia
       my messages: Mesazhet e mia
       my profile: Profili im
-      my settings: Preferencat e mia
       my comments: Komentet e mia
       blocks on me: Blloqet mbi mua
       blocks by me: Bllokimet nga unë
@@ -1267,10 +1262,10 @@ sq:
       show:
         title: Përdoruesi
         heading: Përdorues
-        empty: Asnjë përdorues që përputhet nuk u gjet
       page:
         confirm: Konfirmo përdoruesit e zgjedhur
         hide: Fshih përdoruesit e zgjedhur
+        empty: Asnjë përdorues që përputhet nuk u gjet
       user:
         summary_html: '%{name} krijuar nga %{ip_address} më %{date}'
         summary_no_ip_html: '%{name} krijuar më %{date}'
index 6b83ac0bb77e385f89e2775e87584b10c0ef06f8..0a13081f01651dca6204e311c59c355ada76e574 100644 (file)
@@ -117,9 +117,8 @@ sr-Latn:
       name: Daljinsko upravljanje
       description: Daljinsko upravljanje (JOSM ili Merkaartor)
   accounts:
-    edit:
+    show:
       title: Uredi nalog
-      my settings: Postavke
       current email address: 'Trenutna e-adresa:'
       openid:
         link text: šta je ovo?
@@ -143,9 +142,6 @@ sr-Latn:
       show:
         title: Uslovi uređivanja
         heading: Uslovi uređivanja
-        consider_pd: Prema gorenavedenom ugovoru, smatram da moji doprinosi pripadaju
-          javnom vlasništvu
-        consider_pd_why: šta je ovo?
         you need to accept or decline: Molimo vas da pročitate ugovor pre nego što
           ga prihvatite.
         legale_select: 'Izaberite zemlju prebivališta:'
@@ -1083,7 +1079,6 @@ sr-Latn:
       my diary: moj dnevnik
       my edits: moje izmene
       my traces: moji tragovi
-      my settings: moje postavke
       my comments: moji komentari
       blocks on me: blokiranja na mene
       blocks by me: moja blokiranja
@@ -1134,10 +1129,10 @@ sr-Latn:
       show:
         title: Korisnici
         heading: Korisnici
-        empty: Nije pronađen nijedan korisnik
       page:
         confirm: Potvrdi izabrane korisnike
         hide: Sakrij izabrane korisnike
+        empty: Nije pronađen nijedan korisnik
       user:
         summary_html: '%{name} napravljeno od %{ip_address} dana %{date}'
         summary_no_ip_html: '%{name} napravljeno %{date}'
index e18dd74011a5f013795fc3a7b4f91cce41d96db2..bdd30c03e1074a7f9cabef5c80272a5a54c734e9 100644 (file)
@@ -257,9 +257,8 @@ sr:
         comment: Коментар
         full: Потпуна белешка
   accounts:
-    edit:
+    show:
       title: Уреди налог
-      my settings: Поставке
       current email address: Тренутна имејл адреса
       external auth: Спољна аутентификација
       openid:
@@ -299,9 +298,6 @@ sr:
         heading: Услови
         read_ct: Прочитао сам и прихватам горе наведене услове
         read_tou: Прочитао сам и прихватам Услове коришћења
-        consider_pd: Према горенаведеном, сматрам да моји доприноси припадају јавном
-          власништву
-        consider_pd_why: шта је ово?
         guidance_info_html: 'Информације за разумевање ових услова: a %{readable_summary_link}
           и %{informal_translations_link}'
         readable_summary: сумарум
@@ -319,6 +315,9 @@ sr:
         terms accepted: Хвала вам што прихватате нове услове уређивања.
       terms_declined_flash:
         terms_declined_url: http://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=sr-ec
+    pd_declarations:
+      show:
+        confirm: Потврди
   browse:
     edited_ago_by_html: Уређено %{time_ago} од %{user}
     version: Верзија
@@ -2127,7 +2126,6 @@ sr:
       continue: Отвори налог
       email_help:
         privacy_policy: политика приватности
-      consider_pd: јавно власништво
       or: или
       use external auth: или се региструјте путем треће стране
     no_such_user:
@@ -2143,7 +2141,6 @@ sr:
       my notes: Моје белешке
       my messages: Моје поруке
       my profile: Мој профил
-      my settings: Моје поставке
       my comments: Моји коментари
       my_preferences: Моја подешавања
       my_dashboard: Tабла
@@ -2205,10 +2202,15 @@ sr:
       show:
         title: Корисници
         heading: Корисници
-        empty: Није пронађен ниједан корисник
+        states:
+          deleted: Обрисано
+        name_or_email: Име или имејл
+        ip_address: IP адреса
+        search: Претрага
       page:
         confirm: Потврди изабране кориснике
         hide: Сакриј изабране кориснике
+        empty: Није пронађен ниједан корисник
       user:
         summary_html: '%{name} направљено од %{ip_address} дана %{date}'
         summary_no_ip_html: '%{name} направљено %{date}'
@@ -2332,6 +2334,7 @@ sr:
       closed_title: Решена белешка бр. %{note_name}
       hidden_title: Скривена белешка бр. %{note_name}
       description_when_author_is_deleted: обрисано
+      description_when_there_is_no_opening_comment: непознато
       event_opened_by_html: Направио %{user} %{time_ago}
       report: пријави ову белешку
       anonymous_warning: Ова белешка садржи коментаре анонимних корисника које би
index 76a27d7c3bd68016db5409eb235ff4ecee43600b..cfcbad6f909e25c0231d7ee77783158352319044 100644 (file)
@@ -138,6 +138,7 @@ sv:
         allow_write_prefs: ändra deras användaralternativ
         allow_write_diary: skapa dagboksinlägg och kommentarer
         allow_write_api: ändra kartan
+        allow_write_changeset_comments: kommentar på ändringsuppsättning
         allow_read_gpx: läs deras privata GPS-spår
         allow_write_gpx: ladda upp GPS-spår
         allow_write_notes: ändra anteckningar
@@ -290,9 +291,9 @@ sv:
         comment: Kommentar
         full: Hela anteckningen
   accounts:
-    edit:
+    show:
       title: Redigera konto
-      my settings: Mina inställningar
+      my_account: Mitt konto
       current email address: Nuvarande e-postadress
       external auth: Extern autentisering
       openid:
@@ -306,6 +307,9 @@ sv:
         agreed_with_pd: Du har också förklarat att du anser att dina redigeringar
           är inom Public Domain.
         link text: vad är detta?
+        not_agreed_with_pd: Du har inte förklarat att du anser att dina redigeringar
+          är inom Public Domain.
+        pd_link_text: förklara
       save changes button: Spara ändringar
       delete_account: Radera konto...
     go_public:
@@ -368,9 +372,6 @@ sv:
           och andra infrastrukturer från OSMF får användas. Klicka på länken, läs
           och godkänn villkoren.
         read_tou: Jag har läst och samtycker med användarvillkoren.
-        consider_pd: Utöver ovan nämnda avtal, anser jag att mina bidrag är inom allmän
-          egendom.
-        consider_pd_why: vad är det här?
         guidance_info_html: 'Information som hjälper dig att förstå dessa termer:
           en %{readable_summary_link} och några %{informal_translations_link}'
         readable_summary: mänskligt läsbar sammanfattning
@@ -393,6 +394,15 @@ sv:
         terms_declined_html: Vi beklagar att du bestämt dig för att inte acceptera
           de nya användarvillkoren. För mer information, se %{terms_declined_link}.
         terms_declined_link: denna wikisida
+    pd_declarations:
+      show:
+        title: Anse att mina bidrag är i public domain
+        consider_pd: Jag anser mina bidrag vara i public domain
+        consider_pd_why: Varför skulle jag vilja ha mina bidrag i public domain?
+        confirm: Bekräfta
+      create:
+        successfully_declared: Du har förklarat att du anser att dina redigeringar
+          är inom public domain.
   browse:
     deleted_ago_by_html: Raderades %{time_ago} av %{user}
     edited_ago_by_html: Redigerades %{time_ago} av %{user}
@@ -2882,8 +2892,6 @@ sv:
         privacy_policy_title: OSMF:s integritetspolicy inkluderingsavsnitt om e-postadresser
         html: Din adress visas inte offentligt, se vår %{privacy_policy_link} för
           mer information.
-      consider_pd_html: Jag anser mina bidrag vara i %{consider_pd_link}.
-      consider_pd: public domain
       or: eller
       use external auth: eller registrera med en tredje part
     no_such_user:
@@ -2899,7 +2907,7 @@ sv:
       my notes: Mina kartanteckningar
       my messages: Mina meddelanden
       my profile: Min profil
-      my settings: Mina inställningar
+      my_account: Mitt konto
       my comments: Mina kommentarer
       my_preferences: Mina alternativ
       my_dashboard: Min kontrollpanel
@@ -2979,13 +2987,22 @@ sv:
       show:
         title: Användare
         heading: Användare
-        empty: Inga motsvarande användare hittades
+        select_status: Välj status
+        states:
+          pending: Pågående
+          active: Aktiv
+          confirmed: Bekräftad
+          suspended: Uppskjutet
+          deleted: Raderad
+        ip_address: IP-adress
+        search: Sök
       page:
         found_users:
           one: '%{count} användare hittade'
           other: '%{count} användare hittade'
         confirm: Bekräfta valda användare
         hide: Dölj valda användare
+        empty: Inga motsvarande användare hittades
       user:
         summary_html: '%{name} skapades från %{ip_address} den %{date}'
         summary_no_ip_html: '%{name} skapad den %{date}'
@@ -3187,6 +3204,7 @@ sv:
       closed_title: 'Avklarad anteckning #%{note_name}'
       hidden_title: 'Dold anteckning #%{note_name}'
       description_when_author_is_deleted: raderad
+      description_when_there_is_no_opening_comment: okänd
       event_opened_by_html: Skapades av %{user} %{time_ago}
       event_opened_by_anonymous_html: Skapades av anonym %{time_ago}
       event_commented_by_html: Kommenterades från %{user} %{time_ago}
@@ -3415,6 +3433,8 @@ sv:
           ninth: 9:e
           tenth: 10:e
       time: Tid
+      download: Ladda ner rutt som GeoJSON
+      filename: rutt
     query:
       node: Nod
       way: Sträcka
@@ -3429,6 +3449,9 @@ sv:
       show_address: Visa adress
       query_features: Undersök kartobjekt
       centre_map: Centrera kartan här
+    home:
+      marker_title: Min hemort
+      not_set: Hemort har inte angetts för ditt konto
   redactions:
     edit:
       heading: Redigera maskering
index 0c2786da62551ad440d016d58bdb896daf7c5dea..c655cadeaa7656a9c759d4bc250e83f2fe4aaf89 100644 (file)
@@ -174,9 +174,8 @@ ta:
         opened_at_html: '%{when} உருவாக்கப்பட்டது'
         opened_at_by_html: '%{when} %{user} பயனரால் உருவாக்கப்பட்டது'
   accounts:
-    edit:
+    show:
       title: கணக்கை திருத்து
-      my settings: என் அமைப்புகள்
       current email address: 'தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:'
       openid:
         link text: இது என்ன?
@@ -773,7 +772,6 @@ ta:
     show:
       my diary: எனது நாட்குறிப்பேடு
       my edits: என் திருத்தங்கள்
-      my settings: என் அமைப்புகள்
       create_mute: இப்பயனரை மௌனி
       destroy_mute: இப்பயனரை ஓசையாக்கு
       diary: நாட்குறிப்பேடு
index 7313cad71c4a4659af3584eb3ab57dc97dc40164..1ddbee045bf04fd3ec201c1b6814f0160b8d76f4 100644 (file)
@@ -238,9 +238,8 @@ te:
         comment: వ్యాఖ్య
         full: పూర్తి గమనిక
   accounts:
-    edit:
+    show:
       title: ఖాతా మార్పు
-      my settings: నా అమరికలు
       current email address: ప్రస్తుత ఈమెయిలు చిరునామా
       external auth: బయటి ఆథెంటికేషను
       openid:
@@ -292,7 +291,6 @@ te:
       show:
         heading: నియమాలు
         read_tou: నేను వాడుక నియమాలను చదివాను, వాటికి అంగీకరిస్తున్నాను
-        consider_pd_why: ఇది ఏమిటి?
         informal_translations: అనధికారిక అనువాదాలు
         continue: కొనసాగించు
         legale_select: 'నివసించే దేశం:'
@@ -2069,7 +2067,6 @@ te:
       my notes: నా గమనికలు
       my messages: నా సందేశాలు
       my profile: నా ప్రొఫైలు
-      my settings: నా అమరికలు
       my comments: నా వ్యాఖ్యలు
       my_preferences: నా అభీష్టాలు
       my_dashboard: నా డ్యాష్‌బోర్డు
@@ -2126,10 +2123,10 @@ te:
       show:
         title: వాడుకరులు
         heading: వాడుకరులు
-        empty: సరిపోలే వాడుకరులు కనబడలేదు
       page:
         confirm: ఎంచుకున్న వాడూకరులను ధ్రువీకరించు
         hide: ఎంచుకున్న వాడుకరులను దాచు
+        empty: సరిపోలే వాడుకరులు కనబడలేదు
       user:
         summary_html: '%{name}, %{date} న %{ip_address} నుండి సృష్టించారు'
         summary_no_ip_html: '%{name} %{date} న సృష్టించారు'
index 21a2cb7a4e6811b96c8d96de67af99db8895dbd1..6b5b396b19a477b532b38e9a5f5674739b3b31c8 100644 (file)
@@ -68,6 +68,7 @@ th:
       message: ข้อความ
       node: โหนด
       node_tag: ป้ายกำกับโหนด
+      note: หมายเหตุ
       old_node: โหนดเก่า
       old_node_tag: แท็กกำกับโหนดเก่า
       old_relation: ความสัมพันธ์เดิม
@@ -98,8 +99,9 @@ th:
         support_url: ที่อยู่ URL สนับสนุน
         allow_read_prefs: อ่านการตั้งค่าของผู้ใช้
         allow_write_prefs: แก้ไขการตั้งค่าของผู้ใช้
-        allow_write_diary: à¸ªà¸£à¹\89าà¸\87รายà¸\81ารà¸\9aัà¸\99à¸\97ึà¸\81 à¸\82à¹\89อà¸\84ิà¸\94à¹\80หà¹\87à¸\99 à¹\81ละà¸\9eà¸\9aà¹\80à¸\9eืà¹\88อà¸\99à¹\83หมà¹\88
+        allow_write_diary: à¸ªà¸£à¹\89าà¸\87รายà¸\81ารà¸\9aัà¸\99à¸\97ึà¸\81 à¸\82à¹\89อà¸\84ิà¸\94à¹\80หà¹\87à¸\99 à¹\81ละà¹\81สà¸\94à¸\87à¸\84วามà¸\84ิà¸\94à¹\80หà¹\87à¸\99
         allow_write_api: แก้ไขแผนที่
+        allow_write_changeset_comments: เพิ่มความคิดเห็นเกี่ยวกับชุดการเปลี่ยนแปลง
         allow_read_gpx: อ่านรอยทาง GPS ส่วนบุคคล
         allow_write_gpx: อัปโหลดรอยทาง GPS
         allow_write_notes: แก้ไขโน้ต
@@ -238,9 +240,9 @@ th:
         comment: ความคิดเห็น
         full: เนื้อความเต็มในโน้ต
   accounts:
-    edit:
+    show:
       title: แก้ไขบัญชี
-      my settings: การตั้งค่าของฉัน
+      my_account: บัญชีของฉัน
       current email address: ที่อยู่อีเมลปัจจุบัน
       external auth: การยืนยันตัวตนด้วยบริการภายนอก
       openid:
@@ -252,6 +254,7 @@ th:
         review link text: โปรดเข้าลิงก์นี้ตามความสะดวกของคุณเพื่อตรวจสอบและยอมรับข้อกำหนดของผู้ร่วมให้ข้อมูลใหม่
         agreed_with_pd: คุณยังได้ประกาศด้วยว่า คุณถือว่าการแก้ไขของคุณถือว่าเป็นสาธารณสมบัติ
         link text: นี่คืออะไร?
+        pd_link_text: ประกาศ
       save changes button: บันทึกการเปลี่ยนแปลง
       delete_account: ลบบัญชี...
     go_public:
@@ -294,10 +297,14 @@ th:
         title: ข้อกำหนด
         heading: ข้อกำหนด
         heading_ct: ข้อกำหนดผู้ร่วมให้ข้อมูล
+        read and accept with tou: โปรดอ่านข้อตกลงผู้มีส่วนร่วมให้ข้อมูลและเงื่อนไขการใช้งาน
+          ทำเครื่องหมายทั้งสองช่องเมื่อเสร็จสิ้น จากนั้นกดปุ่มดำเนินการต่อ
+        contributor_terms_explain: ข้อตกลงนี้ใช้บังคับกับข้อกำหนดสำหรับการมีส่วนร่วมในปัจจุบันและในอนาคตของคุณ
+        read_ct: ฉันได้อ่านและยอมรับเงื่อนไขของผู้มีส่วนร่วมให้ข้อมูลข้างต้นแล้ว
         read_tou: ข้าพเจ้าได้อ่านและเห็นด้วยในข้อกำหนดการใช้งาน
-        consider_pd: นอกเหนือจากข้อความข้างต้น ข้าพเจ้ายินดีสละการสร้างสรรค์ของข้าพเจ้าให้เป็นงานอันไม่มีลิขสิทธิ์
-        consider_pd_why: นี้คืออะไร?
+        informal_translations: การแปลแบบไม่เป็นทางการ
         continue: ถัดไป
+        cancel: ยกเลิก
         you need to accept or decline: กรุณาตรวจทานและเลือกยอมรับหรือไม่ยอมรับข้อกำหนดของผู้ร่วมให้ข้อมูลเพื่อไปต่อ
         legale_select: 'ประเทศที่พำนัก:'
         legale_names:
@@ -306,6 +313,9 @@ th:
           rest_of_world: พื้นที่อื่น ๆ ในโลก
       update:
         terms accepted: ขอบคุณสำหรับการตอบรับเงื่อนไขผู้ร่วมให้ข้อมูล!
+    pd_declarations:
+      show:
+        confirm: ยืนยัน
   browse:
     deleted_ago_by_html: ลบเมื่อ %{time_ago} โดย %{user}
     edited_ago_by_html: แก้ไขเมื่อ %{time_ago} โดย %{user}
@@ -345,7 +355,7 @@ th:
         way: เส้นทาง
         relation: ความสัมพันธ์
     containing_relation:
-      entry_role_html: à¸\84วามสัมà¸\9eัà¸\99à¸\98à¹\8c%{relation_name} (à¹\83à¸\99à¸\90าà¸\99ะ%{relation_role})
+      entry_role_html: à¸\84วามสัมà¸\9eัà¸\99à¸\98à¹\8c%{relation_name} (à¹\83à¸\99à¸\9aà¸\97à¸\9aาà¸\97%{relation_role})
     not_found:
       title: ไม่พบข้อมูล
     timeout:
@@ -436,7 +446,7 @@ th:
         title: ชุดการเปลี่ยนแปลง %{id}
         title_comment: ชุดการเปลี่ยนแปลง %{id} - %{comment}
         created: สร้างเมื่อ
-        closed: ปิดเมื่อ
+        closed: ปิด
         belongs_to: ผู้สร้าง
     show:
       title: 'ชุดการเปลี่ยนแปลง: %{id}'
@@ -490,12 +500,17 @@ th:
     popup:
       your location: ตำแหน่งของคุณ
       nearby mapper: คนทำแผนที่ ที่อยู่ใกล้เคียง
+      following: ติดตาม
     show:
       title: แผงควบคุมของฉัน
       no_home_location_html: '%{edit_profile_link} และตั้งตำแหน่งบ้านของให้ผู้ใช้ไกล้เคียงเห็น'
       edit_your_profile: แก้ไขโปรไฟล์ของคุณ
+      followings: การติดตาม
+      no followings: คุณยังไม่ได้ติดตามผู้ใช้คนใดเลย
       nearby users: ผู้ใช้อื่นที่ใกล้เคียง
       no nearby users: ไม่ได้มีผู้ใดแสดงตัวว่าทำแผนที่อยู่ใกล้เคียง
+      followed_changesets: ชุดการเปลี่ยนแปลง
+      followed_diaries: รายการบันทึก
       nearby_changesets: ชุดการเปลี่ยนแปลงของผู้ใช้ใกล้เคียง
       nearby_diaries: บันทึกของผู้ใช้ใกล้เคียง
   diary_entries:
@@ -952,6 +967,8 @@ th:
           wayside_shrine: ศาลเจ้าริมทาง
           wreck: ซากปรักหักพัง
           "yes": สถานที่ประวัติศาสตร์
+        information:
+          office: สำนักงานบริการนักท่องเที่ยว
         junction:
           "yes": ทางแยก
         landuse:
@@ -1364,6 +1381,13 @@ th:
           building_passage: ทางลอดใต้อาคาร
           culvert: ท่อระบายน้ำ
           "yes": อุโมงค์
+        water:
+          lake: ทะเลสาบ
+          pond: สระน้ำ
+          reservoir: อ่างเก็บน้ำ
+          lagoon: ลากูน
+          wastewater: น้ำเสีย
+          oxbow: ทะเลสาบรูปแอก
         waterway:
           artificial: ทางน้ำที่มนุษย์สร้าง
           boatyard: ที่จอดเรือ
@@ -1709,6 +1733,11 @@ th:
       reset: ตั้งรหัสผ่านใหม่
     update:
       flash changed: เปลี่ยนรหัสผ่านของคุณแล้วเรียบร้อย
+  preferences:
+    show:
+      title: การตั้งค่าของฉัน
+      preferred_site_color_scheme: โทนสีของเว็บไซต์ที่ต้องการ
+      preferred_map_color_scheme: โทนสีของแผนที่ที่ต้องการ
   profiles:
     edit:
       image: 'รูปภาพ:'
@@ -1773,6 +1802,11 @@ th:
         เพิ่มข้อมูล หรือกระทำการให้เกิดสิ่งอื่นใดใหม่ขึ้นต่องานที่มีนี้ ท่านสามารถแจกจ่ายได้แต่เพียงภายใต้สัญญาอนุญาตเดียวกันเท่านั้น
         โปรดดู%{copyright_license_link}สำหรับลายละเอียดเพิ่มเติม
       legal_title: ข้อกำหนดทางกฎหมาย
+      legal_1_1_terms_of_use: ข้อกำหนดการใช้งาน
+      legal_1_1_aup: นโยบายการใช้งานที่ยอมรับได้
+      legal_1_1_privacy_policy: นโยบายความเป็นส่วนตัว
+      legal_2_1_html: โปรดไปที่ %{contact_the_osmf_link} หากคุณมีปัญหาหรือข้อสงสัยเกี่ยวกับการอนุญาตให้ใช้งาน
+        ลิขสิทธิ์ หรือข้อสงสัยด้านกฎหมายอื่น ๆ
       partners_title: องค์กรพันธมิตร
     copyright:
       title: ลิขสิทธิ์และสัญญาอนุญาต
@@ -1788,6 +1822,7 @@ th:
         native_link: รุ่นภาษาTHIS_LANGUAGE_NAME_HERE
         mapping_link: เริ่มการทำแผนที่
       legal_babble:
+        introduction_1_open_data: ข้อมูลเปิดเผย
         introduction_2_html: คุณสามารถคัดลอก แจกจ่าย ถ่ายทอด และดัดแปลงข้อมูลของเราได้อย่างเสรี
           ตราบใดที่คุณให้อ้างอิงเครดิต OpenStreetMap และผู้ร่วมให้ข้อมูล ถ้าคุณแก้ไข
           หรือสร้างข้อมูลต่อจากข้อมูลของเรา คุณสามารถเผยแพร่ผลลัพธ์ภายใต้สัญญาเดิมเท่านั้น
@@ -1796,6 +1831,7 @@ th:
         credit_1_html: |-
           เราจำเป็นต้องให้ท่านแสดงที่มาหรือคำขอบคุณแก่ &ldquo;&copy; ผู้ร่วมสร้างสรรค์ OpenStreetMap
           &rdquo;.
+        credit_3_attribution_guidelines: แนวทางการระบุแหล่งที่มา
         attribution_example:
           alt: ตัวอย่างการอ้างอิง OpenStreetMap บนหน้าเว็บ
           title: ตัวอย่างการอ้างอิง
@@ -1809,11 +1845,23 @@ th:
         contributors_at_stadt_wien: เมืองเวียนนา
         contributors_at_land_vorarlberg: แลนด์ ฟอร์อาร์ลแบร์ค
         contributors_at_cc_by_at_with_amendments: CC BY AT with amendments
+        contributors_cz_czechia: เช็กเกีย
+        contributors_fi_finland: ฟินแลนด์
+        contributors_fr_france: ฝรั่งเศส
+        contributors_hr_croatia: โครเอเชีย
+        contributors_si_slovenia: สโลวีเนีย
+        contributors_si_gu: หน่วยงานสำรวจและจัดทำแผนที่
+        contributors_si_mkgp: กระทรวงการเกษตร ป่าไม้ และอาหาร
+        contributors_es_credit_html: '%{spain}: ประกอบด้วยข้อมูลที่มาจากสถาบันภูมิศาสตร์แห่งชาติสเปน
+          (%{ign_link}) และระบบการทำแผนที่แห่งชาติสเปน (%{scne_link}) ซึ่งได้รับอนุญาตให้ทำซ้ำภายใต้สัญญา
+          %{cc_by_link}'
+        contributors_es_spain: สเปน
         contributors_footer_2_html: การรวมข้อมูลใน OpenStreetMap ไม่ได้หมายความว่าผู้ให้บริการข้อมูลดั้งเดิมจะรับรอง
           OpenStreetMap รับประกัน หรือรับผิดชอบใด ๆ
         infringement_title_html: การละเมิดลิขสิทธิ์
         infringement_1_html: ผู้ร่วมให้ข้อมูล OSM จะถูกเตือนไม่ให้เพิ่มข้อมูลจากแหล่งข้อมูลที่มีลิขสิทธิ์
           (เช่น Google Maps หรือแผนที่แบบพิมพ์) โดยไม่ได้รับอนุญาตอย่างชัดเจนจากเจ้าของลิขสิทธิ์
+        trademarks_title: เครื่องหมายการค้า
     index:
       js_1: ท่านกำลังใช้เบราว์เซอร์ที่ไม่รองรับจาวาสคริปต์ หรือท่านปิดใช้งานจาวาสคริปต์
       js_2: OpenStreetMap ใช้จาวาสคริปต์ในการแสดงแผนที่
@@ -1908,6 +1956,9 @@ th:
           taxiway: ทางขับเครื่องบิน
           apron: โรงซ่อมบำรุงเครื่องบิน
           admin: ขอบเขตการปกครอง
+          capital: เมืองหลวง
+          city: เมือง
+          orchard: สวนผลไม้
           forest: ป่า
           wood: ไม้
           golf: สนามกอล์ฟ
@@ -1920,18 +1971,25 @@ th:
           heathland: ทุ่งไม้พุ่ม
           lake: ทะเลสาบ
           reservoir: อ่างเก็บน้ำ
+          glacier: ธารน้ำแข็ง
+          wetland: พื้นที่ชุ่มน้ำ
           farm: ไร่นา
           brownfield: พื้นที่อุตสาหกรรมเดิม
           cemetery: สุสาน
           allotments: ที่ดินแบ่งใช้
           pitch: ลานกีฬา
           centre: ศูนย์กีฬา
+          beach: ชายหาด
           reserve: พื้นที่สงวนธรรมชาติ
           military: เขตทหาร
           school: โรงเรียน
           university: มหาวิทยาลัย
+          hospital: โรงพยาบาล
           building: อาคารสำคัญ
           station: สถานีรถไฟ
+          railway_halt: ที่หยุดรถไฟ
+          subway_station: สถานีรถไฟใต้ดิน
+          tram_stop: ที่หยุดรถราง
           summit: ยอดเขา
           peak: ยอดเขา
           tunnel: เส้นประ = อุโมงค์
@@ -1939,7 +1997,9 @@ th:
           private: พื้นที่ส่วนบุคคล
           destination: การเข้าถึงที่จุดปลายทาง
           construction: ถนนกำลังก่อสร้าง
+          bus_stop: ป้ายหยุดรถประจำทาง
           bicycle_shop: ร้านขายและเช่าจักรยาน
+          bicycle_rental: บริการให้เช่าจักรยาน
           bicycle_parking: ที่จอดจักรยาน
           toilets: ห้องน้ำ
     welcome:
@@ -2079,8 +2139,9 @@ th:
       my notes: หมายเหตุของฉัน
       my messages: ข้อความของฉัน
       my profile: ประวัติของฉัน
-      my settings: การตั้งค่าของฉัน
       my comments: ความคิดเห็นของฉัน
+      my_preferences: การตั้งค่าของฉัน
+      my_dashboard: แผงควบคุมของฉัน
       blocks on me: การถูกระงับของฉัน
       blocks by me: ผู้ใช้ที่ข้าพเจ้ากีดกัน
       send message: ส่งข้อความ
@@ -2126,10 +2187,10 @@ th:
       show:
         title: ผู้ใช้
         heading: ผู้ใช้
-        empty: ไม่พบผู้ใช้ตรงตามที่กำหนด
       page:
         confirm: ยืนยันผู้ใช้ที่เลือก
         hide: ซ่อนผู้ใช้ที่เลือก
+        empty: ไม่พบผู้ใช้ตรงตามที่กำหนด
       user:
         summary_html: '%{name} สร้างจากไอพี %{ip_address} เมื่อ %{date}'
     changeset_comments:
index 2e030d2692749b371815f730d96e53e6d4227c5b..7c91df324721423a7b6e70a17af91aba9446cd88 100644 (file)
@@ -221,9 +221,8 @@ tl:
       entry:
         full: Buong tala
   accounts:
-    edit:
+    show:
       title: Baguhin ang akawnt
-      my settings: Mga pagtatakda ko
       current email address: Pangkasalukuyang Tirahan ng E-liham
       external auth: Panlabas na Pagpapatunay
       openid:
@@ -259,9 +258,6 @@ tl:
         title: 'Mga tuntunin:'
         heading: Mga tuntunin
         heading_ct: Mga tuntunin sa taga-ambag
-        consider_pd: Bukod sa nabanggit, itinuturing ko ang mga ambag ko bilang nasa
-          Nasasaklawan ng Madla.
-        consider_pd_why: ano ba ito?
         continue: Magpatuloy
         you need to accept or decline: Mangyaring basahin at pagkaraan ay tanggipin
           o tanggihan ang bagong mga Tuntunin ng Tagapag-ambag upang makapagpatuloy.
@@ -1791,7 +1787,6 @@ tl:
       my traces: Mga Bakas Ko
       my notes: Aking Talaan
       my messages: Aking mga Mensahe
-      my settings: mga pagtatakda ko
       my comments: mga puna ko
       my_dashboard: Aking Tapalodo
       blocks on me: mga paghadlang sa akin
@@ -1845,10 +1840,10 @@ tl:
       show:
         title: Mga tagagamit
         heading: Mga tagagamit
-        empty: Walang natagpuan na katugmang mga tagagamit
       page:
         confirm: Tiyakin ang Napiling mga Tagagamit
         hide: Itago ang Napiling mga Tagagamit
+        empty: Walang natagpuan na katugmang mga tagagamit
       user:
         summary_html: Nilikha ang %{name} mula sa %{ip_address} noong %{date}
         summary_no_ip_html: Nilikha ang %{name} noong %{date}
index 5350e7939fe5e5300ca3f7f0dccf61d68d94307d..6834d54ca0aa652dcc51ca6ea68fae7bb8e8acf3 100644 (file)
@@ -24,6 +24,7 @@
 # Author: Katpatuka
 # Author: Khalvar
 # Author: Kumkumuk
+# Author: Leo
 # Author: LuCKY
 # Author: Makina88
 # Author: Mavrikant
@@ -137,7 +138,7 @@ tr:
         support_url: Destek Bağlantısı
         allow_read_prefs: kullanıcı tercihlerini okuyun
         allow_write_prefs: kullanıcı tercihlerini değiştir
-        allow_write_diary: günlük girdiler, yorumlar oluşturun ve arkadaş edinin
+        allow_write_diary: günlük kayıtları ve yorumları oluşturun
         allow_write_api: haritayı değiştir
         allow_read_gpx: özel GPS izlerini oku
         allow_write_gpx: GPS izlerini yükle
@@ -292,9 +293,8 @@ tr:
         comment: Yorum
         full: Notun tamamı
   accounts:
-    edit:
+    show:
       title: Hesabı düzenle
-      my settings: Ayarlarım
       current email address: Geçerli E-posta Adresi
       external auth: Harici Kimlik Doğrulama
       openid:
@@ -370,10 +370,6 @@ tr:
           diğer altyapıların kullanımını yönetmektedir. Lütfen bağlantıya tıklayın,
           metni okuyun ve kabul edin.
         read_tou: Kullanım Şartlarını okudum ve kabul ediyorum
-        consider_pd: Yukarıdakilere 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://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 'Bu terimleri anlamanıza yardımcı olacak bilgiler: %{readable_summary_link}
           ve bazı %{informal_translations_link}'
         readable_summary: okunabilir özet
@@ -394,6 +390,9 @@ tr:
           Daha fazla bilgi için lütfen %{terms_declined_link} sayfasına bakınız.
         terms_declined_link: bu wiki sayfası
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Tr:Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
   browse:
     deleted_ago_by_html: '%{user} tarafından %{time_ago} silindi'
     edited_ago_by_html: '%{user} tarafından %{time_ago} düzenlendi'
@@ -2866,8 +2865,6 @@ tr:
           politikası
         html: Adresiniz herkese açık olarak görüntülenmiyor, daha fazla bilgi için
           %{privacy_policy_link} sayfasına bakın.
-      consider_pd_html: Katkılarımın %{consider_pd_link} içinde olduğunu düşünüyorum.
-      consider_pd: kamu malı
       or: veya
       use external auth: veya üçüncü bir parti uygulamasıyla kaydolun
     no_such_user:
@@ -2883,7 +2880,6 @@ tr:
       my notes: Notlarım
       my messages: Mesajlarım
       my profile: Profilim
-      my settings: Ayarlarım
       my comments: Yorumlarım
       my_preferences: Tercihlerim
       my_dashboard: Gösterge Panelim
@@ -2962,13 +2958,13 @@ tr:
       show:
         title: Kullanıcılar
         heading: Kullanıcılar
-        empty: Eşleşen kullanıcı bulunamadı
       page:
         found_users:
           one: '%{count} kullanıcı bulundu'
           other: '%{count} kullanıcı bulundu'
         confirm: Seçili Kullanıcıları Doğrulayın
         hide: Seçilen Kullanıcıları Gizle
+        empty: Eşleşen kullanıcı bulunamadı
       user:
         summary_html: '%{name}, %{date} tarihinde %{ip_address} tarafından oluşturuldu.'
         summary_no_ip_html: '%{name} %{date} tarihinde oluşturuldu.'
@@ -3207,7 +3203,6 @@ tr:
         url: https://wiki.openstreetmap.org/wiki/Tr:Beginners%27_guide
       counter_warning_forum_link:
         text: topluluk size yardımcı olabilir
-        url: https://community.openstreetmap.org/
       advice: Notunuz herkese açıktır ve haritayı güncellemek için kullanılabilir,
         bu nedenle kişisel bilgilerinizi veya telif hakkıyla korunan haritalar veya
         dizin listelerinden bilgi girmeyin.
index 6938e45459c4403cf78f30566f09a99b3c4f0280..2e215b02a7fa7a4054c1332547ad947c6559b4c7 100644 (file)
@@ -235,9 +235,8 @@ tt:
         comment: Шәрех
         full: Тулы текст
   accounts:
-    edit:
+    show:
       title: Хисапъязманы үзгәртергә
-      my settings: Көйләнмәләрем
       current email address: Хәзерге электрон почта адресы
       external auth: Тышкы аутентификация
       openid:
@@ -873,7 +872,6 @@ tt:
       my diary: Көндәлегем
       my edits: Төзәтмәләрем
       my messages: Хәбәрләрем
-      my settings: Көйләнмәләрем
       send message: Хәбәр җибәрү
       diary: Көндәлек
       edits: Төзәтмәләр
index 69156c94c4657cb12a217e7cc4ddb5b585e413ac..80545d79b35b5ef93994175f4b396318d34f6980 100644 (file)
@@ -135,6 +135,7 @@ uk:
         allow_write_prefs: змінювати налаштування
         allow_write_diary: створювати записи у щоденнику та залишати коментарі
         allow_write_api: змінювати мапу
+        allow_write_changeset_comments: коментувати набори змін
         allow_read_gpx: отримувати приватні GPS-треки.
         allow_write_gpx: надсилати GPS-треки на сервер
         allow_write_notes: змінювати нотатки
@@ -315,9 +316,9 @@ uk:
         comment: Коментар
         full: Повний текст
   accounts:
-    edit:
+    show:
       title: Редагувати обліковий запис
-      my settings: Налаштування
+      my_account: Обліковий запис
       current email address: Поточна адреса електронної пошти
       external auth: Стороння автентифікація
       openid:
@@ -333,6 +334,8 @@ uk:
           Надбанням.
         link: https://wiki.openstreetmap.org/wiki/Uk:Open_Database_License/Contributor_Terms
         link text: що це?
+        not_agreed_with_pd: Ви не заявили, що ви вважаєте свій внесок Суспільним Надбанням.
+        pd_link_text: заявляю
       save changes button: Зберегти зміни
       delete_account: Видалити обліковий запис…
     go_public:
@@ -396,10 +399,6 @@ uk:
           іншої інфраструктури, що надається за підтримки OSMF. Натисніть на посилання,
           прочитайте та погодьтесь з текстом.'
         read_tou: Я уважно ознайомився та згоден з Умовами використання
-        consider_pd: На додачу до зазначеного, прошу вважати мій внесок суспільним
-          надбанням
-        consider_pd_why: що це?
-        consider_pd_why_url: https://wiki.openstreetmap.org/wiki/Uk:Чому_я_хочу,_щоб_мої_внески_були_суспільним_надбанням
         guidance_info_html: 'Інформація, що допоможе зрозуміти ці терміни: %{readable_summary_link}
           та %{informal_translations_link}'
         readable_summary: простою мовою
@@ -420,6 +419,20 @@ uk:
           Докладніше дивіться %{terms_declined_link}.
         terms_declined_link: цю вікі-сторінку.
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Uk:Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        title: Вважайте, що мій внесок є Суспільним Надбанням
+        consider_pd: Я вважаю, що мій внесок є суспільним надбанням
+        consider_pd_why: Чому я мав(ла) би хотіти, щоб мій внесок став Суспільним
+          Надбанням?
+        consider_pd_why_url: https://wiki.openstreetmap.org/wiki/Uk:Чому_я_хочу,_щоб_мої_внески_були_суспільним_надбанням
+        confirm: Підтвердити
+      create:
+        successfully_declared: Ви заявили, що вважаєте, що ваші правки є Суспільним
+          Надбанням.
+        already_declared: Ви вже заявили, що вважаєте, що ваші правки є Суспільним
+          Надбанням.
+        did_not_confirm: Ви не підтвердили, що вважаєте свої правки Суспільним Надбанням.
   browse:
     deleted_ago_by_html: Вилучив(ла) %{time_ago} %{user}
     edited_ago_by_html: Змінено %{user} %{time_ago}
@@ -1071,6 +1084,7 @@ uk:
           bridleway: Дорога для їзди верхи
           bus_guideway: Рейковий автобус
           bus_stop: Автобусна зупинка
+          busway: Дорога для автобусів
           construction: Будівництво автомагістралі
           corridor: Коридор
           crossing: Перехід
@@ -1643,6 +1657,7 @@ uk:
       reports: Скарги
       last_updated: Останнє оновлення
       last_updated_time_ago_user_html: '%{user} %{time_ago}'
+      reporting_users: Повідомлення про користувачів
       reports_count:
         one: '%{count} Скарга'
         few: '%{count} Скарги'
@@ -1685,6 +1700,8 @@ uk:
       reopened: Статус проблеми був змінений на 'Відкрито'
     comments:
       comment_from_html: Коментар від %{user_link}, %{comment_created_at}
+      reassign_to_moderators: Перепризначити звернення Модераторам
+      reassign_to_administrators: Перепризначити звернення Адміністраторам
     reports:
       reported_by_html: Повідомлено як %{category}, %{user}, %{updated_at}
     helper:
@@ -1763,6 +1780,13 @@ uk:
     communities: Спільноти
     learn_more: Докладніше
     more: Більше
+    offline_flash:
+      osm_offline: База даних OpenStreetMap наразі працює в режимі офлайн, поки проводяться
+        роботи з технічного обслуговування.
+      osm_read_only: База даних OpenStreetMap наразі працює в режимі тільки для читання,
+        поки проводяться роботи з технічного обслуговування.
+      expected_restore_html: Очікується, що роботу буде відновлено через %{time}.
+      announcement: Ознайомитися з оголошенням можна тут.
   user_mailer:
     diary_comment_notification:
       description: 'Запис у щоденнику OpenStreetMap #%{id}'
@@ -2099,7 +2123,7 @@ uk:
       failure: Неможливо зберегти оновлення профілю.
   sessions:
     new:
-      tab_title: Ð\9bаÑ\81каво Ð¿Ñ\80оÑ\81имо
+      tab_title: Ð\92Ñ\85Ñ\96д
       login_to_authorize_html: Увійдіть до OpenStreetMap, щоб отримати доступ до %{client_app_name}.
       email or username: Ел. пошта або прізвисько
       password: Пароль
@@ -2383,6 +2407,8 @@ uk:
       not_public_description_html: 'Ви не можете більше анонімно редагувати мапу.
         Ви можете зробити ваші редагування загальнодоступними тут: %{user_page}.'
       user_page_link: сторінка учасника
+      anon_edits_html: '%{link}'
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Uk:Анонімне_редагування
       anon_edits_link_text: З’ясувати в чому справа.
     edit:
       id_not_configured: iD не був налаштований
@@ -2785,8 +2811,8 @@ uk:
         погоджуватись, але ви повинні переглянути їх.
     settings_menu:
       account_settings: Налаштування облікового запису
-      oauth2_applications: Ð·астосунки OAuth 2
-      oauth2_authorizations: Ð°вторизації OAuth 2
+      oauth2_applications: Ð\97астосунки OAuth 2
+      oauth2_authorizations: Ð\90вторизації OAuth 2
       muted_users: Стишені учасники
     auth_providers:
       openid_url: OpenID URL
@@ -2840,10 +2866,12 @@ uk:
       write_prefs: Змінювати налаштування
       write_diary: Створювати записи у щоденнику та залишати коментарі
       write_api: Змінювати мапу
+      write_changeset_comments: Коментувати набори змін
       read_gpx: Отримувати приватні GPS-треки
       write_gpx: Завантажувати GPS-треки
       write_notes: Змінювати нотатки
       write_redactions: Виконувати очищення даних
+      write_blocks: Створювати та скасовувати блокування користувачів
       read_email: Отримувати адресу е-пошти
       consume_messages: Прочитати, оновити статус та видалити повідомлення користувача
       send_messages: Надіслати приватне повідомлення іншим користувачам
@@ -2895,7 +2923,7 @@ uk:
       title: Авторизовані застосунки
       application: Застосунок
       permissions: Дозволи
-      last_authorized: Ð\9eÑ\81Ñ\82аннÑ\96й Ð°Ð²Ñ\82оÑ\80изований
+      last_authorized: Ð\92 Ð¾Ñ\81Ñ\82аннÑ\94 Ð°Ð²Ñ\82оÑ\80изовано
       no_applications_html: У вас ще немає застосунків авторизованих через %{oauth2}.
     application:
       revoke: Відкликати доступ
@@ -2939,8 +2967,6 @@ uk:
           електронної пошти
         html: Ваша адреса ніколи не показуватиметься публічно. Ознайомтесь з нашою
           %{privacy_policy_link} для отримання докладної інформації.
-      consider_pd_html: Я вважаю свій внесок %{consider_pd_link}.
-      consider_pd: суспільним надбанням
       or: або
       use external auth: або використовуйте, облікові записи з інших ресурсів для
         входу
@@ -2957,7 +2983,7 @@ uk:
       my notes: Мої нотатки
       my messages: Повідомлення
       my profile: Профіль
-      my settings: Налаштування
+      my_account: Обліковий запис
       my comments: Мої коментарі
       my_preferences: Вподобання
       my_dashboard: Інфо панель
@@ -3040,7 +3066,16 @@ uk:
       show:
         title: Учасники
         heading: Учасники
-        empty: Не знайдено учасників відповідно до критеріїв пошуку
+        select_status: Обрати статус
+        states:
+          pending: В очікуванні
+          active: Активний
+          confirmed: Підтверджено
+          suspended: Призупинено
+          deleted: Вилучено
+        name_or_email: Імʼя або електронна пошта
+        ip_address: IP-адреса
+        search: Пошук
       page:
         found_users:
           one: знайдено %{count} користувача
@@ -3049,6 +3084,7 @@ uk:
           other: 'знайдено '
         confirm: Підтвердити вибір учасників
         hide: Сховати вибраних учасників
+        empty: Не знайдено учасників відповідно до критеріїв пошуку
       user:
         summary_html: '%{name} зареєстровано з %{ip_address}, %{date}'
         summary_no_ip_html: '%{name} зареєстровано %{date}'
@@ -3259,6 +3295,8 @@ uk:
       open_title: 'Неопрацьована нотатка #%{note_name}'
       closed_title: 'Опрацьована нотатка #%{note_name}'
       hidden_title: 'Прихована нотатка #%{note_name}'
+      description_when_author_is_deleted: вилучено
+      description_when_there_is_no_opening_comment: невідомо
       event_opened_by_html: Створив(ла) %{user} %{time_ago}
       event_opened_by_anonymous_html: Створено анонімом %{time_ago}
       event_commented_by_html: Коментар від %{user} %{time_ago}
@@ -3499,6 +3537,8 @@ uk:
           ninth: 9й
           tenth: 10й
       time: Час
+      download: Завантажити маршрут як GeoJSON
+      filename: маршрут
     query:
       node: Точка
       way: Лінія
@@ -3513,6 +3553,9 @@ uk:
       show_address: Показати адресу
       query_features: Отримати об’єкти
       centre_map: Центрувати мапу тут
+    home:
+      marker_title: Моє розташування
+      not_set: Для вашого облікового запису не вказано його розташування
   redactions:
     edit:
       heading: Змінити редакцію
index f5b78bb8ffdaf6eca7d75c166c078b29579e6b34..3c727724d20b1302a95b10b74a15769d087a51ad 100644 (file)
@@ -251,9 +251,8 @@ vi:
         comment: Bình luận
         full: Ghi chú đầy đủ
   accounts:
-    edit:
+    show:
       title: Chỉnh sửa tài khoản
-      my settings: Tùy chọn
       current email address: Địa chỉ Thư điện tử Hiện tại
       external auth: Xác minh Bên ngoài
       openid:
@@ -331,9 +330,6 @@ vi:
           sở hạ tầng khác do OSMF cung cấp. Xin vui lòng mở liên kết và đọc và chấp
           nhận thỏa thuận.
         read_tou: Tôi đã đọc và chấp nhận Điều khoản sử dụng
-        consider_pd: Bên ngoài các điều bên trên, tôi coi rằng các đóng góp của tôi
-          thuộc về phạm vi công cộng
-        consider_pd_why: đây là gì?
         guidance_info_html: 'Thông tin giúp hiểu các thuật ngữ này: a %{readable_summary_link}
           và một số %{informal_translations_link}'
         readable_summary: bản tóm tắt dễ đọc
@@ -2571,8 +2567,6 @@ vi:
           địa chỉ thư điện tử
         html: Địa chỉ thư điện tử không được hiển thị công khai, xem thêm thông tin
           trong %{privacy_policy_link} của chúng tôi.
-      consider_pd_html: Tôi coi những đóng góp của mình thuộc về %{consider_pd_link}.
-      consider_pd: phạm vi công cộng
       or: hoặc
       use external auth: hoặc mở tài khoản qua dịch vụ bên thứ ba
     no_such_user:
@@ -2588,7 +2582,6 @@ vi:
       my notes: Ghi chú của Tôi
       my messages: Hộp Tin nhắn
       my profile: Trang của Tôi
-      my settings: Tùy chọn
       my comments: Bình luận của Tôi
       my_preferences: Tùy chỉnh
       my_dashboard: Bảng điều khiển
@@ -2666,12 +2659,12 @@ vi:
       show:
         title: Người dùng
         heading: Người dùng
-        empty: Không tìm thấy người dùng.
       page:
         found_users:
           other: Đã tìm thấy %{count} người dùng
         confirm: Xác nhận những Người dùng Được chọn
         hide: Ẩn những Người dùng Được chọn
+        empty: Không tìm thấy người dùng.
       user:
         summary_html: '%{name} do %{ip_address} mở ngày %{date}'
         summary_no_ip_html: '%{name} mở ngày %{date}'
index 44527ddf361e23fdc4fa8c86cd5ba82af7e702a2..791b4d8af2ff8504d177287b711767c14a1c0662 100644 (file)
@@ -19,14 +19,14 @@ xmf:
         create: კომენტარი
       diary_entry:
         create: გუმობჟინაფა
-        update: á\83\92á\83\9dá\83\90á\83®á\83\90á\83\9aá\83\90á\83¤
+        update: á\83\9bá\83\9dá\83\90á\83®á\83\90á\83\9aá\83\94á\83\91
       issue_comment:
         create: კომენტარიშ გეძინა
       message:
         create: ჯღონუა
       oauth2_application:
         create: რეგისტრაცია
-        update: á\83\92á\83\9dá\83\90á\83®á\83\90á\83\9aá\83\90á\83¤
+        update: á\83\9bá\83\9dá\83\90á\83®á\83\90á\83\9aá\83\94á\83\91
       redaction:
         create: მიშათინუაშ გოჭყაფა
         update: მიშათინუაშ ჩუალა
@@ -37,6 +37,10 @@ xmf:
         create: ბლოკირაფაშ გოჭყაფა
         update: ბლოკირაფაშ გოახალაფა
   activerecord:
+    errors:
+      models:
+        user_mute:
+          is_already_muted: უკვე აკორანგვილი რე
     models:
       acl: ხემეჭირნაფაშ კონტროლიშ ერკებული
       changeset: თირაფეფიშ პაკეტი
@@ -50,6 +54,7 @@ xmf:
       message: გინაფა
       node: ჭურჭული
       node_tag: ჭურჭულიშ ხინტკი
+      note: ხვილაფა
       old_node: ჯვეში ჭურჭული
       old_node_tag: ჭურჭულიშ ჯვეში ხინტკი
       old_relation: ჯვეში ურთიართობა
@@ -83,6 +88,7 @@ xmf:
         allow_write_diary: დღარეფიშ დინნაჭარეფიშ გოჭყაფა, კომენტირაფა დო მაჸალეეფიშ
           გეძინა
         allow_write_api: რუკაშ თირუა
+        allow_write_changeset_comments: თირუეფიშ პაკეტეფიშ კომენტირება
         allow_read_gpx: კერზო GPS-ტრეკეფიშ კითხირი
         allow_write_gpx: GPS-ტრეკეფიშ ეხარგუა
         allow_write_notes: მოღანკუეფიშ მიშათინუა
@@ -224,9 +230,8 @@ xmf:
         comment: კომენტარი
         full: ედომუშამი ტექსტი
   accounts:
-    edit:
+    show:
       title: ანგარიშიშ რედაქტირაფა
-      my settings: ჩქიმი პარამეტრეფი
       current email address: ელ-ფოსტაშ ასეიანი მიოწურაფუ
       external auth: გალენი აუთენტიფიკაცია
       openid:
@@ -260,8 +265,27 @@ xmf:
         retain_email: თქვან ელ-ფოშტა დიჩუალუაფუ.
         confirm_delete: დასურო გონებჷნანო?
         cancel: გოუქვაფა
+    terms:
+      show:
+        title: აპიჯალეფი
+        heading: წოროხანდაშ აპიჯალეფი
+        heading_ct: წოროხანდაშ აპიჯალეფი
+        continue: გაგჷნძორაფა
+        cancel: გოუქვაფა
+        legale_names:
+          france: საფრანგეთი
+          italy: იტალია
+          rest_of_world: დოსკილადირი მოსოფელი
+      terms_declined_flash:
+        terms_declined_link: თენა რე ვიკი ხასჷლა
+    pd_declarations:
+      show:
+        confirm: დოდასურება
   browse:
+    deleted_ago_by_html: დილასჷ %{time_ago} მახვარებუქ %{user}
+    edited_ago_by_html: დარედაქტირჷ %{time_ago} მახვარებუქ %{user}
     version: ვერსია
+    redacted_version: ვერსიაშ რედაქტირაფა
     in_changeset: თირაფეფიშ პაკეტი
     anonymous: ანონიმი
     no_comment: (უკომენტარე)
@@ -335,6 +359,7 @@ xmf:
       wikimedia_commons_link: ელემენტი %{page} ვიკიოწკარუეს
       telephone_link: რეკუა %{phone_number}
       colour_preview: ფერი %{colour_value} გიწოთოლორაფა
+      email_link: ელექტრონული ფოშტა %{email}
     query:
       title: მუ რე თაქ?
       introduction: უახოლაში ობიექტეფიშ ოგორალო ქეგუნჭირით რუკა.
@@ -348,6 +373,8 @@ xmf:
         title_html: 'ღოზიშ ისტორია: %{name}'
       relation:
         title_html: 'ურთიართობაშ ისტორია: %{name}'
+    actions:
+      view_redacted_data: რედაქტირებული მუნაჩემეფშა გინოჯინა
   changeset_comments:
     feeds:
       comment:
@@ -385,6 +412,11 @@ xmf:
       join_discussion: გემშართით სისტემაშა, თიშენ ნამჷ-და, სხუნუას ქაკათათინ
       still_open: თირუეფიშ პაკეტი დიო ღილე რე. სხუნუა ხემიოჭირინაფუ იჸი, მუჭო თირუეფიშ
         პაკეტი დიკილუნ.
+      subscribe: გიშაჭარუა
+      unsubscribe: გიშაჭარუაშ გოუქვაფა
+      hide_comment: ტყობინაფა
+      unhide_comment: ძირაფა
+      comment: კომენტირება
       changesetxml: თირუეფიშ პაკეტიშ XML
       osmchangexml: osmChange XML
     paging_nav:
@@ -428,6 +460,8 @@ xmf:
     show:
       title: '%{user}შ დღარი | %{title}'
       user_title: '%{user}შ დღარი'
+      subscribe: გიშაჭარუა
+      unsubscribe: გიშაჭარუაშ გოუქვაფა
       leave_a_comment: კომენტარიშ დოტება
       login_to_leave_a_comment_html: '%{login_link}, კომენტარიშ დატებელო'
       login: მიშულა
@@ -459,14 +493,28 @@ xmf:
         title: OpenStreetMap დღარიშ დინნაჭარეფი გეჸვენჯი ნინაშა %{language_name}
       all:
         title: OpenStreetMap დღარიშ დინნაჭარეფი
+  doorkeeper:
+    flash:
+      applications:
+        create:
+          notice: აპლიკაცია რეგისტრირებული რე.
+    scopes:
+      profile: თქვანი ანგარიშიშ ინფორმაციაშ ძირაფა
   errors:
     contact:
       contact: კონტაქტი
+    bad_request:
+      title: ჩილათერი მოთხირი
+    forbidden:
+      title: ჭირინაფა გოხურგელი
     internal_server_error:
       title: აპლიკაციაშ ჩილათა
     not_found:
       title: ფაილქ ვეგორჷ
   geocoder:
+    search:
+      title:
+        latlon: დინოხოლენი
     search_osm_nominatim:
       prefix:
         aerialway:
@@ -485,6 +533,7 @@ xmf:
           terminal: აეროპორტიშ ტერმინალი
           windsock: ბორიამაძირაფალი
         amenity:
+          animal_shelter: ჩხოლარეფიშ ხვაშია
           arts_centre: ხელუანაფაშ ცენტრი
           atm: ბანკომატი
           bank: ბანკი
@@ -493,6 +542,7 @@ xmf:
           bench: დახუნალი
           bicycle_parking: ველოსიპედეფიშ დგჷმილი
           bicycle_rental: ველოსპიედეფიშ გაქირაფა
+          bicycle_repair_station: ველოსიპეტეფიშ აკანწყუალი დგჷმილი
           biergarten: ლუდიშ ბაღი
           blood_bank: ზისხირიშ ბანკი
           boat_rental: ნიშეფიშ გაქირება
@@ -532,7 +582,10 @@ xmf:
           kindergarten: საბაღანო ბაღი
           language_school: ნინაშ სკოლა
           library: ბიბლიოთეკა
+          loading_dock: ოხარგუე დოკი
+          love_hotel: ჸოროფაშ სასუმარო
           marketplace: ბაზარი
+          mobile_money_agent: მობილური ფარაშ აგენტი
           monastery: მონასტერი
           money_transfer: ფარაშ ჯღონუა
           motorcycle_parking: მოტოციკლეტიშ პარკირაფა
@@ -625,7 +678,9 @@ xmf:
           ruins: აკოცჷმილი დგჷმილი
           school: სკოლა
           service: ონინალე დგჷმილი
+          stable: ცხენსაბეკი
           static_caravan: ქერვანი
+          sty: ორეჯე
           temple: ოხიდა
           terrace: აკიბი
           train_station: მახინწალიშ დგჷმილი
@@ -633,6 +688,7 @@ xmf:
           warehouse: ოწკარუე
           "yes": ნოდგჷმი
         club:
+          scout: სკაუტეფიშ ბაზა
           sport: სპორტული კლუბი
           "yes": კლუბი
         craft:
index 4c5ac358b4766682d7055932f38fbeb634df1e7f..2c67e5237ce66bf3a1d175bb56d85b83cc26af6b 100644 (file)
@@ -77,6 +77,7 @@
 # Author: 七八年再来一次
 # Author: 乌拉跨氪
 # Author: 予弦
+# Author: 人间百态
 # Author: 列维劳德
 # Author: 夢蝶葬花
 # Author: 孟天皓
@@ -173,6 +174,7 @@ zh-CN:
         allow_write_prefs: 修改其用户偏好
         allow_write_diary: 创建日记和评论
         allow_write_api: 修改地图
+        allow_write_changeset_comments: 评论变更集
         allow_read_gpx: 读取他们的私人GPS轨迹
         allow_write_gpx: 上传GPS轨迹
         allow_write_notes: 修改注记
@@ -322,9 +324,9 @@ zh-CN:
         comment: 评论
         full: 完整注记
   accounts:
-    edit:
+    show:
       title: 编辑账户
-      my settings: 我的设置
+      my_account: 我的账户
       current email address: 当前电子邮件地址
       external auth: 外部身份验证
       openid:
@@ -379,9 +381,6 @@ zh-CN:
         read_ct: 我已了解并同意贡献者条款
         tou_explain_html: 这些%{tou_link}适用于网站方面的使用,与其它由OSMF提供的基础内容。请点击链接,阅读并同意该条款。
         read_tou: 我已阅读并同意使用条款
-        consider_pd: 除了上述协议,我同意将我的贡献释于公有领域
-        consider_pd_why: 这是什么?
-        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 有助于理解这些术语的信息:一个 %{readable_summary_link} 和一些 %{informal_translations_link}
         readable_summary: 人类可读的摘要
         informal_translations: 非正式翻译
@@ -399,6 +398,12 @@ zh-CN:
         terms_declined_html: 我们很遗憾您已决定不接受新的贡献者条款。有关详细信息,请参阅%{terms_declined_link}。
         terms_declined_link: 此wiki页面
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: 确认
+      create:
+        successfully_declared: 您已成功声明您的编辑属于公共领域。
   browse:
     deleted_ago_by_html: 由 %{user} 删除于 %{time_ago}
     edited_ago_by_html: 由%{user} 编辑于 %{time_ago}
@@ -606,13 +611,17 @@ zh-CN:
     popup:
       your location: 您的位置
       nearby mapper: 附近绘图者
+      following: 关注中的用户
     show:
       title: 我的综合面板
       no_home_location_html: '%{edit_profile_link}并设定你的家庭地址来查看附近的用户。'
       edit_your_profile: 编辑你的档案
+      followings: 关注中的用户
+      no followings: 您还没有关注任何用户。
       nearby users: 其他附近的用户
       no nearby users: 附近没有在进行制图的用户。
       followed_changesets: 变更集
+      followed_diaries: 日记条目
       nearby_changesets: 附近用户的变更集
       nearby_diaries: 附近用户的日记文章
   diary_entries:
@@ -623,6 +632,7 @@ zh-CN:
       use_map_link: 使用地图
     index:
       title: 用户日记
+      title_followed: 关注中的用户的日记
       title_nearby: 附近用户的日记
       user_title: '%{user}的日记'
       in_language_title: '%{language}日记文章'
@@ -738,6 +748,14 @@ zh-CN:
     not_found:
       title: 文件未找到
       description: 在 OpenStreetMap 服务器上找不到该名称的文件、目录或API 操作(HTTP 404)
+  follows:
+    show:
+      follow:
+        heading: 您想要关注%{user}吗?
+        button: 关注用户
+      unfollow:
+        heading: 您想要取消关注%{user}吗?
+        button: 取消关注用户
   geocoder:
     search:
       title:
@@ -990,6 +1008,7 @@ zh-CN:
           bridleway: 马道
           bus_guideway: 导轨公交车道
           bus_stop: 公共汽车站
+          busway: 公交专用道
           construction: 在建公路
           corridor: 走廊
           crossing: 十字路口
@@ -1560,9 +1579,11 @@ zh-CN:
       reports: 举报
       last_updated: 最后更新
       last_updated_time_ago_user_html: 由 %{user} 于 %{time_ago}
+      reporting_users: 举报用户
       reports_count:
         one: '%{count}个举报'
         other: '%{count}个举报'
+      more_reporters: 以及%{count}个
       reported_item: 举报项
       states:
         ignored: 已忽略
@@ -1670,6 +1691,8 @@ zh-CN:
     communities: 社区
     learn_more: 了解更多
     more: 更多
+    offline_flash:
+      announcement: 您可以在此阅读公告。
   user_mailer:
     diary_comment_notification:
       description: 'OpenStreetMap 日记 #%{id}'
@@ -1971,6 +1994,9 @@ zh-CN:
       preview: 预览
       help: 帮助
     pagination:
+      changeset_comments:
+        older: 较旧评论
+        newer: 较新评论
       diary_comments:
         older: 较旧评论
         newer: 较新评论
@@ -2158,7 +2184,7 @@ zh-CN:
       not_public: 您尚未公开您的编辑。
       not_public_description_html: 您将无法再编辑此地图,直到您做到如上所述。您可以通过您的%{user_page}公开您的编辑。
       user_page_link: 用户页面
-      anon_edits_link: http://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
       anon_edits_link_text: 了解为什么这很重要。
     edit:
       id_not_configured: iD 尚未配置
@@ -2548,10 +2574,12 @@ zh-CN:
       write_prefs: 修改用户首选项
       write_diary: 创建日记和评论
       write_api: 修改地图
+      write_changeset_comments: 评论变更集
       read_gpx: 读取私人GPS轨迹
       write_gpx: 上传GPS轨迹
       write_notes: 修改备注
       write_redactions: 隐删地图数据
+      write_blocks: 创建与撤销用户封禁
       read_email: 查看用户邮箱地址
       consume_messages: 读取、更新状态和删除用户留言
       send_messages: 向其他用户发送私信
@@ -2629,9 +2657,6 @@ zh-CN:
         privacy_policy: 隐私政策
         privacy_policy_title: OSM基金会隐私政策包括电子邮件地址部分
         html: 您的地址不会公开显示,请参阅我们的%{privacy_policy_link}了解更多信息。
-      consider_pd_html: 我认为我的贡献应在 %{consider_pd_link} 中。
-      consider_pd: 公有领域
-      consider_pd_url: https://wiki.osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
       or: 或
       use external auth: 或使用第三方服务登录
     no_such_user:
@@ -2646,7 +2671,7 @@ zh-CN:
       my notes: 我的注记
       my messages: 我的消息
       my profile: 我的资料
-      my settings: 我的设置
+      my_account: 我的账户
       my comments: 我的评论
       my_preferences: 我的偏好
       my_dashboard: 我的综合面板
@@ -2660,6 +2685,8 @@ zh-CN:
       edits: 编辑
       traces: 轨迹
       notes: 地图注记
+      unfollow: 取消关注
+      follow: 关注
       mapper since: 绘图者注册于:
       last map edit: 最后地图编辑于:
       no activity yet: 尚无活动
@@ -2724,21 +2751,28 @@ zh-CN:
       show:
         title: 用户
         heading: 用户
-        empty: 未找到匹配用户
+        select_status: 选择状态
+        ip_address: IP地址
+        search: 搜索
       page:
         found_users:
           one: 找到%{count}位用户
           other: 找到%{count}位用户
         confirm: 确认所选用户
         hide: 隐藏所选用户
+        empty: 未找到匹配用户
       user:
         summary_html: '%{name}在%{date}从%{ip_address}创建'
         summary_no_ip_html: '%{name} 创建于 %{date}'
     comments:
       index:
+        heading_html: '%{user} 的评论'
         changesets: 变更集
+        diary_entries: 日记条目
         no_comments: 没有评论
     changeset_comments:
+      index:
+        title: '%{user} 添加的变更集评论'
       page:
         changeset: 变更集
         when: 时间
@@ -2748,6 +2782,8 @@ zh-CN:
         title: '%{user} 已添加日记评论'
       page:
         post: 发布
+        when: 时间
+        comment: 评论
     suspended:
       title: 帐户已暂停
       heading: 帐户已暂停
@@ -2907,6 +2943,7 @@ zh-CN:
       open_title: '未解决注记 #%{note_name}'
       closed_title: '已解决注记 #%{note_name}'
       hidden_title: '隐藏注记 #%{note_name}'
+      description_when_author_is_deleted: 已删除
       event_opened_by_html: 由%{user}%{time_ago}创建
       event_opened_by_anonymous_html: 由匿名用户%{time_ago}创建
       event_commented_by_html: 来自%{user}%{time_ago}的评论
@@ -2947,7 +2984,6 @@ zh-CN:
         url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide
       counter_warning_forum_link:
         text: 社区可以帮助你
-        url: https://community.openstreetmap.org/
       advice: 您的注释会公开,并可能用于更新地图,所以不要输入个人信息,或是来自版权保护地图的信息或目录列表。
       add: 添加注记
     new_readonly:
@@ -3122,6 +3158,8 @@ zh-CN:
           ninth: 第9
           tenth: 第10
       time: 时间
+      download: 以GeoJSON格式下载路线
+      filename: 路线
     query:
       node: 节点
       way: 路径
@@ -3136,6 +3174,8 @@ zh-CN:
       show_address: 显示地址
       query_features: 查询要素
       centre_map: 将此处置于地图中间
+    home:
+      marker_title: 我家位置
   redactions:
     edit:
       heading: 编辑隐删
index 70bf0412b4c05310ce99177612ec110c4ee9bd4a..5088446c6231d27eb9b5d7e03e8465b3ddb7b5ce 100644 (file)
@@ -219,9 +219,8 @@ zh-HK:
       entry:
         comment: 評論
   accounts:
-    edit:
+    show:
       title: 編輯帳號
-      my settings: 我的設定
       current email address: 現在的電郵地址
       external auth: 外部認證
       openid:
@@ -266,7 +265,6 @@ zh-HK:
         heading: 條款
         heading_ct: 貢獻者條款
         read_tou: 我已經閱讀過並同意使用條款
-        consider_pd: 除上述條款之外,我會把我的貢獻釋放到公共領域(Public Domain)
         continue: 繼續
         legale_select: 請選擇您的居住地:
         legale_names:
@@ -1138,7 +1136,6 @@ zh-HK:
       body: 抱歉,沒有名為%{user}的用戶。請檢查您的拼寫,或者您可能按到了錯誤的連結。
     show:
       my notes: 我的註記
-      my settings: 我的設定
       notes: 地圖註記
       report: 舉報此用戶
     lists:
index 93cd128d4a79908b66f5d35d6cf7c7872cf3ba77..d737c74772269642baf9647527432d084b77bd4c 100644 (file)
@@ -137,6 +137,7 @@ zh-TW:
         allow_write_prefs: 修改使用者偏好設定
         allow_write_diary: 建立日記、評論
         allow_write_api: 修改地圖
+        allow_write_changeset_comments: 在變更集上留言
         allow_read_gpx: 讀取個人 GPS 軌跡
         allow_write_gpx: 上傳 GPS 軌跡
         allow_write_notes: 修改註記
@@ -262,7 +263,7 @@ zh-TW:
         reopened_at_html: 於%{when}重新開啟
         reopened_at_by_html: 於%{when}由%{user}重新開啟
       rss:
-        title: OpenStreetMap 註記
+        title: 開放街圖註記
         description_all: 報告、評論、或關閉的註記清單
         description_area: 在你的區域[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]所報告、評論或關閉的註記的清單
         description_item: 註記 %{id} 的 RSS feed
@@ -274,9 +275,9 @@ zh-TW:
         comment: 評論
         full: 註記原文
   accounts:
-    edit:
+    show:
       title: 編輯帳號
-      my settings: 我的設定值
+      my_account: 我的帳號
       current email address: 目前的電子郵件地址
       external auth: 外部認證
       openid:
@@ -309,10 +310,10 @@ zh-TW:
         title: 刪除我的帳號
         warning: 警告!帳號刪除程序不可逆轉,無法復原。
         delete_account: 刪除帳號
-        delete_introduction: 你可以使用下方按鈕來刪除你的 OpenStreetMap 帳號。並請留意以下細節:
+        delete_introduction: 你可以使用下方按鈕來刪除你的開放街圖帳號。並請留意以下細節:
         delete_profile: 你的個人檔案資訊,包含:例如你的頭像圖片、描述,以及住家位置將會移除。
         delete_display_name: 你的顯示名稱將會移除,並且會被其他帳號拿來重覆使用。
-        retain_caveats: 然而,即使你的帳號被刪除後,一些關於你的資訊仍會繼續保留在 OpenStreetMap 裡:
+        retain_caveats: 然而,即使你的帳號被刪除後,一些關於你的資訊仍會繼續保留在開放街圖裡:
         retain_edits: 你對於地圖資料庫的編輯次數,假如存在,這將會繼續保留。
         retain_traces: 若有你上傳過的軌跡資料內容,這將會繼續保留。
         retain_diary_entries: 若有你的日誌項目與日誌評論內容,這將會繼續保留。
@@ -332,9 +333,6 @@ zh-TW:
         read_ct: 我已閱讀過並同意以上的貢獻者條款
         tou_explain_html: 這些%{tou_link}適用於網站方面的使用,與其它由 OSMF 提供的基礎內容。請在連結上點擊,閱讀並同意該文字。
         read_tou: 我已經閱讀過並同意使用條款
-        consider_pd: 除上述內容之外,我同意將我的貢獻放到公共領域
-        consider_pd_why: 這是什麼?
-        consider_pd_why_url: https://wiki.osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
         guidance_info_html: 有助於理解這些術語的資訊:一個%{readable_summary_link}和一些%{informal_translations_link}
         readable_summary: 人類可讀的摘要
         informal_translations: 非正式翻譯
@@ -352,6 +350,10 @@ zh-TW:
         terms_declined_html: 我們很遺憾你已決定不接受新的貢獻者條款。有關詳細資訊,請參閱 %{terms_declined_link}。
         terms_declined_link: 此 wiki 頁面
         terms_declined_url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
+    pd_declarations:
+      show:
+        consider_pd_why_url: https://wiki.osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
+        confirm: 確認
   browse:
     deleted_ago_by_html: 由%{user}%{time_ago}刪除
     edited_ago_by_html: 由%{user}%{time_ago}編輯
@@ -417,6 +419,7 @@ zh-TW:
         relation: 關聯
     start_rjs:
       feature_warning: 載入 %{num_features} 項物件的資料,可能會使你的瀏覽器延遲或無法回應。你確定要顯示這些資料嗎?
+      feature_error: 無法載入圖徵:%{message}
       load_data: 載入資料
       loading: 正在載入…
     tag_details:
@@ -482,8 +485,8 @@ zh-TW:
         comment: '由 %{author} 對變更集 #%{changeset_id} 發表的新評論'
         commented_at_by_html: 於%{when}由%{user}更新
       show:
-        title_all: OpenStreetMap 變更集討論
-        title_particular: OpenStreetMap 變更集 %{changeset_id} 討論
+        title_all: 開放貼圖變更集討論
+        title_particular: 開放街圖變更集 %{changeset_id} 討論
       timeout:
         sorry: 很抱歉,你請求的變更集評論過長無法讀取
   changesets:
@@ -494,6 +497,7 @@ zh-TW:
       title: 變更集
       title_user: '%{user} 的變更集'
       title_user_link_html: '%{user_link} 的變更集'
+      title_followed: 追蹤者的變更集
       title_nearby: 附近使用者的變更集
       empty: 查無變更集。
       empty_area: 此區域沒有變更集。
@@ -561,12 +565,17 @@ zh-TW:
     popup:
       your location: 你的位置
       nearby mapper: 附近的製圖者
+      following: 追蹤者
     show:
       title: 我的功能面板
       no_home_location_html: '%{edit_profile_link}並編輯你的家位置,來查看附近的使用者。'
       edit_your_profile: 編輯你的個人檔案
+      followings: 追蹤者
+      no followings: 您尚未追蹤任何使用者。
       nearby users: 其他附近的使用者
       no nearby users: 附近沒有已加入製圖的使用者。
+      followed_changesets: 變更集
+      followed_diaries: 日記條目
       nearby_changesets: 附近使用者的變更集
       nearby_diaries: 附近使用者的日記項目
   diary_entries:
@@ -577,6 +586,7 @@ zh-TW:
       use_map_link: 使用地圖
     index:
       title: 使用者日記
+      title_followed: 追蹤者的日記
       title_nearby: 附近的使用者的日記
       user_title: '%{user} 的日記'
       in_language_title: 語言為%{language}的日記項目
@@ -626,14 +636,14 @@ zh-TW:
       location: 位置:
     feed:
       user:
-        title: '%{user} 的 OpenStreetMap 日記項目'
-        description: '%{user} 最近的 OpenStreetMap 日記項目'
+        title: '%{user} 的開放街圖日記項目'
+        description: '%{user} 最近的開放街圖日記項目'
       language:
-        title: 語言為%{language_name}的OpenStreetMap 日記項目
-        description: 語言為%{language_name}的 OpenStreetMap 使用者最近日記項目
+        title: 語言為%{language_name}的開放街圖日記項目
+        description: 語言為%{language_name}的開放街圖使用者最近日記項目
       all:
-        title: OpenStreetMap 日記項目
-        description: OpenStreetMap 使用者最近的日記項目
+        title: 開放街圖日記項目
+        description: 開放街圖使用者最近的日記項目
     subscribe:
       heading: 訂閱以下日記項目討論?
       button: 訂閱討論
@@ -642,7 +652,7 @@ zh-TW:
       button: 取消訂閱討論
   diary_comments:
     new:
-      heading: å\9c¨ä»¥ä¸\8bæ\97¥è¨\98é \85ç\9b®è¨\8eè«\96æ·»å\8a è©\95è«\96
+      heading: å\9c¨ä»¥ä¸\8bæ\97¥è¨\98é \85ç\9b®è¨\8eè«\96æ\96°å¢\9eç\95\99è¨\80
   doorkeeper:
     errors:
       messages:
@@ -676,20 +686,36 @@ zh-TW:
     contact:
       contact_url_title: 各種聯絡管道說明
       contact: 聯絡
-      contact_the_community_html: 如果你發現有損壞的連結/錯誤,請隨時%{contact_link}OpenStreetMap 社群。並請記下你的請求的確切
-        URL 網址
+      contact_the_community_html: 如果你發現有損壞的連結/錯誤,請隨時%{contact_link}開放街圖社群。並請記下你的請求的確切
+        URL。
     bad_request:
       title: 錯誤請求
-      description: 你在 OpenStreetMap 伺服器上請求的操作無效 (HTTP 400)
+      description: 你在開放街圖伺服器上請求的操作無效 (HTTP 400)
     forbidden:
       title: Forbidden
-      description: 你在 OpenStreetMap 伺服器上請求的運作僅限管理員使用 (HTTP 403}
+      description: 你在開放街圖伺服器上請求的運作僅限管理員使用 (HTTP 403}
     internal_server_error:
       title: 應用程式錯誤
-      description: OpenStreetMap 伺服器遇到意外情況,而無法滿足請求 (HTTP 500)
+      description: 開放街圖伺服器遇到意外情況,而無法滿足請求 (HTTP 500)
     not_found:
       title: 檔案未找到
-      description: 在 OpenStreetMap 伺服器上找不到該名稱的檔案/目錄/API 操作 (HTTP 404)
+      description: 在開放街圖伺服器上找不到該名稱的檔案/目錄/API 操作 (HTTP 404)
+  follows:
+    show:
+      follow:
+        heading: 您想要追蹤 %{user} 嗎?
+        button: 追蹤使用者
+      unfollow:
+        heading: 您想要取消追蹤 %{user} 嗎?
+        button: 取消追蹤使用者
+    create:
+      success: 您正在追蹤 %{name}!
+      failed: 抱歉,您追蹤 %{name} 的請求失敗。
+      already_followed: 您已追蹤 %{name}。
+      limit_exceeded: 您最近追蹤了大量的使用者。請在嘗試追蹤更多人之前稍等。
+    destroy:
+      success: 您成功取消追蹤了 %{name}。
+      not_followed: 您並未追蹤 %{name}。
   geocoder:
     search:
       title:
@@ -944,6 +970,7 @@ zh-TW:
           bridleway: 騎馬道
           bus_guideway: 導軌巴士車道
           bus_stop: 公車站牌
+          busway: 公車專用道
           construction: 興建中道路
           corridor: 走廊
           crossing: 行人穿越道
@@ -1514,9 +1541,11 @@ zh-TW:
       reports: 回報
       last_updated: 上一次更新
       last_updated_time_ago_user_html: 由%{user}%{time_ago}
+      reporting_users: 回報使用者
       reports_count:
         one: '%{count} 份回報'
         other: '%{count} 份回報'
+      more_reporters: 以及 %{count} 個
       reported_item: 已回報項目
       states:
         ignored: 已忽略
@@ -1525,6 +1554,8 @@ zh-TW:
     show:
       title:
         open: '未決問題 #%{issue_id}'
+        ignored: '已忽略的問題 #%{issue_id}'
+        resolved: '已解決的問題 #%{issue_id}'
       reports:
         one: '%{count} 份回報'
         other: '%{count} 份回報'
@@ -1549,11 +1580,13 @@ zh-TW:
       reopened: 問題狀態已設定成「開啟」
     comments:
       comment_from_html: 由 %{user_link} 於 %{comment_created_at} 發表的評論
+      reassign_to_moderators: 重新指派問題給仲裁者
+      reassign_to_administrators: 重新指派問題給管理員
     reports:
       reported_by_html: 由 %{user} 於 %{updated_at} 回報為 %{category}
     helper:
       reportable_title:
-        diary_comment: '%{entry_title},評論 #%{comment_id}'
+        diary_comment: '%{entry_title},留言 #%{comment_id}'
         note: '註記 #%{note_id}'
   issue_comments:
     create:
@@ -1598,7 +1631,7 @@ zh-TW:
       title: OpenStreetMap 開放街圖
       h1: OpenStreetMap 開放街圖
     logo:
-      alt_text: OpenStreetMap 標誌
+      alt_text: 開放街圖標誌
     home: 移至家的位置
     logout: 登出
     log_in: 登入
@@ -1611,8 +1644,8 @@ zh-TW:
     gps_traces: GPS 軌跡
     user_diaries: 日記
     edit_with: 以 %{editor} 編輯
-    intro_header: 歡迎來到 OpenStreetMap
-    intro_text: OpenStreetMap 是一份全世界的地圖,由像你這樣的人們所建立,在開放授權下可以自由使用。
+    intro_header: 歡迎來到開放街圖
+    intro_text: 開放街圖是一份全世界的地圖,由像你這樣的人們所建立,在開放授權下可以自由使用。
     hosting_partners_2024_html: 由%{fastly}、%{corpmembers},和其他%{partners}支援代管。
     partners_fastly: Fastly
     partners_corpmembers: OSMF 團體成員
@@ -1625,76 +1658,96 @@ zh-TW:
     communities: 社群
     learn_more: 瞭解更多
     more: 更多
+    offline_flash:
+      osm_offline: 開放街圖資料庫目前已離線,正在進行必要的維護工作。
+      osm_read_only: 開放街圖資料庫目前處於唯讀模式,正在進行必要的維護工作。
+      expected_restore_html: 服務預計於 %{time} 內恢復。
+      announcement: 您可以在此閱讀公告。
   user_mailer:
     diary_comment_notification:
-      description: 'OpenStreetMap 日記項目 #%{id}'
-      subject: '[OpenStreetMap] %{user} 已評論日記項目'
+      description: '開放街圖日記項目 #%{id}'
+      subject: '[開放街圖] %{user} 已評論日記項目'
       hi: '%{to_user} 你好,'
-      header: '%{from_user} 評論主旨為 %{subject} 的 OpenStreetMap 日記項目:'
-      header_html: '%{from_user} 評論主旨為 %{subject} 的 OpenStreetMap 日記項目:'
+      header: '%{from_user} 評論主旨為 %{subject} 的開放街圖日記項目:'
+      header_html: '%{from_user} 評論主旨為 %{subject} 的開放街圖日記項目:'
       footer: 你也可以在 %{readurl} 閱讀評論,並且在 %{commenturl} 留下評論,或在 %{replyurl} 發送訊息給作者
       footer_html: 你也可以在 %{readurl} 閱讀評論,並且在 %{commenturl} 留下評論,或在 %{replyurl} 發送訊息給作者
       footer_unsubscribe: 你可以在%{unsubscribeurl}取消訂閱討論
       footer_unsubscribe_html: 你可以在%{unsubscribeurl}取消訂閱討論
     message_notification:
-      subject: '[OpenStreetMap] %{message_title}'
+      subject: '[開放街圖] %{message_title}'
       hi: '%{to_user} 您好,'
-      header: '%{from_user} 透過 OpenStreetMap 寄給你主旨為 %{subject} 的訊息:'
-      header_html: '%{from_user} 透過 OpenStreetMap 寄給你主旨為 %{subject} 的訊息:'
+      header: '%{from_user} 透過開放街圖寄給你主旨為 %{subject} 的訊息:'
+      header_html: '%{from_user} 透過開放街圖寄給你主旨為 %{subject} 的訊息:'
       footer: 你也可以在 %{readurl} 閱讀訊息,並且在 %{replyurl} 發送訊息給作者
       footer_html: 你也可以在 %{readurl} 閱讀訊息,並且在 %{replyurl} 發送訊息給作者
     follow_notification:
       hi: 嗨 %{to_user},
+      subject: '[開放街圖] %{user} 已追蹤您'
+      followed_you: '%{user} 現在正在開放街圖上追蹤您。'
       see_their_profile: 你可以在 %{userurl} 查看他的基本資料。
       see_their_profile_html: 你可以在 %{userurl} 查看他的基本資料。
+      follow_them: 您也可以透過 %{followurl} 追蹤他們。
+      follow_them_html: 您也可以透過 %{followurl} 追蹤他們。
+    gpx_details:
+      details: 您的檔案詳細資訊:
+      filename: 檔案名稱
+      url: URL
+      description: 描述
+      tags: 標籤
+      total_points: 點總數
+      imported_points: 匯入點的數量
     gpx_failure:
       hi: '%{to_user} 你好,'
       failed_to_import: 您的文件似乎無法以GPS軌跡匯入。
+      verify: 請驗證您的檔案是否為有效的 GPX 檔案,或者是否為含有 GPX 檔案的支援格式封存檔 (.tar.gz, .tar.bz2, .tar,
+        .zip, .gpx.gz, .gpx.bz2)。您的檔案是否有格式或語法問題?此為匯入的錯誤內容:
       more_info: 有更多關於GPX匯入失敗的資訊與如何避免,可在 %{url} 查詢
       more_info_html: 更多關於 GPX 匯入失敗的資訊與如何避免,可在 %{url} 查詢。
-      subject: '[OpenStreetMap] GPX 匯入失敗'
+      subject: '[開放街圖] GPX 匯入失敗'
     gpx_success:
       hi: '%{to_user} 您好,'
+      imported_successfully: 看來您的檔案已成功匯入為 GPS 軌跡。
       all_your_traces: 你可以在 %{url} 找到所有上傳成功的 GPX 軌跡
       all_your_traces_html: 你可以在 %{url} 找到所有上傳成功的 GPX 軌跡。
-      subject: '[OpenStreetMap] GPX 匯入成功'
+      subject: '[開放街圖] GPX 匯入成功'
     signup_confirm:
-      subject: '[OpenStreetMap] 歡迎加入 OpenStreetMap'
+      subject: '[開放街圖] 歡迎加入開放街圖'
       greeting: 你好!
       created: 有人 (希望是你) 剛在 %{site_url} 建立了帳號。
       confirm: 在我們作出任何動作之前,我們需要確認這是你提出的要求。如果確實是這樣,請按以下連結,以確認你的帳號:
-      welcome: 在確認你的帳號後,我們將提供一些額外的訊息,幫助你開始使用 OpenStreetMap
+      welcome: 在確認您的帳號後,我們將提供一些額外的資訊,協助您開始使用開放街圖
     email_confirm:
-      subject: '[OpenStreetMap] 確認你的電子郵件信箱'
+      subject: '[開放街圖] 確認你的電子郵件信箱'
       greeting: 您好,
       hopefully_you: 有人 (希望是你) 想在 %{server_url} 更改電子郵件信箱為 %{new_address} 。
       click_the_link: 如果這是你,請按下列連結確認此變更。
     lost_password:
-      subject: '[OpenStreetMap] 密碼重設要求'
+      subject: '[開放街圖] 密碼重設要求'
       greeting: 你好,
       hopefully_you: 有人 (或許是你) 要求將這個電子郵件信箱註冊的 openstreetmap.org 帳號重設密碼。
       click_the_link: 如果這是你,請按下列連結重設密碼。
     note_comment_notification:
-      description: 'OpenStreetMap 註記 #%{id}'
+      description: '開放街圖註記 #%{id}'
       anonymous: 匿名使用者
       greeting: 你好,
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} 對你的註記做了評論'
-        subject_other: '[OpenStreetMap] %{commenter} 對你感興趣的註記做了評論'
+        subject_own: '[開放街圖] %{commenter} 對你的註記做了評論'
+        subject_other: '[開放街圖] %{commenter} 對你感興趣的註記做了評論'
         your_note: '%{commenter} 對 %{place} 附近的地圖註記做了評論。'
         your_note_html: '%{commenter} 對 %{place} 附近的地圖註記做了評論。'
         commented_note: '%{commenter} 對你感興趣的地圖註記做了評論。該註記在 %{place} 附近。'
         commented_note_html: '%{commenter} 對你感興趣的地圖註記做了評論。該註記在 %{place} 附近。'
       closed:
-        subject_own: '[OpenStreetMap] %{commenter} 解決你其中一筆註記 %{commenter}'
-        subject_other: '[OpenStreetMap]%{commenter} 已解決一項你感興趣的註記'
+        subject_own: '[開放街圖] %{commenter} 解決你其中一筆註記 %{commenter}'
+        subject_other: '[開放街圖] %{commenter} 已解決一項你感興趣的註記'
         your_note: '%{commenter} 已解決你在 %{place} 附近的註記之一。'
         your_note_html: '%{commenter} 已解決你在 %{place} 附近的註記之一。'
         commented_note: '%{commenter} 已解決你留言過的地圖註記。該註記在 %{place} 附近。'
         commented_note_html: '%{commenter} 已解決你留言過的地圖註記。該註記在 %{place} 附近。'
       reopened:
-        subject_own: '[OpenStreetMap] %{commenter} 再次開啟你其中一筆註記。'
-        subject_other: '[OpenStreetMap] %{commenter} 再次開啟你感興趣的註記。'
+        subject_own: '[開放街圖] %{commenter} 再次開啟你其中一筆註記。'
+        subject_other: '[開放街圖] %{commenter} 再次開啟你感興趣的註記。'
         your_note: '%{commenter} 已經再次開啟你其中一筆接近 %{place} 的地圖註記。'
         your_note_html: '%{commenter} 已經再次開啟你其中一筆接近 %{place} 的地圖註記。'
         commented_note: '%{commenter} 重新開啟了一個你曾評論的地圖註記。該註記位於 %{place} 附近。'
@@ -1702,11 +1755,11 @@ zh-TW:
       details: 關於註記的更多詳細資料可在 %{url} 找到。
       details_html: 在%{url}回覆或是瞭解更多有關註記的訊息。
     changeset_comment_notification:
-      description: 'OpenStreetMap 變更集 #%{id}'
+      description: '開放街圖變更集 #%{id}'
       hi: 嗨 %{to_user},
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} 對你的變更集做了評論'
-        subject_other: '[OpenStreetMap] %{commenter} 對你感興趣的變更集做了評論'
+        subject_own: '[開放街圖] %{commenter} 對你的變更集做了評論'
+        subject_other: '[開放街圖] %{commenter} 對你感興趣的變更集做了評論'
         your_changeset: '%{commenter}於 %{time} 在你的變更集做了評論'
         your_changeset_html: '%{commenter}於 %{time} 在你的變更集做了評論'
         commented_changeset: '%{commenter}於 %{time} 在你監視、由%{changeset_author}建立的變更集做了評論'
@@ -1839,6 +1892,12 @@ zh-TW:
   preferences:
     show:
       title: 我的偏好設定
+      preferred_site_color_scheme: 偏好的網站配色
+      site_color_schemes:
+        auto: 自動
+        light: 淺色
+        dark: 深色
+      preferred_map_color_scheme: 偏好的地圖配色
       map_color_schemes:
         auto: 自動
         light: 明亮
@@ -1876,7 +1935,7 @@ zh-TW:
   sessions:
     new:
       tab_title: 登入
-      login_to_authorize_html: 登入 OpenStreetMap 以存取 %{client_app_name}。
+      login_to_authorize_html: 登入開放街圖以存取 %{client_app_name}。
       email or username: 電子郵件地址或使用者名稱
       password: 密碼
       remember: 記住我
@@ -1887,7 +1946,7 @@ zh-TW:
       auth failure: 很抱歉,無法以這些資料登入。
     destroy:
       title: 登出
-      heading: 從 OpenStreetMap 登出
+      heading: 從開放街圖登出
       logout_button: 登出
     suspended_flash:
       suspended: 抱歉,由於可疑活動,你的帳戶已被暫停。
@@ -1914,6 +1973,9 @@ zh-TW:
       preview: 預覽
       help: 說明
     pagination:
+      changeset_comments:
+        older: 較舊的留言
+        newer: 較新的留言
       diary_comments:
         older: 較舊的評論
         newer: 較新的評論
@@ -1934,38 +1996,38 @@ zh-TW:
         newer: 新使用者
   site:
     about:
-      heading_html: '%{copyright}OpenStreetMap %{br} 貢獻者'
+      heading_html: '%{copyright}開放街圖 %{br} 貢獻者'
       used_by_html: '%{name} 為數以千計的網站、行動應用程式和硬體提供地圖資料'
-      lede_text: OpenStreetMap 是由製圖者社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。
+      lede_text: 開放街圖是由圖客社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。
       local_knowledge_title: 地方知識
       local_knowledge_html: |-
-        OpenStreetMap 強調地方知識。貢獻者們使用
+        開放街圖強調地方知識。貢獻者們使用
         航照圖、GPS 裝置與低技術的實地考察製圖,來檢驗 OSM
         是準確而且最新的。
       community_driven_title: 社群推動
       community_driven_1_html: |-
-        OpenStreetMap 的社群多元化、懷有熱情,而且日益壯大。我們的貢獻者包括地圖製作愛好者,地理訊息系統的專業人員,提供 OSM 伺服器的工程師,為受災害影響區域製圖的人道主義志願人士,以及其他各界人士。
+        開放街圖的社群多元化、懷有熱情,而且日益壯大。我們的貢獻者包括地圖製作愛好者,地理訊息系統的專業人員,提供 OSM 伺服器的工程師,為受災害影響區域製圖的人道主義志願人士,以及其他各界人士。
         想進一步了解這個社群,請參閱%{osm_blog_link}、%{user_diaries_link}、
         %{community_blogs_link},以及%{osm_foundation_link}網站。
-      community_driven_osm_blog: OpenStreetMap 部落格
+      community_driven_osm_blog: 開放街圖部落格
       community_driven_user_diaries: 使用者日記
       community_driven_community_blogs: 社群部落格
       community_driven_osm_foundation: OSM 基金會
       open_data_title: 開放資料
-      open_data_1_html: OpenStreetMap 是%{open_data}的:你可以自由地使用作任何用途,前提是必須標明作者為 OpenStreetMap
+      open_data_1_html: 開放街圖是%{open_data}的:你可以自由地使用作任何用途,前提是必須標明作者為 OpenStreetMap
         及其貢獻者。若你在我們的資料上作修改或以之透過某些方式衍生其他資料,則只可依相同授權條款散佈有關成果。詳情請參閱%{copyright_license_link}。
       open_data_open_data: 開放資料
       open_data_copyright_license: 版權與授權條款頁面
       legal_title: 法律資訊
       legal_1_1_html: 本站以及許多相關的服務正式由%{openstreetmap_foundation_link} (OSMF) 代表社群所營運。所有使用的
         OSMF 運行服務皆符合我們的%{terms_of_use_link}、%{aup_link}、和%{privacy_policy_link}。
-      legal_1_1_openstreetmap_foundation: OpenStreetMap 基金會
+      legal_1_1_openstreetmap_foundation: 開放街圖基金會
       legal_1_1_terms_of_use: 使用條款
       legal_1_1_aup: 可接受使用方針
       legal_1_1_privacy_policy: 隱私權政策
       legal_2_1_html: 若你有授權、版權、或其他法律上的問題,請%{contact_the_osmf_link}。
       legal_2_1_contact_the_osmf: 聯絡 OSMF
-      legal_2_2_html: OpenStreetMap,查看地圖狀態的放大鏡模樣標誌是%{registered_trademarks_link}。
+      legal_2_2_html: 開放街圖、放大鏡標誌與 State of the Map 是%{registered_trademarks_link}。
       legal_2_2_registered_trademarks: OSMF 的註冊商標
       partners_title: 合作夥伴
     copyright:
@@ -1980,19 +2042,19 @@ zh-TW:
         native_link: 繁體中文版
         mapping_link: 開始製圖
       legal_babble:
-        introduction_1_html: OpenStreetMap%{registered_trademark_link}是%{open_data},透過%{osm_foundation_link}
-          (OSMF) 在%{odc_odbl_link}(ODbL)下授權。
+        introduction_1_html: 開放街圖%{registered_trademark_link}是%{open_data},透過%{osm_foundation_link}
+          (OSMF) 以%{odc_odbl_link}(ODbL)授權。
         introduction_1_open_data: 開放資料
         introduction_1_odc_odbl: 開放資料共享開放資料庫授權
-        introduction_1_osm_foundation: OpenStreetMap 基金會
-        introduction_2_html: 你可以自由複製、散布、傳輸及修改我們的資料,前提是必須標明作者為 OpenStreetMap 及其貢獻者。若在我們的資料上作變動或以此來建立其他資料,你只能依照相同授權條款來散佈成果。%{legal_code_link}有詳述你的權責。
+        introduction_1_osm_foundation: 開放街圖基金會
+        introduction_2_html: 你可以自由複製、散布、傳輸及修改我們的資料,前提是必須標明作者為開放街圖及其貢獻者。若在我們的資料上作變動或以此來建立其他資料,你只能依照相同授權條款來散佈成果。%{legal_code_link}有詳述你的權責。
         introduction_2_legal_code: 法律條款
         introduction_3_html: 我們的文件是依據 %{creative_commons_link} 授權條款(CC BY-SA 2.0)獲得許可。
         introduction_3_creative_commons: 創用 CC 姓名標示-相同方式分享
         introduction_3_creative_commons_url: https://creativecommons.org/licenses/by-sa/2.0/deed.zh_TW
-        credit_title_html: 如何標明作者是 OpenStreetMap
-        credit_1_html: 當你使用 OpenStreetMap 的資料,你會被要求遵循兩件事:
-        credit_2_1: 透過顯示我們的版權聲明為 OpenStreetMap 提供屬名。
+        credit_title_html: 如何標明作者是開放街圖
+        credit_1_html: 當你使用開放街圖的資料,你會被要求遵循兩件事:
+        credit_2_1: 透過顯示我們的版權聲明為開放街圖提供署名。
         credit_2_2: 明確資料在開放資料共享開放資料庫授權下可用。
         credit_3_html: 對於版權聲明的顯示,我們會依據你如何使用我們的資料,而有不同的要求。例如:不同的規則要如何顯示版權聲明,具體取決於你是否有建立可瀏覽的地圖、列印的地圖、或靜態圖片。完整的詳細資訊要求可以在%{attribution_guidelines_link}上查看。
         credit_3_attribution_guidelines: 姓名標示指南
@@ -2002,14 +2064,14 @@ zh-TW:
           在此範例中,版權相關聲明會出現在地圖的角落處。
         credit_4_1_this_copyright_page: 此版權頁面
         attribution_example:
-          alt: 如何在網頁上署名 OpenStreetMap 的例子
+          alt: 如何在網頁上署名開放街圖的例子
           title: 姓名標示例子
         more_title_html: 尋找更多
         more_1_1_html: 在%{osmf_licence_page_link}閱讀更多關於使用我們的資料,以及如何屬名我們的方式。
         more_1_1_osmf_licence_page: OSMF 授權條款頁面
         more_2_1_html: |-
-          儘管 OpenStreetMap 是開放資料,我們不對第三方提供免費的地圖 API。
-          請參閱我們的%{api_usage_policy_link}、%{tile_usage_policy_link}、和%{nominatim_usage_policy_link}。
+          儘管開放街圖是開放資料,但我們不對第三方提供免費的地圖 API。
+          請參閱我們的%{api_usage_policy_link}、%{tile_usage_policy_link}以及%{nominatim_usage_policy_link}。
         more_2_1_api_usage_policy: API 使用方針
         more_2_1_tile_usage_policy: 圖磚使用方針
         more_2_1_nominatim_usage_policy: 提名使用方針
@@ -2073,30 +2135,30 @@ zh-TW:
         contributors_za_ngi: 總局:國家地理空間資訊局
         contributors_gb_credit_html: '%{united_kingdom}:包含軍械調查資料&copy;皇家版權與資料庫版權 2010-2023。'
         contributors_gb_united_kingdom: 英國
-        contributors_2_html: 關於這些的進一步詳細資訊,與其他已使用來改善 OpenStreetMap 的來源,請參閱 OpenStreetMap
-          Wiki 上的%{contributors_page_link}。
+        contributors_2_html: 關於這些的進一步詳細資訊,與其他已使用來改善開放街圖的來源,請參閱開放街圖 Wiki 上的%{contributors_page_link}。
         contributors_2_contributors_page: 貢獻者頁面
-        contributors_footer_2_html: OpenStreetMap 收錄一項資料,並不意味原本的資料提供者認可 OpenStreetMap、提供任何保證或承擔任何法律責任。
+        contributors_footer_2_html: 開放街圖收錄一項資料,並不意味原本的資料提供者認可開放街圖、提供任何保證或承擔任何法律責任。
         infringement_title_html: 侵犯版權
         infringement_1_html: OSM 的貢獻者會被提醒,絕不要在沒有版權所有人的明確淮許下,加入來自任何有版權的來源的資料 (如 Google
           地圖或印刷地圖)。
-        infringement_2_1_html: 如果你認為有受版權保護的素材被不恰當地加到 OpenStreetMap 資料庫或本網站,請參考我們的%{takedown_procedure_link},或直接在我們的%{online_filing_page_link}反應。
+        infringement_2_1_html: 如果你認為有受版權保護的素材被不恰當地加到開放街圖資料庫或本網站,請參考我們的%{takedown_procedure_link},或直接在我們的%{online_filing_page_link}反應。
         infringement_2_1_takedown_procedure: 侵權處理程序
         infringement_2_1_online_filing_page: 線上申請頁面
         trademarks_title: 商標
-        trademarks_1_1_html: OpenStreetMap、網站上的放大鏡標誌,和 State of the Map 是 OpenStreetMap
-          基金會的註冊商標。如果你對商標的使用有任何疑問,請參閱我們的%{trademark_policy_link}。
+        trademarks_1_1_html: 開放街圖、網站上的放大鏡標誌以及 State of the Map 是開放街圖基金會的註冊商標。如果你對商標的使用有任何疑問,請參閱我們的%{trademark_policy_link}。
         trademarks_1_1_trademark_policy: 商標方針
     index:
       js_1: 你使用不支援 JavaScript 的瀏覽器,或者停用了 JavaScript。
-      js_2: OpenStreetMap 使用 JavaScript 讓地圖更平順。
+      js_2: 開放街圖使用 JavaScript 讓地圖更平順。
       license:
-        copyright: 版權所有,由 OpenStreetMap 及貢獻者根據開放的授權協議提供
+        copyright: 版權所有,由開放街圖及貢獻者根據開放的授權協議提供
       remote_failed: 編輯失敗 - 請確定已載入 JOSM 或 Merkaartor 並開啟遠端控制選項
     not_public_flash:
       not_public: 你尚未將你的編輯設為公開。
       not_public_description_html: 在你這麼做之前將無法再編輯地圖,可以在你的 %{user_page} 將自己的編輯設定為公開。
       user_page_link: 使用者頁面
+      anon_edits_html: (%{link})
+      anon_edits_link: https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits
       anon_edits_link_text: 瞭解為什麼這很重要。
     edit:
       id_not_configured: iD 尚未設定
@@ -2109,19 +2171,19 @@ zh-TW:
       odbl: 開放資料共享開放資料庫授權
       too_large:
         advice: 若以上匯出失敗,請考慮使用下列來源:
-        body: 這個區域太大,無法匯出 OpenStreetMap XML 資料。請放大或選擇一個較小的區域,或使用下列大量資料下載源:
+        body: 這個區域太大,無法匯出開放街圖 XML 資料。請放大或選擇一個較小的區域,或使用下列大量資料下載源:
         planet:
           title: 地球 OSM
-          description: 定期更新的完整 OpenStreetMap 資料庫副本
+          description: 定期更新的完整開放街圖資料庫副本
         overpass:
           title: Overpass API
-          description: 從 OpenStreetMap 資料庫的鏡像,下載此區域
+          description: 從開放街圖資料庫的鏡像,下載此區域
         geofabrik:
           title: Geofabrik 下載
           description: 定期更新的洲、國家及特定城市之摘錄資料
         other:
           title: 其他來源
-          description: OpenStreetMap wiki 上列出的其他來源
+          description: 開放街圖 wiki 上列出的其他來源
       export_button: 匯出
     fixthemap:
       title: 回報問題/改進地圖
@@ -2129,8 +2191,7 @@ zh-TW:
         title: 如何協助
         join_the_community:
           title: 加入社群
-          explanation_html: 如果你發現我們的地圖資料有問題,例如缺少某條道路或者你的地址,最好的方法就是加入 OpenStreetMap
-            社群,然後自己加入或者改進資料。
+          explanation_html: 如果你發現我們的地圖資料有問題,例如缺少某條道路或者你的地址,最好的方法就是加入開放街圖社群,然後自己加入或者改進資料。
         add_a_note:
           instructions_1_html: |-
             只需點選%{note_icon}或地圖上顯示的同一圖示,
@@ -2142,7 +2203,7 @@ zh-TW:
         working_group: OSMF 工作小組
     help:
       title: 取得協助
-      introduction: OpenStreetMap 有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。
+      introduction: 開放街圖有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。
       welcome:
         url: /welcome
         title: 歡迎來到開放街圖
@@ -2153,7 +2214,7 @@ zh-TW:
         description: 社群維護的新手指南
       community:
         title: 幫助與社群論壇
-        description: 尋求幫助與討論有關 OpenStreetMap 的分享場所。
+        description: 尋求幫助與討論有關開放街圖的分享場所。
       mailing_lists:
         title: 郵件論壇
         description: 在不同主題或是地區的郵件論壇問問題或是討論有趣的事物。
@@ -2162,10 +2223,10 @@ zh-TW:
         description: 使用各種不同語言在各種主題聊天互動。
       switch2osm:
         title: switch2osm
-        description: 協助公司與組織改用 OpenStreetMap 為基礎的地圖與相關服務。
+        description: 協助公司與組織改用開放街圖為基礎的地圖與相關服務。
       welcomemat:
         title: 對於組織
-        description: 想要以組織來對 OpenStreetMap 製作計劃嗎?請在 Welcome Mat 查找你所需要的事項。
+        description: 想要以組織來對開放街圖製作計劃嗎?請在 Welcome Mat 查找你所需要的事項。
       wiki:
         title: 開放街圖 Wiki
         description: 瀏覽 wiki,取得詳盡的開放街圖文件。
@@ -2297,7 +2358,7 @@ zh-TW:
         doesnt: 不會
       basic_terms:
         title: 繪製地圖的基本術語
-        paragraph_1: OpenStreetMap 有自己的術語。以下是一些常用的關鍵詞。
+        paragraph_1: 開放街圖有自己的術語。以下是一些常用的關鍵詞。
         an_editor_html: '%{editor}是你可以用於編輯地圖的程式或網站。'
         a_node_html: '%{node}是地圖上的一個點,例如一間餐廳或是一棵樹。'
         a_way_html: '%{way}是一條線或是區域,例如一條道路、一條溪、一個湖泊或是一棟建築物。'
@@ -2309,7 +2370,7 @@ zh-TW:
       rules:
         title: 規則!
         para_1_html: |-
-          OpenStreetMap 幾乎沒有正式規則,但我們希望所有參與者都能與社群合作與溝通!。如果你正在考慮
+          開放街圖幾乎沒有正式規則,但我們希望所有參與者都能與社群合作與溝通!。如果你正在考慮
           除手動編輯之外的任何活動,請閱讀並遵循
           %{imports_link} 和 %{automated_edits_link}指南。
         imports: 匯入
@@ -2327,14 +2388,14 @@ zh-TW:
     communities:
       title: 社群
       lede_text: |-
-        來自世界各地的人們都在貢獻或使用 OpenStreetMap
+        來自世界各地的人們都在貢獻或使用開放街圖
         雖然許多人以個人身份參與,但其他人則組成了社群。
         這些團體的規模各不相同,代表了小到城鎮大到大型多國地區的地域。
         它們也可以是正式的或非正式的。
       local_chapters:
         title: 地方分會
-        about_text: 地方分會是已採取正式步驟建立非營利法人實體的國家級或地區級團體。在與地方政府、企業和媒體打交道時,他們代表該地區的地圖和製圖者。他們還與
-          OpenStreetMap 基金會 (OSMF) 締結聯繫,使他們能夠與法律和版權管理機構建立聯繫。
+        about_text: 地方分會是已採取正式步驟建立非營利法人實體的國家級或地區級團體。在與地方政府、企業和媒體打交道時,他們代表該地區的地圖和製圖者。他們還與開放街圖基金會
+          (OSMF) 締結聯繫,使他們能夠與法律和版權管理機構建立聯繫。
         list_text: 以下社群已經正式成立地方分會:
       other_groups:
         title: 其他團體
@@ -2425,7 +2486,7 @@ zh-TW:
       message: GPX 檔案儲存,上傳系統目前無法使用。
     feeds:
       show:
-        title: OpenStreetMap GPS 軌跡
+        title: 開放街圖 GPS 軌跡
       description:
         description_with_count:
           one: 由 %{user} 上傳的 GPX 檔案,含有 %{count} 點
@@ -2436,7 +2497,7 @@ zh-TW:
     require_cookies:
       cookies_needed: 你似乎已停用 cookies - 請在瀏覽器中開啟 cookies 後再繼續。
     setup_user_auth:
-      blocked_zero_hour: 你在 OpenStreetMap 網站有一個緊急訊息。在儲存你的編輯內容前請先閱讀該訊息。
+      blocked_zero_hour: 你在開放街圖網站有一個緊急訊息。在儲存你的編輯內容前請先閱讀該訊息。
       blocked: 你已經被封鎖使用 API。請登入網頁介面以瞭解更多資訊。
       need_to_see_terms: 我們已暫時中止你使用 API 的權限,請登入網頁介面查閱貢獻者條款,你不需要同意有關條款,但必須查閱它們。
     settings_menu:
@@ -2491,15 +2552,17 @@ zh-TW:
     permissions:
       missing: 你尚未允許應用程式來訪問此設施
     scopes:
-      openid: 使用 OpenStreetMap 登入
+      openid: 使用開放街圖登入
       read_prefs: 讀取使用者偏好設定
       write_prefs: 修改使用者偏好設定
       write_diary: 建立日記並評論
       write_api: 修改地圖
+      write_changeset_comments: 在變更集上留言
       read_gpx: 讀取私人 GPS 軌跡
       write_gpx: 上傳 GPS 軌跡
       write_notes: 修改註記
       write_redactions: 編寫地圖資料
+      write_blocks: 建立與撤銷使用者封鎖
       read_email: 讀取使用者電子郵件位址
       consume_messages: 讀取、更新狀態、與刪除使用者訊息
       send_messages: 傳送私人訊息給其他使用者
@@ -2557,16 +2620,16 @@ zh-TW:
     new:
       title: 註冊
       tab_title: 註冊
-      signup_to_authorize_html: 註冊 OpenStreetMap 以存取 %{client_app_name}。
+      signup_to_authorize_html: 註冊開放街圖以存取 %{client_app_name}。
       no_auto_account_create: 很不幸的,我們現在無法自動為你建立帳號。
       please_contact_support_html: 請聯繫 %{support_link} 來安排建立帳號 - 我們會盡快處理這份請求。
       support: 支援
       about:
         header: 自由且可編輯。
-        paragraph_1: 不像其他地圖,開放街圖是完全由像你我這類創建,而且任何都能修正、更新、下載與使用。
+        paragraph_1: 不像其他地圖,開放街圖是完全由像你我這樣的人建立,而且任何人都能修正、更新、下載與使用。
         paragraph_2: 註冊並開始貢獻。
-        welcome: 歡迎來到 OpenStreetMap
-      duplicate_social_email: 若你已有 OpenStreetMap 帳號,並希望使用第三方身份提供者,請使用你的密碼登入並修改帳號的設定。
+        welcome: 歡迎來到開放街圖
+      duplicate_social_email: 若你已有開放街圖帳號,並希望使用第三方身份提供者,請使用你的密碼登入並修改帳號的設定。
       display name description: 你公開顯示的使用者名稱,之後可以在偏好設定中改變它。
       by_signing_up:
         html: 註冊即表示你同意我們的 %{tou_link}、%{privacy_policy_link} 與 %{contributor_terms_link}。
@@ -2579,9 +2642,6 @@ zh-TW:
         privacy_policy: 隱私權政策
         privacy_policy_title: OSMF 隱私權政策包含電子郵件地址部份
         html: 你的地址不會公開顯示,請參閱我們的%{privacy_policy_link}來了解更多資訊。
-      consider_pd_html: 我認為我的貢獻屬於 %{consider_pd_link}。
-      consider_pd: 公有領域
-      consider_pd_url: https://wiki.osmfoundation.org/wiki/Licence_and_Legal_FAQ/Why_would_I_want_my_contributions_to_be_public_domain
       or: 或
       use external auth: 或者使用第三方服務註冊
     no_such_user:
@@ -2596,7 +2656,7 @@ zh-TW:
       my notes: 我的註記
       my messages: 我的訊息
       my profile: 我的基本資料
-      my settings: 我的設定值
+      my_account: 我的帳號
       my comments: 我的評論
       my_preferences: 我的偏好設定
       my_dashboard: 我的功能面板
@@ -2610,6 +2670,8 @@ zh-TW:
       edits: 編輯
       traces: 軌跡
       notes: 地圖註記
+      unfollow: 取消追蹤
+      follow: 追蹤
       mapper since: 註冊為製圖者日期:
       last map edit: 最後地圖編輯於:
       no activity yet: 尚無活動
@@ -2674,25 +2736,38 @@ zh-TW:
       show:
         title: 使用者
         heading: 使用者
-        empty: 找不到符合的使用者
+        ip_address: IP 位址
+        search: 搜尋
       page:
         found_users:
           one: 找到 %{count} 位使用者
           other: 找到 %{count} 位使用者
         confirm: 確認選取的使用者
         hide: 隱藏選取的使用者
+        empty: 找不到符合的使用者
       user:
         summary_html: '%{name} 由 %{ip_address} 於 %{date} 建立'
         summary_no_ip_html: '%{name} 建立於:%{date}'
+    comments:
+      index:
+        heading_html: '%{user} 的留言'
+        changesets: 變更集
+        diary_entries: 日記項目
+        no_comments: 沒有留言
     changeset_comments:
+      index:
+        title: '%{user} 新增的變更集留言'
       page:
+        changeset: 變更集
         when: 於
         comment: 評論
     diary_comments:
       index:
-        title: æ\97¥è¨\98è©\95è«\96ç\94±%{user}æ·»å\8a 
+        title: æ\97¥è¨\98è©\95è«\96ç\94±%{user}æ\96°å¢\9e
       page:
         post: 貼文
+        when: 於
+        comment: 留言
     suspended:
       title: 帳號已暫停
       heading: 帳號已暫停
@@ -2707,8 +2782,8 @@ zh-TW:
       invalid_scope: 無效範圍
       unknown_error: 驗證失敗
     auth_association:
-      heading: 你的 ID 尚未與 OpenStreetMap 帳號關聯。
-      option_1: 如果你是新來到 OpenStreetMap,請使用下方表單建立一個帳號。
+      heading: 你的 ID 尚未與開放街圖帳號關聯。
+      option_1: 如果你是新來到開放街圖,請使用下方表單建立一個帳號。
       option_2: 如果你已擁有一個帳號,可以用你的使用者名稱與密碼登入你的帳號,並在使用者設定中關連你的 ID。
   user_role:
     filter:
@@ -2776,6 +2851,9 @@ zh-TW:
         revoked_html: 已被 %{name} 撤銷
         active: 活躍的
         active_until_read: 直到讀取後才活躍
+        read_html: 已讀於 %{time}
+        time_in_future_title: '%{time_absolute};於 %{time_relative}'
+        time_in_past_title: '%{time_absolute};%{time_relative}'
     show:
       title: '%{block_by}封鎖了%{block_on}'
       heading_html: '%{block_by}封鎖了%{block_on}'
@@ -2792,6 +2870,8 @@ zh-TW:
       display_name: 被封鎖的使用者
       creator_name: 建立者
       reason: 封鎖的理由
+      start: 開始
+      end: 結束
       status: 狀態
     navigation:
       all_blocks: 所有封鎖
@@ -2836,12 +2916,18 @@ zh-TW:
       description: 說明
       created_at: 建立於:
       last_changed: 最新變更
+      apply: 套用
+      all: 全部
+      open: 開放
+      closed: 已關閉
+      status: 狀態
     show:
       title: 註記:%{id}
       description: 說明
       open_title: 未解決的註記:#%{note_name}
       closed_title: 已解決的註記:#%{note_name}
       hidden_title: 已隱藏的註記:#%{note_name}
+      description_when_author_is_deleted: 已刪除
       event_opened_by_html: 由%{user}%{time_ago}建立
       event_opened_by_anonymous_html: 由匿名使用者%{time_ago}建立
       event_commented_by_html: 來自%{user}%{time_ago}的評論
@@ -2853,6 +2939,9 @@ zh-TW:
       event_hidden_by_html: 由%{user} %{time_ago}隱藏
       report: 回報此註記
       anonymous_warning: 此項註記包含來自匿名使用者的評論,應作獨立核實。
+      discussion: 討論
+      subscribe: 訂閱
+      unsubscribe: 取消訂閱
       hide: 隱藏
       resolve: 解決
       reactivate: 重新開啟
@@ -2869,12 +2958,26 @@ zh-TW:
       anonymous_warning_html: 你尚未登入。請%{log_in}或%{sign_up}以便收到你的註記的更新內容並協助其他的地圖編輯者解決問題。
       anonymous_warning_log_in: 登入
       anonymous_warning_sign_up: 註冊
+      counter_warning_html: 您已張貼了至少 %{x_anonymous_notes},這對社群來說很棒,謝謝!現在,我們鼓勵您%{contribute_by_yourself},這並不複雜,而且%{community_can_help}。
+      x_anonymous_notes:
+        one: '%{count} 則匿名註記'
+        other: '%{count} 則匿名註記'
+      counter_warning_guide_link:
+        text: 自己做出貢獻
+        url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide
+      counter_warning_forum_link:
+        text: 社群可以協助您
       advice: 你的註記已公開並可用於更新地圖,因此請不要輸入個人訊息,或是來自於具版權保護地圖的訊息以及目錄清單。
       add: 送出註記
+    new_readonly:
+      title: 新增註記
+      warning: 無法建立新註記,因為開放街圖 API 目前處於唯讀模式。
     notes_paging_nav:
       showing_page: 第 %{page} 頁
       next: 下一頁
       previous: 上一頁
+    not_found_message:
+      sorry: '抱歉,找不到註記 #%{id}。'
   javascripts:
     close: 關閉
     share:
@@ -2896,6 +2999,7 @@ zh-TW:
       center_marker: 將標記設為地圖中心點
       paste_html: 貼上 HTML 以嵌入網站
       view_larger_map: 查看更大的地圖
+      only_layers_exported_as_image: 僅以下圖層可匯出為影像:
     embed:
       report_problem: 回報問題
     key:
@@ -2927,17 +3031,17 @@ zh-TW:
         gps: 公開GPS軌跡
         overlays: 開啟覆蓋層,以為地圖解決問題
         title: 圖層
-      openstreetmap_contributors: OpenStreetMap 貢獻者
+      openstreetmap_contributors: 開放街圖貢獻者
       make_a_donation: 捐款
       website_and_api_terms: 網站和 API 條款
       cyclosm_credit: 由 %{osm_france_link} 代管的 %{cyclosm_link} 所提供圖磚樣式
-      osm_france: OpenStreetMap 法國
+      osm_france: 開放街圖法國
       thunderforest_credit: '%{thunderforest_link} 提供的圖磚'
       andy_allan: Andy Allan
       tracestrack_credit: '%{tracestrack_link} 提供的圖磚'
       tracestrack: 蹤跡地圖
       hotosm_credit: 由 %{osm_france_link} 代管的 %{hotosm_link} 所提供圖磚樣式
-      hotosm_name: OpenStreetMap 人道主義團隊
+      hotosm_name: 開放街圖人道主義團隊
     site:
       edit_tooltip: 編輯地圖
       edit_disabled_tooltip: 放大以編輯地圖
@@ -3050,6 +3154,8 @@ zh-TW:
       show_address: 顯示地址
       query_features: 查詢圖徵
       centre_map: 置此於地圖中央
+    home:
+      marker_title: 我家位置
   redactions:
     edit:
       heading: 編輯修訂
index e5c5772c38631603f79c5bcf0afe9c08cdc13635..3f4a12bd782e058360439c44e3c3ac30bdb15c48 100644 (file)
@@ -17,22 +17,25 @@ OpenStreetMap::Application.routes.draw do
     get "capabilities" => "capabilities#show"
     get "permissions" => "permissions#show"
 
-    put "changeset/create" => "changesets#create"
     post "changeset/:id/upload" => "changesets#upload", :as => :changeset_upload, :id => /\d+/
-    get "changeset/:id/download" => "changesets#download", :as => :changeset_download, :id => /\d+/
-    get "changeset/:id" => "changesets#show", :as => :changeset_show, :id => /\d+/
     post "changeset/:id/subscribe" => "changesets#subscribe", :as => :api_changeset_subscribe, :id => /\d+/
     post "changeset/:id/unsubscribe" => "changesets#unsubscribe", :as => :api_changeset_unsubscribe, :id => /\d+/
-    put "changeset/:id" => "changesets#update", :id => /\d+/
     put "changeset/:id/close" => "changesets#close", :as => :changeset_close, :id => /\d+/
-    get "changesets" => "changesets#index"
-    post "changeset/:id/comment" => "changeset_comments#create", :as => :changeset_comment, :id => /\d+/
-    post "changeset/comment/:id/hide" => "changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/
-    post "changeset/comment/:id/unhide" => "changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/
   end
 
   namespace :api, :path => "api/0.6" do
-    resources :changeset_comments, :only => :index
+    resources :changesets, :only => [:index, :create]
+    resources :changesets, :path => "changeset", :id => /\d+/, :only => [:show, :update] do
+      resource :download, :module => :changesets, :only => :show
+      resources :changeset_comments, :path => "comment", :only => :create
+    end
+    put "changeset/create" => "changesets#create", :as => nil
+
+    resources :changeset_comments, :id => /\d+/, :only => :index do
+      resource :visibility, :module => :changeset_comments, :only => [:create, :destroy]
+    end
+    post "changeset/comment/:changeset_comment_id/unhide" => "changeset_comments/visibilities#create", :changeset_comment_id => /\d+/, :as => nil
+    post "changeset/comment/:changeset_comment_id/hide" => "changeset_comments/visibilities#destroy", :changeset_comment_id => /\d+/, :as => nil
 
     resources :nodes, :only => [:index, :create]
     resources :nodes, :path => "node", :id => /\d+/, :only => [:show, :update, :destroy] do
@@ -297,10 +300,10 @@ OpenStreetMap::Application.routes.draw do
       resource :status, :only => :update
     end
   end
-  get "/user/:display_name/account", :to => redirect(:path => "/account/edit")
+  get "/user/:display_name/account", :to => redirect(:path => "/account")
   get "/user/:display_name/diary/comments(/:page)", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary_comments")
 
-  resource :account, :only => [:edit, :update, :destroy] do
+  resource :account, :only => [:show, :update, :destroy] do
     scope :module => :accounts do
       resource :terms, :only => [:show, :update]
       resource :pd_declaration, :only => [:show, :create]
@@ -308,6 +311,7 @@ OpenStreetMap::Application.routes.draw do
       resource :home, :only => :show
     end
   end
+  get "/account/edit", :to => redirect(:path => "/account"), :as => nil
 
   resource :dashboard, :only => [:show]
   resource :preferences, :only => [:show, :update]
index 46f37036f92d796243960cf1c7c8b63fdd91244e..b0c314cbc8258c2b3010377776c4990434229d99 100644 (file)
@@ -51,14 +51,14 @@ module OSM
 
   # Raised when to delete an already-deleted object.
   class APIAlreadyDeletedError < APIError
-    def initialize(object = "object", object_id = "")
-      @object = object
-      @object_id = object_id
+    def initialize(type = "object", id = "")
+      @type = type
+      @id = id
 
-      super("The #{object} with the id #{object_id} has already been deleted")
+      super("The #{type} with the id #{id} has already been deleted")
     end
 
-    attr_reader :object, :object_id
+    attr_reader :type, :id
 
     def status
       :gone
@@ -506,10 +506,10 @@ module OSM
   end
 
   # Parse a float, raising a specified exception on failure
-  def self.parse_float(str, klass, *args)
+  def self.parse_float(str, klass, *)
     Float(str)
   rescue StandardError
-    raise klass.new(*args)
+    raise klass.new(*)
   end
 
   # Construct a random token of a given length
index bdf9c37ca7359eec1f2cea57c2243178d8ce7791..84e695c6e75a3be7639bc97dd68e898ffd6dc7b7 100644 (file)
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module RichText
   SPAMMY_PHRASES = [
     "Business Description:", "Additional Keywords:"
@@ -144,7 +146,7 @@ module RichText
     end
 
     def truncated_text_content(element)
-      text = ""
+      text = +""
 
       append_text = lambda do |child|
         if child.type == :text
index 8983f3bd3bd1c4858d5aab8caa57a538d12b32a7..eb73d60290701656749df8598a15cdbc8cbb1d00 100644 (file)
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 ##
 # Encodes and decodes locations from Morton-coded "quad tile" strings. Each
 # variable-length string encodes to a precision of one pixel per tile (roughly,
@@ -23,7 +25,7 @@ module ShortLink
       # keep support for old shortlinks which use the @ character, now
       # replaced by the ~ character because twitter is horribly broken
       # and we can't have that.
-      str.tr!("@", "~")
+      str = str.tr("@", "~")
 
       str.each_char do |c|
         t = ARRAY.index c
@@ -57,7 +59,7 @@ module ShortLink
     def encode(lon, lat, z)
       code = interleave_bits(((lon + 180.0) * (2**32) / 360.0).to_i,
                              ((lat + 90.0) * (2**32) / 180.0).to_i)
-      str = ""
+      str = +""
       # add eight to the zoom level, which approximates an accuracy of
       # one pixel in a tile.
       ((z + 8) / 3.0).ceil.times do |i|
diff --git a/lib/tasks/annotate_rb.rake b/lib/tasks/annotate_rb.rake
new file mode 100644 (file)
index 0000000..1ad0ec3
--- /dev/null
@@ -0,0 +1,8 @@
+# This rake task was added by annotate_rb gem.
+
+# Can set `ANNOTATERB_SKIP_ON_DB_TASKS` to be anything to skip this
+if Rails.env.development? && ENV["ANNOTATERB_SKIP_ON_DB_TASKS"].nil?
+  require "annotate_rb"
+
+  AnnotateRb::Core.load_rake_tasks
+end
diff --git a/lib/tasks/auto_annotate_models.rake b/lib/tasks/auto_annotate_models.rake
deleted file mode 100644 (file)
index e5ea370..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# NOTE: only doing this in development as some production environments (Heroku)
-# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
-# NOTE: to have a dev-mode tool do its thing in production.
-if Rails.env.local?
-  task :set_annotation_options => :environment do
-    # 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",
-      "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
-    )
-  end
-
-  Annotate.load_tasks
-end
index 17f28a4e9cb4ef134a4ac205690159499ff3b9ad..8a8d7c8a44cf65da918491d5f187c39a535a316a 100644 (file)
@@ -5,7 +5,7 @@ def yarn_path
 end
 
 def config_file
-  Rails.root.join("config/eslint.js").to_s
+  Rails.root.join("config/eslint.config.mjs").to_s
 end
 
 namespace "eslint" do
index 371d01aff40a1c24a000a65e0e906f498df93fcb..f8eac3db914233eda8262f34e18f2a05cd80be97 100644 (file)
@@ -9,9 +9,11 @@
     "osm-community-index": "^5.2.0"
   },
   "devDependencies": {
+    "@types/jquery": "^3.5.0",
+    "@types/leaflet": "^1.9.0",
     "eslint": "^9.0.0",
     "eslint-plugin-erb": "^2.1.0",
-    "@stylistic/eslint-plugin-js": "^3.0.0",
+    "@stylistic/eslint-plugin-js": "^4.0.0",
     "eslint-formatter-compact": "^8.40.0"
   }
 }
index 58c8f7fe7141f95fee59b393beb65fc74dbe1d87..0945b6290045a444b6c35e163a968819fd6a88cc 100644 (file)
@@ -8,9 +8,9 @@ class ChangesetCommentApiCapabilityTest < ActiveSupport::TestCase
     scopes = Set.new
     ability = ApiAbility.new user, scopes
 
-    [:create, :destroy, :restore].each do |action|
-      assert ability.cannot? action, ChangesetComment
-    end
+    assert ability.cannot? :create, ChangesetComment
+    assert ability.cannot? :create, :changeset_comment_visibility
+    assert ability.cannot? :destroy, :changeset_comment_visibility
   end
 
   test "as a normal user with write_changeset_comments scope" do
@@ -18,13 +18,9 @@ class ChangesetCommentApiCapabilityTest < ActiveSupport::TestCase
     scopes = Set.new %w[write_changeset_comments]
     ability = ApiAbility.new user, scopes
 
-    [:destroy, :restore].each do |action|
-      assert ability.cannot? action, ChangesetComment
-    end
-
-    [:create].each do |action|
-      assert ability.can? action, ChangesetComment
-    end
+    assert ability.can? :create, ChangesetComment
+    assert ability.cannot? :create, :changeset_comment_visibility
+    assert ability.cannot? :destroy, :changeset_comment_visibility
   end
 
   test "as a moderator without scopes" do
@@ -32,9 +28,9 @@ class ChangesetCommentApiCapabilityTest < ActiveSupport::TestCase
     scopes = Set.new
     ability = ApiAbility.new user, scopes
 
-    [:create, :destroy, :restore].each do |action|
-      assert ability.cannot? action, ChangesetComment
-    end
+    assert ability.cannot? :create, ChangesetComment
+    assert ability.cannot? :create, :changeset_comment_visibility
+    assert ability.cannot? :destroy, :changeset_comment_visibility
   end
 
   test "as a moderator with write_changeset_comments scope" do
@@ -42,9 +38,9 @@ class ChangesetCommentApiCapabilityTest < ActiveSupport::TestCase
     scopes = Set.new %w[write_changeset_comments]
     ability = ApiAbility.new user, scopes
 
-    [:create, :destroy, :restore].each do |action|
-      assert ability.can? action, ChangesetComment
-    end
+    assert ability.can? :create, ChangesetComment
+    assert ability.can? :create, :changeset_comment_visibility
+    assert ability.can? :destroy, :changeset_comment_visibility
   end
 end
 
index be0d46f1e57d354eb20383b0c29d360ef9cf2aeb..fe3c8bad2f08b94d1c8943fc00dd3dbecf25556d 100644 (file)
@@ -42,7 +42,7 @@ module Accounts
 
       post account_pd_declaration_path
 
-      assert_redirected_to edit_account_path
+      assert_redirected_to account_path
       assert_nil flash[:notice]
       assert_equal "You didn't confirm that you consider your edits to be in the Public Domain.", flash[:warning]
 
index 55b30506b41f1bba226869a57125ba088e91bb9b..ea8cd4e9fff5ce39523b04db17b53dd81d2d6b5a 100644 (file)
@@ -29,7 +29,7 @@ module Accounts
       session_for(user)
 
       get account_terms_path
-      assert_redirected_to edit_account_path
+      assert_redirected_to account_path
     end
 
     def test_show_not_seen_without_referer
@@ -53,7 +53,7 @@ module Accounts
       session_for(user)
 
       put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 }
-      assert_redirected_to edit_account_path
+      assert_redirected_to account_path
       assert_equal "Thanks for accepting the new contributor terms!", flash[:notice]
 
       user.reload
@@ -82,8 +82,8 @@ module Accounts
       user = create(:user, :terms_seen => false, :terms_agreed => nil)
       session_for(user)
 
-      get edit_account_path
-      assert_redirected_to account_terms_path(:referer => "/account/edit")
+      get account_path
+      assert_redirected_to account_terms_path(:referer => account_path)
     end
   end
 end
index ce8a62242060e295f83892f2852a221415a61519..199bf4aab53ac23825d3ed6de8b25d4186510ac2 100644 (file)
@@ -5,16 +5,23 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
   # test all routes which lead to this controller
   def test_routes
     assert_routing(
-      { :path => "/account/edit", :method => :get },
-      { :controller => "accounts", :action => "edit" }
+      { :path => "/account", :method => :get },
+      { :controller => "accounts", :action => "show" }
     )
     assert_routing(
       { :path => "/account", :method => :put },
       { :controller => "accounts", :action => "update" }
     )
+    assert_routing(
+      { :path => "/account", :method => :delete },
+      { :controller => "accounts", :action => "destroy" }
+    )
+
+    get "/account/edit"
+    assert_redirected_to "/account"
   end
 
-  def test_account
+  def test_show_and_update
     # Get a user to work with - note that this user deliberately
     # conflicts with uppercase_user in the email and display name
     # fields to test that we can change other fields without any
@@ -24,14 +31,14 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
 
     # Make sure that you are redirected to the login page when
     # you are not logged in
-    get edit_account_path
-    assert_redirected_to login_path(:referer => "/account/edit")
+    get account_path
+    assert_redirected_to login_path(:referer => account_path)
 
     # Make sure we get the page when we are logged in as the right user
     session_for(user)
-    get edit_account_path
+    get account_path
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select "form#accountForm" do |form|
       assert_equal "post", form.attr("method").to_s
       assert_select "input[name='_method']", true
@@ -41,9 +48,9 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
     # Updating the description using GET should fail
     user.description = "new description"
     user.preferred_editor = "default"
-    get edit_account_path, :params => { :user => user.attributes }
+    get account_path, :params => { :user => user.attributes }
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_not_equal user.description, User.find(user.id).description
 
     # Adding external authentication should redirect to the auth provider
@@ -56,7 +63,7 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
     new_attributes = user.attributes.dup.merge(:display_name => create(:user).display_name)
     patch account_path, :params => { :user => new_attributes }
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", false
     assert_select "form#accountForm > div > input.is-invalid#user_display_name"
 
@@ -64,17 +71,17 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
     new_attributes = user.attributes.dup.merge(:display_name => create(:user).display_name.upcase)
     patch account_path, :params => { :user => new_attributes }
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", false
     assert_select "form#accountForm > div > input.is-invalid#user_display_name"
 
     # Changing name to one that doesn't exist should work
     new_attributes = user.attributes.dup.merge(:display_name => "new tester")
     patch account_path, :params => { :user => new_attributes }
-    assert_redirected_to edit_account_url
-    get edit_account_path
+    assert_redirected_to account_path
+    follow_redirect!
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", /^User information updated successfully/
     assert_select "form#accountForm > div > input#user_display_name[value=?]", "new tester"
 
@@ -89,7 +96,7 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
       end
     end
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", false
     assert_select "form#accountForm > div > input.is-invalid#user_new_email"
 
@@ -101,7 +108,7 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
       end
     end
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", false
     assert_select "form#accountForm > div > input.is-invalid#user_new_email"
 
@@ -112,10 +119,10 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
         patch account_path, :params => { :user => user.attributes }
       end
     end
-    assert_redirected_to edit_account_url
-    get edit_account_path
+    assert_redirected_to account_path
+    follow_redirect!
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", /^User information updated successfully/
     assert_select "form#accountForm > div > input#user_new_email[value=?]", user.new_email
     email = ActionMailer::Base.deliveries.first
@@ -123,19 +130,19 @@ class AccountsControllerTest < ActionDispatch::IntegrationTest
     assert_equal user.new_email, email.to.first
   end
 
-  def test_private_account
+  def test_show_private_account
     user = create(:user, :data_public => false)
 
     # Make sure that you are redirected to the login page when
     # you are not logged in
-    get edit_account_path
-    assert_redirected_to login_path(:referer => "/account/edit")
+    get account_path
+    assert_redirected_to login_path(:referer => account_path)
 
     # Make sure we get the page when we are logged in as the right user
     session_for(user)
-    get edit_account_path
+    get account_path
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select "form#accountForm" do |form|
       assert_equal "post", form.attr("method").to_s
       assert_select "input[name='_method']", true
diff --git a/test/controllers/api/changeset_comments/visibilities_controller_test.rb b/test/controllers/api/changeset_comments/visibilities_controller_test.rb
new file mode 100644 (file)
index 0000000..1e8b562
--- /dev/null
@@ -0,0 +1,253 @@
+require "test_helper"
+
+module Api
+  module ChangesetComments
+    class VisibilitiesControllerTest < ActionDispatch::IntegrationTest
+      ##
+      # test all routes which lead to this controller
+      def test_routes
+        assert_routing(
+          { :path => "/api/0.6/changeset_comments/1/visibility", :method => :post },
+          { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1" }
+        )
+        assert_routing(
+          { :path => "/api/0.6/changeset_comments/1/visibility.json", :method => :post },
+          { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1", :format => "json" }
+        )
+        assert_routing(
+          { :path => "/api/0.6/changeset_comments/1/visibility", :method => :delete },
+          { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1" }
+        )
+        assert_routing(
+          { :path => "/api/0.6/changeset_comments/1/visibility.json", :method => :delete },
+          { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1", :format => "json" }
+        )
+
+        assert_recognizes(
+          { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1" },
+          { :path => "/api/0.6/changeset/comment/1/unhide", :method => :post }
+        )
+        assert_recognizes(
+          { :controller => "api/changeset_comments/visibilities", :action => "create", :changeset_comment_id => "1", :format => "json" },
+          { :path => "/api/0.6/changeset/comment/1/unhide.json", :method => :post }
+        )
+        assert_recognizes(
+          { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1" },
+          { :path => "/api/0.6/changeset/comment/1/hide", :method => :post }
+        )
+        assert_recognizes(
+          { :controller => "api/changeset_comments/visibilities", :action => "destroy", :changeset_comment_id => "1", :format => "json" },
+          { :path => "/api/0.6/changeset/comment/1/hide.json", :method => :post }
+        )
+      end
+
+      def test_create_by_unauthorized
+        comment = create(:changeset_comment, :visible => false)
+
+        post api_changeset_comment_visibility_path(comment)
+
+        assert_response :unauthorized
+        assert_not comment.reload.visible
+      end
+
+      def test_create_by_normal_user
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header
+
+        post api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        assert_response :forbidden
+        assert_not comment.reload.visible
+      end
+
+      def test_create_on_missing_comment
+        auth_header = bearer_authorization_header create(:moderator_user)
+
+        post api_changeset_comment_visibility_path(999111), :headers => auth_header
+
+        assert_response :not_found
+      end
+
+      def test_create_without_required_scope
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
+
+        post api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        assert_response :forbidden
+        assert_not comment.reload.visible
+      end
+
+      def test_create_with_write_changeset_comments_scope
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
+
+        post api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => true)
+      end
+
+      def test_create_with_write_changeset_comments_scope_json
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
+
+        post api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => true)
+      end
+
+      def test_create_with_write_api_scope
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => true)
+      end
+
+      def test_create_with_write_api_scope_json
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => true)
+      end
+
+      def test_create_at_legacy_route
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post "/api/0.6/changeset/comment/#{comment.id}/unhide", :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => true)
+      end
+
+      def test_create_at_legacy_route_json
+        comment = create(:changeset_comment, :visible => false)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post "/api/0.6/changeset/comment/#{comment.id}/unhide.json", :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => true)
+      end
+
+      def test_destroy_by_unauthorized
+        comment = create(:changeset_comment)
+
+        delete api_changeset_comment_visibility_path(comment)
+
+        assert_response :unauthorized
+        assert comment.reload.visible
+      end
+
+      def test_destroy_by_normal_user
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header
+
+        delete api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        assert_response :forbidden
+        assert comment.reload.visible
+      end
+
+      def test_destroy_on_missing_comment
+        auth_header = bearer_authorization_header create(:moderator_user)
+
+        delete api_changeset_comment_visibility_path(999111), :headers => auth_header
+
+        assert_response :not_found
+      end
+
+      def test_destroy_without_required_scope
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
+
+        delete api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        assert_response :forbidden
+        assert comment.reload.visible
+      end
+
+      def test_destroy_with_write_changeset_comments_scope
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
+
+        delete api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => false)
+      end
+
+      def test_destroy_with_write_changeset_comments_scope_json
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
+
+        delete api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => false)
+      end
+
+      def test_destroy_with_write_api_scope
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        delete api_changeset_comment_visibility_path(comment), :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => false)
+      end
+
+      def test_destroy_with_write_api_scope_json
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        delete api_changeset_comment_visibility_path(comment, :format => "json"), :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => false)
+      end
+
+      def test_destroy_at_legacy_route
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post "/api/0.6/changeset/comment/#{comment.id}/hide", :headers => auth_header
+
+        check_successful_response_xml(comment, :comment_visible => false)
+      end
+
+      def test_destroy_at_legacy_route_json
+        comment = create(:changeset_comment)
+        auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
+
+        post "/api/0.6/changeset/comment/#{comment.id}/hide.json", :headers => auth_header
+
+        check_successful_response_json(comment, :comment_visible => false)
+      end
+
+      private
+
+      def check_successful_response_xml(comment, comment_visible:)
+        assert_response :success
+        assert_equal "application/xml", response.media_type
+        assert_dom "osm", 1 do
+          assert_dom "> changeset", 1 do
+            assert_dom "> @id", comment.changeset_id.to_s
+            assert_dom "> @comments_count", comment_visible ? "1" : "0"
+          end
+        end
+
+        assert_equal comment_visible, comment.reload.visible
+      end
+
+      def check_successful_response_json(comment, comment_visible:)
+        assert_response :success
+        assert_equal "application/json", response.media_type
+        js = ActiveSupport::JSON.decode(@response.body)
+        assert_not_nil js["changeset"]
+        assert_equal comment.changeset_id, js["changeset"]["id"]
+        assert_equal comment_visible ? 1 : 0, js["changeset"]["comments_count"]
+
+        assert_equal comment_visible, comment.reload.visible
+      end
+    end
+  end
+end
index 72463ed676e3ae39044e8473da70929260354909..b16ea4502120a02e5be5024a38ade2b631467d7e 100644 (file)
@@ -15,27 +15,11 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/changeset/1/comment", :method => :post },
-        { :controller => "api/changeset_comments", :action => "create", :id => "1" }
+        { :controller => "api/changeset_comments", :action => "create", :changeset_id => "1" }
       )
       assert_routing(
         { :path => "/api/0.6/changeset/1/comment.json", :method => :post },
-        { :controller => "api/changeset_comments", :action => "create", :id => "1", :format => "json" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/changeset/comment/1/hide", :method => :post },
-        { :controller => "api/changeset_comments", :action => "destroy", :id => "1" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/changeset/comment/1/hide.json", :method => :post },
-        { :controller => "api/changeset_comments", :action => "destroy", :id => "1", :format => "json" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/changeset/comment/1/unhide", :method => :post },
-        { :controller => "api/changeset_comments", :action => "restore", :id => "1" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/changeset/comment/1/unhide.json", :method => :post },
-        { :controller => "api/changeset_comments", :action => "restore", :id => "1", :format => "json" }
+        { :controller => "api/changeset_comments", :action => "create", :changeset_id => "1", :format => "json" }
       )
     end
 
@@ -81,35 +65,35 @@ module Api
 
     def test_create_by_unauthorized
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(create(:changeset, :closed), :text => "This is a comment")
+        post api_changeset_changeset_comments_path(create(:changeset, :closed), :text => "This is a comment")
         assert_response :unauthorized
       end
     end
 
     def test_create_on_missing_changeset
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(999111, :text => "This is a comment"), :headers => bearer_authorization_header
+        post api_changeset_changeset_comments_path(999111, :text => "This is a comment"), :headers => bearer_authorization_header
         assert_response :not_found
       end
     end
 
     def test_create_on_open_changeset
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(create(:changeset), :text => "This is a comment"), :headers => bearer_authorization_header
+        post api_changeset_changeset_comments_path(create(:changeset), :text => "This is a comment"), :headers => bearer_authorization_header
         assert_response :conflict
       end
     end
 
     def test_create_without_text
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(create(:changeset, :closed)), :headers => bearer_authorization_header
+        post api_changeset_changeset_comments_path(create(:changeset, :closed)), :headers => bearer_authorization_header
         assert_response :bad_request
       end
     end
 
     def test_create_with_empty_text
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(create(:changeset, :closed), :text => ""), :headers => bearer_authorization_header
+        post api_changeset_changeset_comments_path(create(:changeset, :closed), :text => ""), :headers => bearer_authorization_header
         assert_response :bad_request
       end
     end
@@ -120,7 +104,7 @@ module Api
       changeset = create(:changeset, :closed)
 
       assert_difference "ChangesetComment.count", 0 do
-        post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
         assert_response :forbidden
       end
     end
@@ -131,7 +115,7 @@ module Api
       changeset = create(:changeset, :closed)
 
       assert_difference "ChangesetComment.count", 0 do
-        post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
         assert_response :forbidden
       end
     end
@@ -142,7 +126,7 @@ module Api
       changeset = create(:changeset, :closed)
 
       assert_difference "ChangesetComment.count", 1 do
-        post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
         assert_response :success
       end
 
@@ -159,7 +143,7 @@ module Api
       changeset = create(:changeset, :closed)
 
       assert_difference "ChangesetComment.count", 1 do
-        post changeset_comment_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset), :params => { :text => "This is a comment" }, :headers => auth_header
         assert_response :success
       end
 
@@ -177,7 +161,7 @@ module Api
       assert_difference "ChangesetComment.count", 1 do
         assert_no_difference "ActionMailer::Base.deliveries.size" do
           perform_enqueued_jobs do
-            post changeset_comment_path(changeset, :text => "This is a comment"), :headers => auth_header
+            post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header
             assert_response :success
           end
         end
@@ -193,7 +177,7 @@ module Api
       assert_difference "ChangesetComment.count", 1 do
         assert_no_difference "ActionMailer::Base.deliveries.size" do
           perform_enqueued_jobs do
-            post changeset_comment_path(changeset, :text => "This is a comment"), :headers => auth_header
+            post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header
             assert_response :success
           end
         end
@@ -209,7 +193,7 @@ module Api
       assert_difference "ChangesetComment.count", 1 do
         assert_no_difference "ActionMailer::Base.deliveries.size" do
           perform_enqueued_jobs do
-            post changeset_comment_path(changeset, :text => "This is a comment"), :headers => auth_header
+            post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header
             assert_response :success
           end
         end
@@ -226,7 +210,7 @@ module Api
       assert_difference "ChangesetComment.count", 1 do
         assert_difference "ActionMailer::Base.deliveries.size", 1 do
           perform_enqueued_jobs do
-            post changeset_comment_path(changeset, :text => "This is a comment"), :headers => auth_header
+            post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header
             assert_response :success
           end
         end
@@ -250,7 +234,7 @@ module Api
       assert_difference "ChangesetComment.count", 1 do
         assert_difference "ActionMailer::Base.deliveries.size", 2 do
           perform_enqueued_jobs do
-            post changeset_comment_path(changeset, :text => "This is a comment"), :headers => auth_header
+            post api_changeset_changeset_comments_path(changeset, :text => "This is a comment"), :headers => auth_header
             assert_response :success
           end
         end
@@ -277,13 +261,13 @@ module Api
 
       assert_difference "ChangesetComment.count", Settings.initial_changeset_comments_per_hour do
         1.upto(Settings.initial_changeset_comments_per_hour) do |count|
-          post changeset_comment_path(changeset, :text => "Comment #{count}"), :headers => auth_header
+          post api_changeset_changeset_comments_path(changeset, :text => "Comment #{count}"), :headers => auth_header
           assert_response :success
         end
       end
 
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(changeset, :text => "One comment too many"), :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset, :text => "One comment too many"), :headers => auth_header
         assert_response :too_many_requests
       end
     end
@@ -299,13 +283,13 @@ module Api
 
       assert_difference "ChangesetComment.count", Settings.max_changeset_comments_per_hour do
         1.upto(Settings.max_changeset_comments_per_hour) do |count|
-          post changeset_comment_path(changeset, :text => "Comment #{count}"), :headers => auth_header
+          post api_changeset_changeset_comments_path(changeset, :text => "Comment #{count}"), :headers => auth_header
           assert_response :success
         end
       end
 
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(changeset, :text => "One comment too many"), :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset, :text => "One comment too many"), :headers => auth_header
         assert_response :too_many_requests
       end
     end
@@ -321,13 +305,13 @@ module Api
 
       assert_difference "ChangesetComment.count", Settings.initial_changeset_comments_per_hour / 2 do
         1.upto(Settings.initial_changeset_comments_per_hour / 2) do |count|
-          post changeset_comment_path(changeset, :text => "Comment #{count}"), :headers => auth_header
+          post api_changeset_changeset_comments_path(changeset, :text => "Comment #{count}"), :headers => auth_header
           assert_response :success
         end
       end
 
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(changeset, :text => "One comment too many"), :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset, :text => "One comment too many"), :headers => auth_header
         assert_response :too_many_requests
       end
     end
@@ -342,131 +326,17 @@ module Api
 
       assert_difference "ChangesetComment.count", Settings.moderator_changeset_comments_per_hour do
         1.upto(Settings.moderator_changeset_comments_per_hour) do |count|
-          post changeset_comment_path(changeset, :text => "Comment #{count}"), :headers => auth_header
+          post api_changeset_changeset_comments_path(changeset, :text => "Comment #{count}"), :headers => auth_header
           assert_response :success
         end
       end
 
       assert_no_difference "ChangesetComment.count" do
-        post changeset_comment_path(changeset, :text => "One comment too many"), :headers => auth_header
+        post api_changeset_changeset_comments_path(changeset, :text => "One comment too many"), :headers => auth_header
         assert_response :too_many_requests
       end
     end
 
-    def test_hide_by_unauthorized
-      comment = create(:changeset_comment)
-
-      post changeset_comment_hide_path(comment)
-
-      assert_response :unauthorized
-      assert comment.reload.visible
-    end
-
-    def test_hide_by_normal_user
-      comment = create(:changeset_comment)
-      auth_header = bearer_authorization_header
-
-      post changeset_comment_hide_path(comment), :headers => auth_header
-
-      assert_response :forbidden
-      assert comment.reload.visible
-    end
-
-    def test_hide_missing_comment
-      auth_header = bearer_authorization_header create(:moderator_user)
-
-      post changeset_comment_hide_path(999111), :headers => auth_header
-
-      assert_response :not_found
-    end
-
-    def test_hide_without_required_scope
-      comment = create(:changeset_comment)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
-
-      post changeset_comment_hide_path(comment), :headers => auth_header
-
-      assert_response :forbidden
-      assert comment.reload.visible
-    end
-
-    def test_hide_with_write_changeset_comments_scope
-      comment = create(:changeset_comment)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
-
-      post changeset_comment_hide_path(comment), :headers => auth_header
-
-      assert_response :success
-      assert_not comment.reload.visible
-    end
-
-    def test_hide_with_write_api_scope
-      comment = create(:changeset_comment)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
-
-      post changeset_comment_hide_path(comment), :headers => auth_header
-
-      assert_response :success
-      assert_not comment.reload.visible
-    end
-
-    def test_unhide_by_unauthorized
-      comment = create(:changeset_comment, :visible => false)
-
-      post changeset_comment_unhide_path(comment)
-
-      assert_response :unauthorized
-      assert_not comment.reload.visible
-    end
-
-    def test_unhide_by_normal_user
-      comment = create(:changeset_comment, :visible => false)
-      auth_header = bearer_authorization_header
-
-      post changeset_comment_unhide_path(comment), :headers => auth_header
-
-      assert_response :forbidden
-      assert_not comment.reload.visible
-    end
-
-    def test_unhide_missing_comment
-      auth_header = bearer_authorization_header create(:moderator_user)
-
-      post changeset_comment_unhide_path(999111), :headers => auth_header
-
-      assert_response :not_found
-    end
-
-    def test_unhide_without_required_scope
-      comment = create(:changeset_comment, :visible => false)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[read_prefs]
-
-      post changeset_comment_unhide_path(comment), :headers => auth_header
-
-      assert_response :forbidden
-      assert_not comment.reload.visible
-    end
-
-    def test_unhide_with_write_changeset_comments_scope
-      comment = create(:changeset_comment, :visible => false)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_changeset_comments]
-
-      post changeset_comment_unhide_path(comment), :headers => auth_header
-
-      assert_response :success
-      assert comment.reload.visible
-    end
-
-    def test_unhide_with_write_api_scope
-      comment = create(:changeset_comment, :visible => false)
-      auth_header = bearer_authorization_header create(:moderator_user), :scopes => %w[write_api]
-
-      post changeset_comment_unhide_path(comment), :headers => auth_header
-
-      assert_response :success
-      assert comment.reload.visible
-    end
-
     private
 
     ##
diff --git a/test/controllers/api/changesets/downloads_controller_test.rb b/test/controllers/api/changesets/downloads_controller_test.rb
new file mode 100644 (file)
index 0000000..9eda6ec
--- /dev/null
@@ -0,0 +1,309 @@
+require "test_helper"
+
+module Api
+  module Changesets
+    class DownloadsControllerTest < ActionDispatch::IntegrationTest
+      ##
+      # test all routes which lead to this controller
+      def test_routes
+        assert_routing(
+          { :path => "/api/0.6/changeset/1/download", :method => :get },
+          { :controller => "api/changesets/downloads", :action => "show", :changeset_id => "1" }
+        )
+      end
+
+      def test_show_empty
+        changeset = create(:changeset)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
+          assert_dom "create", 0
+          assert_dom "modify", 0
+          assert_dom "delete", 0
+        end
+      end
+
+      def test_show_created_elements
+        changeset = create(:changeset)
+        old_node1 = create(:old_node, :changeset => changeset, :version => 1, :latitude => (60.12345 * OldNode::SCALE).to_i, :longitude => (30.54321 * OldNode::SCALE).to_i)
+        create(:old_node_tag, :old_node => old_node1, :k => "highway", :v => "crossing")
+        create(:old_node_tag, :old_node => old_node1, :k => "crossing", :v => "marked")
+        old_node2 = create(:old_node, :changeset => changeset, :version => 1, :latitude => (60.23456 * OldNode::SCALE).to_i, :longitude => (30.65432 * OldNode::SCALE).to_i)
+        create(:old_node_tag, :old_node => old_node2, :k => "highway", :v => "traffic_signals")
+        old_way = create(:old_way, :changeset => changeset, :version => 1)
+        create(:old_way_tag, :old_way => old_way, :k => "highway", :v => "secondary")
+        create(:old_way_tag, :old_way => old_way, :k => "name", :v => "Some Street")
+        create(:old_way_node, :old_way => old_way, :node => old_node1.current_node, :sequence_id => 1)
+        create(:old_way_node, :old_way => old_way, :node => old_node2.current_node, :sequence_id => 2)
+        old_relation = create(:old_relation, :changeset => changeset, :version => 1)
+        create(:old_relation_tag, :old_relation => old_relation, :k => "type", :v => "restriction")
+        create(:old_relation_member, :old_relation => old_relation, :member => old_way.current_way, :member_role => "from", :sequence_id => 1)
+        create(:old_relation_member, :old_relation => old_relation, :member => old_node2.current_node, :member_role => "via", :sequence_id => 2)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
+          assert_dom "create", 4 do
+            assert_dom "node", 2
+            assert_dom "node[id='#{old_node1.node_id}']", 1 do
+              assert_dom "> @version", "1"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 2
+              assert_dom "tag[k='highway'][v='crossing']"
+              assert_dom "tag[k='crossing'][v='marked']"
+              assert_dom "> @lat", "60.1234500"
+              assert_dom "> @lon", "30.5432100"
+            end
+            assert_dom "node[id='#{old_node2.node_id}']", 1 do
+              assert_dom "> @version", "1"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 1
+              assert_dom "tag[k='highway'][v='traffic_signals']"
+              assert_dom "> @lat", "60.2345600"
+              assert_dom "> @lon", "30.6543200"
+            end
+            assert_dom "way", 1
+            assert_dom "way[id='#{old_way.way_id}']", 1 do
+              assert_dom "> @version", "1"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 2
+              assert_dom "tag[k='highway'][v='secondary']"
+              assert_dom "tag[k='name'][v='Some Street']"
+              assert_dom "nd", 2 do |dom_nds|
+                assert_dom dom_nds[0], "> @ref", old_node1.node_id.to_s
+                assert_dom dom_nds[1], "> @ref", old_node2.node_id.to_s
+              end
+            end
+            assert_dom "relation", 1
+            assert_dom "relation[id='#{old_relation.relation_id}']", 1 do
+              assert_dom "> @version", "1"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 1
+              assert_dom "tag[k='type'][v='restriction']"
+              assert_dom "member", 2 do |dom_members|
+                assert_dom dom_members[0], "> @type", "way"
+                assert_dom dom_members[0], "> @ref", old_way.way_id.to_s
+                assert_dom dom_members[0], "> @role", "from"
+                assert_dom dom_members[1], "> @type", "node"
+                assert_dom dom_members[1], "> @ref", old_node2.node_id.to_s
+                assert_dom dom_members[1], "> @role", "via"
+              end
+            end
+          end
+        end
+      end
+
+      def test_show_edited_elements
+        changeset = create(:changeset)
+        old_node1 = create(:old_node, :changeset => changeset, :version => 2, :latitude => (60.12345 * OldNode::SCALE).to_i, :longitude => (30.54321 * OldNode::SCALE).to_i)
+        create(:old_node_tag, :old_node => old_node1, :k => "highway", :v => "crossing")
+        create(:old_node_tag, :old_node => old_node1, :k => "crossing", :v => "marked")
+        old_node2 = create(:old_node, :changeset => changeset, :version => 2, :latitude => (60.23456 * OldNode::SCALE).to_i, :longitude => (30.65432 * OldNode::SCALE).to_i)
+        create(:old_node_tag, :old_node => old_node2, :k => "highway", :v => "traffic_signals")
+        old_way = create(:old_way, :changeset => changeset, :version => 2)
+        create(:old_way_tag, :old_way => old_way, :k => "highway", :v => "secondary")
+        create(:old_way_tag, :old_way => old_way, :k => "name", :v => "Some Street")
+        create(:old_way_node, :old_way => old_way, :node => old_node1.current_node, :sequence_id => 1)
+        create(:old_way_node, :old_way => old_way, :node => old_node2.current_node, :sequence_id => 2)
+        old_relation = create(:old_relation, :changeset => changeset, :version => 2)
+        create(:old_relation_tag, :old_relation => old_relation, :k => "type", :v => "restriction")
+        create(:old_relation_member, :old_relation => old_relation, :member => old_way.current_way, :member_role => "from", :sequence_id => 1)
+        create(:old_relation_member, :old_relation => old_relation, :member => old_node2.current_node, :member_role => "via", :sequence_id => 2)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
+          assert_dom "modify", 4 do
+            assert_dom "node", 2
+            assert_dom "node[id='#{old_node1.node_id}']", 1 do
+              assert_dom "> @version", "2"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 2
+              assert_dom "tag[k='highway'][v='crossing']"
+              assert_dom "tag[k='crossing'][v='marked']"
+              assert_dom "> @lat", "60.1234500"
+              assert_dom "> @lon", "30.5432100"
+            end
+            assert_dom "node[id='#{old_node2.node_id}']", 1 do
+              assert_dom "> @version", "2"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 1
+              assert_dom "tag[k='highway'][v='traffic_signals']"
+              assert_dom "> @lat", "60.2345600"
+              assert_dom "> @lon", "30.6543200"
+            end
+            assert_dom "way", 1
+            assert_dom "way[id='#{old_way.way_id}']", 1 do
+              assert_dom "> @version", "2"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 2
+              assert_dom "tag[k='highway'][v='secondary']"
+              assert_dom "tag[k='name'][v='Some Street']"
+              assert_dom "nd", 2 do |dom_nds|
+                assert_dom dom_nds[0], "> @ref", old_node1.node_id.to_s
+                assert_dom dom_nds[1], "> @ref", old_node2.node_id.to_s
+              end
+            end
+            assert_dom "relation", 1
+            assert_dom "relation[id='#{old_relation.relation_id}']", 1 do
+              assert_dom "> @version", "2"
+              assert_dom "> @visible", "true"
+              assert_dom "tag", 1
+              assert_dom "tag[k='type'][v='restriction']"
+              assert_dom "member", 2 do |dom_members|
+                assert_dom dom_members[0], "> @type", "way"
+                assert_dom dom_members[0], "> @ref", old_way.way_id.to_s
+                assert_dom dom_members[0], "> @role", "from"
+                assert_dom dom_members[1], "> @type", "node"
+                assert_dom dom_members[1], "> @ref", old_node2.node_id.to_s
+                assert_dom dom_members[1], "> @role", "via"
+              end
+            end
+          end
+        end
+      end
+
+      def test_show_deleted_elements
+        changeset = create(:changeset)
+        old_node1 = create(:old_node, :changeset => changeset, :version => 3, :visible => false)
+        old_node2 = create(:old_node, :changeset => changeset, :version => 3, :visible => false)
+        old_way = create(:old_way, :changeset => changeset, :version => 3, :visible => false)
+        old_relation = create(:old_relation, :changeset => changeset, :version => 3, :visible => false)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
+          assert_dom "delete", 4 do
+            assert_dom "node", 2
+            assert_dom "node[id='#{old_node1.node_id}']", 1 do
+              assert_dom "> @version", "3"
+              assert_dom "> @visible", "false"
+            end
+            assert_dom "node[id='#{old_node2.node_id}']", 1 do
+              assert_dom "> @version", "3"
+              assert_dom "> @visible", "false"
+            end
+            assert_dom "way", 1
+            assert_dom "way[id='#{old_way.way_id}']", 1 do
+              assert_dom "> @version", "3"
+              assert_dom "> @visible", "false"
+            end
+            assert_dom "relation", 1
+            assert_dom "relation[id='#{old_relation.relation_id}']", 1 do
+              assert_dom "> @version", "3"
+              assert_dom "> @visible", "false"
+            end
+          end
+        end
+      end
+
+      def test_show_should_sort_by_timestamp
+        changeset = create(:changeset)
+        node1 = create(:old_node, :version => 2, :timestamp => "2020-02-01", :changeset => changeset)
+        node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "modify", :count => 2 do |modify|
+          assert_dom modify[0], ">node", :count => 1 do |node|
+            assert_dom node, ">@id", node0.node_id.to_s
+          end
+          assert_dom modify[1], ">node", :count => 1 do |node|
+            assert_dom node, ">@id", node1.node_id.to_s
+          end
+        end
+      end
+
+      def test_show_should_sort_by_version
+        changeset = create(:changeset)
+        node1 = create(:old_node, :version => 3, :timestamp => "2020-01-01", :changeset => changeset)
+        node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
+
+        get api_changeset_download_path(changeset)
+
+        assert_response :success
+        assert_dom "modify", :count => 2 do |modify|
+          assert_dom modify[0], ">node", :count => 1 do |node|
+            assert_dom node, ">@id", node0.node_id.to_s
+          end
+          assert_dom modify[1], ">node", :count => 1 do |node|
+            assert_dom node, ">@id", node1.node_id.to_s
+          end
+        end
+      end
+
+      ##
+      # check that the changeset download for a changeset with a redacted
+      # element in it doesn't contain that element.
+      def test_show_redacted
+        check_redacted do |changeset|
+          get api_changeset_download_path(changeset)
+        end
+      end
+
+      def test_show_redacted_unauthorized
+        check_redacted do |changeset|
+          get api_changeset_download_path(changeset, :show_redactions => "true")
+        end
+      end
+
+      def test_show_redacted_normal_user
+        auth_header = bearer_authorization_header
+
+        check_redacted do |changeset|
+          get api_changeset_download_path(changeset, :show_redactions => "true"), :headers => auth_header
+        end
+      end
+
+      def test_show_redacted_moderator_without_show_redactions
+        auth_header = bearer_authorization_header create(:moderator_user)
+
+        check_redacted do |changeset|
+          get api_changeset_download_path(changeset), :headers => auth_header
+        end
+      end
+
+      def test_show_redacted_moderator
+        auth_header = bearer_authorization_header create(:moderator_user)
+
+        check_redacted(:redacted_included => true) do |changeset|
+          get api_changeset_download_path(changeset, :show_redactions => "true"), :headers => auth_header
+        end
+      end
+
+      private
+
+      def check_redacted(redacted_included: false)
+        redaction = create(:redaction)
+        changeset = create(:changeset)
+        node = create(:node, :with_history, :version => 2, :changeset => changeset)
+        node_v1 = node.old_nodes.find_by(:version => 1)
+        node_v1.redact!(redaction)
+        way = create(:way, :with_history, :version => 2, :changeset => changeset)
+        way_v1 = way.old_ways.find_by(:version => 1)
+        way_v1.redact!(redaction)
+        relation = create(:relation, :with_history, :version => 2, :changeset => changeset)
+        relation_v1 = relation.old_relations.find_by(:version => 1)
+        relation_v1.redact!(redaction)
+
+        yield changeset
+
+        assert_response :success
+        assert_dom "osmChange", 1 do
+          assert_dom "node[id='#{node.id}'][version='1']", redacted_included ? 1 : 0
+          assert_dom "node[id='#{node.id}'][version='2']", 1
+          assert_dom "way[id='#{way.id}'][version='1']", redacted_included ? 1 : 0
+          assert_dom "way[id='#{way.id}'][version='2']", 1
+          assert_dom "relation[id='#{relation.id}'][version='1']", redacted_included ? 1 : 0
+          assert_dom "relation[id='#{relation.id}'][version='2']", 1
+        end
+      end
+    end
+  end
+end
index a1880f0534a03b87650ab4e7fa59d2b40dcb46ed..87deb3bdfcb2c1b064eb8b7be3ed8c4fd5b9836b 100644 (file)
@@ -6,16 +6,16 @@ module Api
     # test all routes which lead to this controller
     def test_routes
       assert_routing(
-        { :path => "/api/0.6/changeset/create", :method => :put },
-        { :controller => "api/changesets", :action => "create" }
+        { :path => "/api/0.6/changesets", :method => :get },
+        { :controller => "api/changesets", :action => "index" }
       )
       assert_routing(
-        { :path => "/api/0.6/changeset/1/upload", :method => :post },
-        { :controller => "api/changesets", :action => "upload", :id => "1" }
+        { :path => "/api/0.6/changesets.json", :method => :get },
+        { :controller => "api/changesets", :action => "index", :format => "json" }
       )
       assert_routing(
-        { :path => "/api/0.6/changeset/1/download", :method => :get },
-        { :controller => "api/changesets", :action => "download", :id => "1" }
+        { :path => "/api/0.6/changesets", :method => :post },
+        { :controller => "api/changesets", :action => "create" }
       )
       assert_routing(
         { :path => "/api/0.6/changeset/1", :method => :get },
@@ -25,6 +25,14 @@ module Api
         { :path => "/api/0.6/changeset/1.json", :method => :get },
         { :controller => "api/changesets", :action => "show", :id => "1", :format => "json" }
       )
+      assert_routing(
+        { :path => "/api/0.6/changeset/1", :method => :put },
+        { :controller => "api/changesets", :action => "update", :id => "1" }
+      )
+      assert_routing(
+        { :path => "/api/0.6/changeset/1/upload", :method => :post },
+        { :controller => "api/changesets", :action => "upload", :id => "1" }
+      )
       assert_routing(
         { :path => "/api/0.6/changeset/1/subscribe", :method => :post },
         { :controller => "api/changesets", :action => "subscribe", :id => "1" }
@@ -41,24 +49,260 @@ module Api
         { :path => "/api/0.6/changeset/1/unsubscribe.json", :method => :post },
         { :controller => "api/changesets", :action => "unsubscribe", :id => "1", :format => "json" }
       )
-      assert_routing(
-        { :path => "/api/0.6/changeset/1", :method => :put },
-        { :controller => "api/changesets", :action => "update", :id => "1" }
-      )
       assert_routing(
         { :path => "/api/0.6/changeset/1/close", :method => :put },
         { :controller => "api/changesets", :action => "close", :id => "1" }
       )
-      assert_routing(
-        { :path => "/api/0.6/changesets", :method => :get },
-        { :controller => "api/changesets", :action => "index" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/changesets.json", :method => :get },
-        { :controller => "api/changesets", :action => "index", :format => "json" }
+
+      assert_recognizes(
+        { :controller => "api/changesets", :action => "create" },
+        { :path => "/api/0.6/changeset/create", :method => :put }
       )
     end
 
+    ##
+    # test the query functionality of changesets
+    def test_index
+      private_user = create(:user, :data_public => false)
+      private_user_changeset = create(:changeset, :user => private_user)
+      private_user_closed_changeset = create(:changeset, :closed, :user => private_user)
+      user = create(:user)
+      changeset = create(:changeset, :user => user)
+      closed_changeset = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+      changeset2 = create(:changeset, :min_lat => (5 * GeoRecord::SCALE).round, :min_lon => (5 * GeoRecord::SCALE).round, :max_lat => (15 * GeoRecord::SCALE).round, :max_lon => (15 * GeoRecord::SCALE).round)
+      changeset3 = create(:changeset, :min_lat => (4.5 * GeoRecord::SCALE).round, :min_lon => (4.5 * GeoRecord::SCALE).round, :max_lat => (5 * GeoRecord::SCALE).round, :max_lon => (5 * GeoRecord::SCALE).round)
+
+      get api_changesets_path(:bbox => "-10,-10, 10, 10")
+      assert_response :success, "can't get changesets in bbox"
+      assert_changesets_in_order [changeset3, changeset2]
+
+      get api_changesets_path(:bbox => "4.5,4.5,4.6,4.6")
+      assert_response :success, "can't get changesets in bbox"
+      assert_changesets_in_order [changeset3]
+
+      # not found when looking for changesets of non-existing users
+      get api_changesets_path(:user => User.maximum(:id) + 1)
+      assert_response :not_found
+      assert_equal "text/plain", @response.media_type
+      get api_changesets_path(:display_name => " ")
+      assert_response :not_found
+      assert_equal "text/plain", @response.media_type
+
+      # can't get changesets of user 1 without authenticating
+      get api_changesets_path(:user => private_user.id)
+      assert_response :not_found, "shouldn't be able to get changesets by non-public user (ID)"
+      get api_changesets_path(:display_name => private_user.display_name)
+      assert_response :not_found, "shouldn't be able to get changesets by non-public user (name)"
+
+      # but this should work
+      auth_header = bearer_authorization_header private_user
+      get api_changesets_path(:user => private_user.id), :headers => auth_header
+      assert_response :success, "can't get changesets by user ID"
+      assert_changesets_in_order [private_user_changeset, private_user_closed_changeset]
+
+      get api_changesets_path(:display_name => private_user.display_name), :headers => auth_header
+      assert_response :success, "can't get changesets by user name"
+      assert_changesets_in_order [private_user_changeset, private_user_closed_changeset]
+
+      # test json endpoint
+      get api_changesets_path(:display_name => private_user.display_name), :headers => auth_header, :params => { :format => "json" }
+      assert_response :success, "can't get changesets by user name"
+
+      js = ActiveSupport::JSON.decode(@response.body)
+      assert_not_nil js
+
+      assert_equal Settings.api_version, js["version"]
+      assert_equal Settings.generator, js["generator"]
+      assert_equal 2, js["changesets"].count
+
+      # check that the correct error is given when we provide both UID and name
+      get api_changesets_path(:user => private_user.id,
+                              :display_name => private_user.display_name), :headers => auth_header
+      assert_response :bad_request, "should be a bad request to have both ID and name specified"
+
+      get api_changesets_path(:user => private_user.id, :open => true), :headers => auth_header
+      assert_response :success, "can't get changesets by user and open"
+      assert_changesets_in_order [private_user_changeset]
+
+      get api_changesets_path(:time => "2007-12-31"), :headers => auth_header
+      assert_response :success, "can't get changesets by time-since"
+      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset, private_user_closed_changeset, closed_changeset]
+
+      get api_changesets_path(:time => "2008-01-01T12:34Z"), :headers => auth_header
+      assert_response :success, "can't get changesets by time-since with hour"
+      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset, private_user_closed_changeset, closed_changeset]
+
+      get api_changesets_path(:time => "2007-12-31T23:59Z,2008-01-02T00:01Z"), :headers => auth_header
+      assert_response :success, "can't get changesets by time-range"
+      assert_changesets_in_order [closed_changeset]
+
+      get api_changesets_path(:open => "true"), :headers => auth_header
+      assert_response :success, "can't get changesets by open-ness"
+      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset]
+
+      get api_changesets_path(:closed => "true"), :headers => auth_header
+      assert_response :success, "can't get changesets by closed-ness"
+      assert_changesets_in_order [private_user_closed_changeset, closed_changeset]
+
+      get api_changesets_path(:closed => "true", :user => private_user.id), :headers => auth_header
+      assert_response :success, "can't get changesets by closed-ness and user"
+      assert_changesets_in_order [private_user_closed_changeset]
+
+      get api_changesets_path(:closed => "true", :user => user.id), :headers => auth_header
+      assert_response :success, "can't get changesets by closed-ness and user"
+      assert_changesets_in_order [closed_changeset]
+
+      get api_changesets_path(:changesets => "#{private_user_changeset.id},#{changeset.id},#{closed_changeset.id}"), :headers => auth_header
+      assert_response :success, "can't get changesets by id (as comma-separated string)"
+      assert_changesets_in_order [changeset, private_user_changeset, closed_changeset]
+
+      get api_changesets_path(:changesets => ""), :headers => auth_header
+      assert_response :bad_request, "should be a bad request since changesets is empty"
+    end
+
+    ##
+    # test the query functionality of changesets with the limit parameter
+    def test_index_limit
+      user = create(:user)
+      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
+      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
+      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
+      changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
+
+      get api_changesets_path
+      assert_response :success
+      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
+
+      get api_changesets_path(:limit => "3")
+      assert_response :success
+      assert_changesets_in_order [changeset5, changeset4, changeset3]
+
+      get api_changesets_path(:limit => "0")
+      assert_response :bad_request
+
+      get api_changesets_path(:limit => Settings.max_changeset_query_limit)
+      assert_response :success
+      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
+
+      get api_changesets_path(:limit => Settings.max_changeset_query_limit + 1)
+      assert_response :bad_request
+    end
+
+    ##
+    # test the query functionality of sequential changesets with order and time parameters
+    def test_index_order
+      user = create(:user)
+      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
+      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
+      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
+      changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
+      changeset6 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 6, 1, 0, 0, 0), :closed_at => Time.utc(2008, 6, 2, 0, 0, 0))
+
+      get api_changesets_path
+      assert_response :success
+      assert_changesets_in_order [changeset6, changeset5, changeset4, changeset3, changeset2, changeset1]
+
+      get api_changesets_path(:order => "oldest")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5, changeset6]
+
+      [
+        # lower time bound at the opening time of a changeset
+        ["2008-02-01T00:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3, changeset2]],
+        # lower time bound in the middle of a changeset
+        ["2008-02-01T12:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3]],
+        # lower time bound at the closing time of a changeset
+        ["2008-02-02T00:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3]],
+        # lower time bound after the closing time of a changeset
+        ["2008-02-02T00:00:01Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3], [changeset5, changeset4, changeset3]],
+        # upper time bound in the middle of a changeset
+        ["2007-09-09T12:00:00Z", "2008-04-01T12:00:00Z", [changeset4, changeset3, changeset2, changeset1], [changeset4, changeset3, changeset2, changeset1]],
+        # empty range
+        ["2009-02-02T00:00:01Z", "2018-05-15T00:00:00Z", [], []]
+      ].each do |from, to, interval_changesets, point_changesets|
+        get api_changesets_path(:time => "#{from},#{to}")
+        assert_response :success
+        assert_changesets_in_order interval_changesets
+
+        get api_changesets_path(:from => from, :to => to)
+        assert_response :success
+        assert_changesets_in_order point_changesets
+
+        get api_changesets_path(:from => from, :to => to, :order => "oldest")
+        assert_response :success
+        assert_changesets_in_order point_changesets.reverse
+      end
+    end
+
+    ##
+    # test the query functionality of overlapping changesets with order and time parameters
+    def test_index_order_overlapping
+      user = create(:user)
+      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 17, 0, 0), :closed_at => Time.utc(2015, 6, 4, 17, 0, 0))
+      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 16, 0, 0), :closed_at => Time.utc(2015, 6, 4, 18, 0, 0))
+      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 14, 0, 0), :closed_at => Time.utc(2015, 6, 4, 20, 0, 0))
+      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 3, 23, 0, 0), :closed_at => Time.utc(2015, 6, 4, 23, 0, 0))
+      create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 2, 23, 0, 0), :closed_at => Time.utc(2015, 6, 3, 23, 0, 0))
+
+      get api_changesets_path(:time => "2015-06-04T00:00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4]
+
+      get api_changesets_path(:from => "2015-06-04T00:00:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3]
+
+      get api_changesets_path(:from => "2015-06-04T00:00:00Z", :order => "oldest")
+      assert_response :success
+      assert_changesets_in_order [changeset3, changeset2, changeset1]
+
+      get api_changesets_path(:time => "2015-06-04T16:00:00Z,2015-06-04T17:30:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4]
+
+      get api_changesets_path(:from => "2015-06-04T16:00:00Z", :to => "2015-06-04T17:30:00Z")
+      assert_response :success
+      assert_changesets_in_order [changeset1, changeset2]
+
+      get api_changesets_path(:from => "2015-06-04T16:00:00Z", :to => "2015-06-04T17:30:00Z", :order => "oldest")
+      assert_response :success
+      assert_changesets_in_order [changeset2, changeset1]
+    end
+
+    ##
+    # check that errors are returned if garbage is inserted
+    # into query strings
+    def test_index_invalid
+      ["abracadabra!",
+       "1,2,3,F",
+       ";drop table users;"].each do |bbox|
+        get api_changesets_path(:bbox => bbox)
+        assert_response :bad_request, "'#{bbox}' isn't a bbox"
+      end
+
+      ["now()",
+       "00-00-00",
+       ";drop table users;",
+       ",",
+       "-,-"].each do |time|
+        get api_changesets_path(:time => time)
+        assert_response :bad_request, "'#{time}' isn't a valid time range"
+      end
+
+      ["me",
+       "foobar",
+       "-1",
+       "0"].each do |uid|
+        get api_changesets_path(:user => uid)
+        assert_response :bad_request, "'#{uid}' isn't a valid user ID"
+      end
+
+      get api_changesets_path(:order => "oldest", :time => "2008-01-01T00:00Z,2018-01-01T00:00Z")
+      assert_response :bad_request, "cannot use order=oldest with time"
+    end
+
     # -----------------------
     # Test simple changeset creation
     # -----------------------
@@ -69,7 +313,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_require_public_data
 
       auth_header = bearer_authorization_header
@@ -77,7 +321,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
 
       assert_response :success, "Creation of changeset did not return success status"
       newid = @response.body.to_i
@@ -101,47 +345,55 @@ module Api
     def test_create_invalid
       auth_header = bearer_authorization_header create(:user, :data_public => false)
       xml = "<osm><changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_require_public_data
 
       ## Try the public user
       auth_header = bearer_authorization_header
       xml = "<osm><changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :bad_request, "creating a invalid changeset should fail"
     end
 
     def test_create_invalid_no_content
       ## First check with no auth
-      put changeset_create_path
+      post api_changesets_path
       assert_response :unauthorized, "shouldn't be able to create a changeset with no auth"
 
       ## Now try to with a non-public user
       auth_header = bearer_authorization_header create(:user, :data_public => false)
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_require_public_data
 
       ## Try an inactive user
       auth_header = bearer_authorization_header create(:user, :pending)
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_inactive_user
 
       ## Now try to use a normal user
       auth_header = bearer_authorization_header
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_response :bad_request, "creating a changeset with no content should fail"
     end
 
     def test_create_wrong_method
       auth_header = bearer_authorization_header
 
-      get changeset_create_path, :headers => auth_header
+      put api_changesets_path, :headers => auth_header
       assert_response :not_found
       assert_template "rescues/routing_error"
+    end
 
-      post changeset_create_path, :headers => auth_header
-      assert_response :not_found
-      assert_template "rescues/routing_error"
+    def test_create_legacy_path
+      auth_header = bearer_authorization_header
+      xml = "<osm><changeset></changeset></osm>"
+
+      assert_difference "Changeset.count", 1 do
+        put "/api/0.6/changeset/create", :params => xml, :headers => auth_header
+      end
+
+      assert_response :success, "Creation of changeset did not return success status"
+      assert_equal Changeset.last.id, @response.body.to_i
     end
 
     ##
@@ -150,7 +402,7 @@ module Api
     def test_show
       changeset = create(:changeset)
 
-      get changeset_show_path(changeset)
+      get api_changeset_path(changeset)
       assert_response :success, "cannot get first changeset"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
@@ -158,7 +410,7 @@ module Api
         assert_dom "> discussion", 0
       end
 
-      get changeset_show_path(changeset), :params => { :include_discussion => true }
+      get api_changeset_path(changeset, :include_discussion => true)
       assert_response :success, "cannot get first changeset with comments"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
@@ -173,7 +425,7 @@ module Api
       changeset = create(:changeset, :closed)
       comment1, comment2, comment3 = create_list(:changeset_comment, 3, :changeset_id => changeset.id)
 
-      get changeset_show_path(changeset), :params => { :include_discussion => true }
+      get api_changeset_path(changeset, :include_discussion => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1 do
@@ -195,7 +447,7 @@ module Api
       comment2.update(:visible => false)
       changeset.reload
 
-      get changeset_show_path(changeset), :params => { :include_discussion => true }
+      get api_changeset_path(changeset, :include_discussion => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
@@ -211,7 +463,7 @@ module Api
       end
 
       # one hidden comment not included because no permissions
-      get changeset_show_path(changeset), :params => { :include_discussion => true, :show_hidden_comments => true }
+      get api_changeset_path(changeset, :include_discussion => true, :show_hidden_comments => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
@@ -230,8 +482,7 @@ module Api
       # one hidden comment shown to moderators
       moderator_user = create(:moderator_user)
       auth_header = bearer_authorization_header moderator_user
-      get changeset_show_path(changeset), :params => { :include_discussion => true, :show_hidden_comments => true },
-                                          :headers => auth_header
+      get api_changeset_path(changeset, :include_discussion => true, :show_hidden_comments => true), :headers => auth_header
       assert_response :success, "cannot get closed changeset with comments"
 
       assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
@@ -249,10 +500,26 @@ module Api
       end
     end
 
+    def test_show_tags
+      changeset = create(:changeset, :closed)
+      create(:changeset_tag, :changeset => changeset, :k => "created_by", :v => "JOSM/1.5 (18364)")
+      create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "changeset comment")
+
+      get api_changeset_path(changeset)
+
+      assert_response :success
+      assert_dom "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1
+      assert_single_changeset changeset do
+        assert_dom "> tag", 2
+        assert_dom "> tag[k='created_by'][v='JOSM/1.5 (18364)']", 1
+        assert_dom "> tag[k='comment'][v='changeset comment']", 1
+      end
+    end
+
     def test_show_json
       changeset = create(:changeset)
 
-      get changeset_show_path(changeset), :params => { :format => "json" }
+      get api_changeset_path(changeset, :format => "json")
       assert_response :success, "cannot get first changeset"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -266,7 +533,7 @@ module Api
       assert_equal changeset.user.id, js["changeset"]["uid"]
       assert_equal changeset.user.display_name, js["changeset"]["user"]
 
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true }
+      get api_changeset_path(changeset, :format => "json", :include_discussion => true)
       assert_response :success, "cannot get first changeset with comments"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -287,7 +554,7 @@ module Api
       changeset = create(:changeset, :closed)
       comment0, comment1, comment2 = create_list(:changeset_comment, 3, :changeset_id => changeset.id)
 
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true }
+      get api_changeset_path(changeset, :format => "json", :include_discussion => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -307,7 +574,7 @@ module Api
       comment1.update(:visible => false)
       changeset.reload
 
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true }
+      get api_changeset_path(changeset, :format => "json", :include_discussion => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -322,7 +589,7 @@ module Api
       assert js["changeset"]["comments"][1]["visible"]
 
       # one hidden comment not included because no permissions
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true, :show_hidden_comments => true }
+      get api_changeset_path(changeset, :format => "json", :include_discussion => true, :show_hidden_comments => true)
       assert_response :success, "cannot get closed changeset with comments"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -340,8 +607,7 @@ module Api
       # one hidden comment shown to moderators
       moderator_user = create(:moderator_user)
       auth_header = bearer_authorization_header moderator_user
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true, :show_hidden_comments => true },
-                                          :headers => auth_header
+      get api_changeset_path(changeset, :format => "json", :include_discussion => true, :show_hidden_comments => true), :headers => auth_header
       assert_response :success, "cannot get closed changeset with comments"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -358,26 +624,22 @@ module Api
       assert js["changeset"]["comments"][2]["visible"]
     end
 
-    def test_show_tag_and_discussion_json
+    def test_show_tags_json
       changeset = create(:changeset, :closed)
       create(:changeset_tag, :changeset => changeset, :k => "created_by", :v => "JOSM/1.5 (18364)")
       create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "changeset comment")
-      create_list(:changeset_comment, 3, :changeset_id => changeset.id)
 
-      get changeset_show_path(changeset), :params => { :format => "json", :include_discussion => true }
-      assert_response :success, "cannot get closed changeset with comments"
+      get api_changeset_path(changeset, :format => "json")
 
+      assert_response :success
       js = ActiveSupport::JSON.decode(@response.body)
-
       assert_not_nil js
       assert_equal Settings.api_version, js["version"]
       assert_equal Settings.generator, js["generator"]
       assert_single_changeset_json changeset, js
       assert_equal 2, js["changeset"]["tags"].count
-      assert_equal 3, js["changeset"]["comments"].count
-      assert_not_nil js["changeset"]["comments"][0]["uid"]
-      assert_not_nil js["changeset"]["comments"][0]["user"]
-      assert_not_nil js["changeset"]["comments"][0]["text"]
+      assert_equal "JOSM/1.5 (18364)", js["changeset"]["tags"]["created_by"]
+      assert_equal "changeset comment", js["changeset"]["tags"]["comment"]
     end
 
     def test_show_bbox_json
@@ -385,7 +647,7 @@ module Api
       changeset = create(:changeset, :min_lat => (-5 * GeoRecord::SCALE).round, :min_lon => (5 * GeoRecord::SCALE).round,
                                      :max_lat => (15 * GeoRecord::SCALE).round, :max_lon => (12 * GeoRecord::SCALE).round)
 
-      get changeset_show_path(changeset), :params => { :format => "json" }
+      get api_changeset_path(changeset, :format => "json")
       assert_response :success, "cannot get first changeset"
 
       js = ActiveSupport::JSON.decode(@response.body)
@@ -400,7 +662,7 @@ module Api
     # check that a changeset that doesn't exist returns an appropriate message
     def test_show_not_found
       [0, -32, 233455644, "afg", "213"].each do |id|
-        get changeset_show_path(id)
+        get api_changeset_path(id)
         assert_response :not_found, "should get a not found"
       rescue ActionController::UrlGenerationError => e
         assert_match(/No route matches/, e.to_s)
@@ -747,7 +1009,7 @@ module Api
               "<tag k='created_by' v='osm test suite checking changesets'/>" \
               "</changeset></osm>"
         assert_difference "Changeset.count", 1 do
-          put changeset_create_path, :params => xml, :headers => auth_header
+          post api_changesets_path, :params => xml, :headers => auth_header
         end
         assert_response :success
       end
@@ -761,7 +1023,7 @@ module Api
       create(:changeset, :user => user, :created_at => Time.now.utc - 28.days)
 
       # create a changeset
-      put changeset_create_path, :params => "<osm><changeset/></osm>", :headers => auth_header
+      post api_changesets_path, :params => "<osm><changeset/></osm>", :headers => auth_header
       assert_response :success, "Should be able to create a changeset: #{@response.body}"
       changeset_id = @response.body.to_i
 
@@ -1443,7 +1705,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1480,7 +1742,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1883,7 +2145,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :forbidden
 
       ## Now try with a normal user
@@ -1893,7 +2155,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1918,7 +2180,7 @@ module Api
       assert_response :success,
                       "can't upload multiple versions of an element in a diff: #{@response.body}"
 
-      get changeset_download_path(changeset_id)
+      get api_changeset_download_path(changeset_id)
       assert_response :success
 
       assert_select "osmChange", 1
@@ -1938,7 +2200,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1976,7 +2238,7 @@ module Api
       assert_response :success,
                       "can't upload a diff from JOSM: #{@response.body}"
 
-      get changeset_download_path(changeset_id)
+      get api_changeset_download_path(changeset_id)
       assert_response :success
 
       assert_select "osmChange", 1
@@ -1999,7 +2261,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -2031,7 +2293,7 @@ module Api
       assert_response :success,
                       "can't upload multiple versions of an element in a diff: #{@response.body}"
 
-      get changeset_download_path(changeset_id)
+      get api_changeset_download_path(changeset_id)
       assert_response :success
 
       assert_select "osmChange", 1
@@ -2044,63 +2306,6 @@ module Api
       assert_select "osmChange>modify>way", 1
     end
 
-    def test_changeset_download
-      changeset = create(:changeset)
-      node = create(:node, :with_history, :version => 1, :changeset => changeset)
-      tag = create(:old_node_tag, :old_node => node.old_nodes.find_by(:version => 1))
-      node2 = create(:node, :with_history, :version => 1, :changeset => changeset)
-      _node3 = create(:node, :with_history, :deleted, :version => 1, :changeset => changeset)
-      _relation = create(:relation, :with_history, :version => 1, :changeset => changeset)
-      _relation2 = create(:relation, :with_history, :deleted, :version => 1, :changeset => changeset)
-
-      get changeset_download_path(changeset)
-
-      assert_response :success
-
-      # FIXME: needs more assert_select tests
-      assert_select "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
-        assert_select "create", :count => 5
-        assert_select "create>node[id='#{node.id}'][visible='#{node.visible?}'][version='#{node.version}']" do
-          assert_select "tag[k='#{tag.k}'][v='#{tag.v}']"
-        end
-        assert_select "create>node[id='#{node2.id}']"
-      end
-    end
-
-    test "sorts downloaded elements by timestamp" do
-      changeset = create(:changeset)
-      node1 = create(:old_node, :version => 2, :timestamp => "2020-02-01", :changeset => changeset)
-      node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
-
-      get changeset_download_path(changeset)
-      assert_response :success
-      assert_dom "modify", :count => 2 do |modify|
-        assert_dom modify[0], ">node", :count => 1 do |node|
-          assert_dom node, ">@id", node0.node_id.to_s
-        end
-        assert_dom modify[1], ">node", :count => 1 do |node|
-          assert_dom node, ">@id", node1.node_id.to_s
-        end
-      end
-    end
-
-    test "sorts downloaded elements by version" do
-      changeset = create(:changeset)
-      node1 = create(:old_node, :version => 3, :timestamp => "2020-01-01", :changeset => changeset)
-      node0 = create(:old_node, :version => 2, :timestamp => "2020-01-01", :changeset => changeset)
-
-      get changeset_download_path(changeset)
-      assert_response :success
-      assert_dom "modify", :count => 2 do |modify|
-        assert_dom modify[0], ">node", :count => 1 do |node|
-          assert_dom node, ">@id", node0.node_id.to_s
-        end
-        assert_dom modify[1], ">node", :count => 1 do |node|
-          assert_dom node, ">@id", node1.node_id.to_s
-        end
-      end
-    end
-
     ##
     # check that the bounding box of a changeset gets updated correctly
     # FIXME: This should really be moded to a integration test due to the with_controller
@@ -2112,7 +2317,7 @@ module Api
 
       # create a new changeset
       xml = "<osm><changeset/></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success, "Creating of changeset failed."
       changeset_id = @response.body.to_i
 
@@ -2124,7 +2329,7 @@ module Api
       end
 
       # get the bounding box back from the changeset
-      get changeset_show_path(changeset_id)
+      get api_changeset_path(changeset_id)
       assert_response :success, "Couldn't read back changeset."
       assert_select "osm>changeset[min_lon='0.1000000']", 1
       assert_select "osm>changeset[max_lon='0.1000000']", 1
@@ -2139,7 +2344,7 @@ module Api
       end
 
       # get the bounding box back from the changeset
-      get changeset_show_path(changeset_id)
+      get api_changeset_path(changeset_id)
       assert_response :success, "Couldn't read back changeset for the second time."
       assert_select "osm>changeset[min_lon='0.1000000']", 1
       assert_select "osm>changeset[max_lon='0.2000000']", 1
@@ -2154,7 +2359,7 @@ module Api
       end
 
       # get the bounding box back from the changeset
-      get changeset_show_path(changeset_id)
+      get api_changeset_path(changeset_id)
       assert_response :success, "Couldn't read back changeset for the third time."
       assert_select "osm>changeset[min_lon='0.1000000']", 1
       assert_select "osm>changeset[max_lon='0.3000000']", 1
@@ -2162,249 +2367,6 @@ module Api
       assert_select "osm>changeset[max_lat='0.3000000']", 1
     end
 
-    ##
-    # test the query functionality of changesets
-    def test_query
-      private_user = create(:user, :data_public => false)
-      private_user_changeset = create(:changeset, :user => private_user)
-      private_user_closed_changeset = create(:changeset, :closed, :user => private_user)
-      user = create(:user)
-      changeset = create(:changeset, :user => user)
-      closed_changeset = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
-      changeset2 = create(:changeset, :min_lat => (5 * GeoRecord::SCALE).round, :min_lon => (5 * GeoRecord::SCALE).round, :max_lat => (15 * GeoRecord::SCALE).round, :max_lon => (15 * GeoRecord::SCALE).round)
-      changeset3 = create(:changeset, :min_lat => (4.5 * GeoRecord::SCALE).round, :min_lon => (4.5 * GeoRecord::SCALE).round, :max_lat => (5 * GeoRecord::SCALE).round, :max_lon => (5 * GeoRecord::SCALE).round)
-
-      get changesets_path(:bbox => "-10,-10, 10, 10")
-      assert_response :success, "can't get changesets in bbox"
-      assert_changesets_in_order [changeset3, changeset2]
-
-      get changesets_path(:bbox => "4.5,4.5,4.6,4.6")
-      assert_response :success, "can't get changesets in bbox"
-      assert_changesets_in_order [changeset3]
-
-      # not found when looking for changesets of non-existing users
-      get changesets_path(:user => User.maximum(:id) + 1)
-      assert_response :not_found
-      assert_equal "text/plain", @response.media_type
-      get changesets_path(:display_name => " ")
-      assert_response :not_found
-      assert_equal "text/plain", @response.media_type
-
-      # can't get changesets of user 1 without authenticating
-      get changesets_path(:user => private_user.id)
-      assert_response :not_found, "shouldn't be able to get changesets by non-public user (ID)"
-      get changesets_path(:display_name => private_user.display_name)
-      assert_response :not_found, "shouldn't be able to get changesets by non-public user (name)"
-
-      # but this should work
-      auth_header = bearer_authorization_header private_user
-      get changesets_path(:user => private_user.id), :headers => auth_header
-      assert_response :success, "can't get changesets by user ID"
-      assert_changesets_in_order [private_user_changeset, private_user_closed_changeset]
-
-      get changesets_path(:display_name => private_user.display_name), :headers => auth_header
-      assert_response :success, "can't get changesets by user name"
-      assert_changesets_in_order [private_user_changeset, private_user_closed_changeset]
-
-      # test json endpoint
-      get changesets_path(:display_name => private_user.display_name), :headers => auth_header, :params => { :format => "json" }
-      assert_response :success, "can't get changesets by user name"
-
-      js = ActiveSupport::JSON.decode(@response.body)
-      assert_not_nil js
-
-      assert_equal Settings.api_version, js["version"]
-      assert_equal Settings.generator, js["generator"]
-      assert_equal 2, js["changesets"].count
-
-      # check that the correct error is given when we provide both UID and name
-      get changesets_path(:user => private_user.id,
-                          :display_name => private_user.display_name), :headers => auth_header
-      assert_response :bad_request, "should be a bad request to have both ID and name specified"
-
-      get changesets_path(:user => private_user.id, :open => true), :headers => auth_header
-      assert_response :success, "can't get changesets by user and open"
-      assert_changesets_in_order [private_user_changeset]
-
-      get changesets_path(:time => "2007-12-31"), :headers => auth_header
-      assert_response :success, "can't get changesets by time-since"
-      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset, private_user_closed_changeset, closed_changeset]
-
-      get changesets_path(:time => "2008-01-01T12:34Z"), :headers => auth_header
-      assert_response :success, "can't get changesets by time-since with hour"
-      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset, private_user_closed_changeset, closed_changeset]
-
-      get changesets_path(:time => "2007-12-31T23:59Z,2008-01-02T00:01Z"), :headers => auth_header
-      assert_response :success, "can't get changesets by time-range"
-      assert_changesets_in_order [closed_changeset]
-
-      get changesets_path(:open => "true"), :headers => auth_header
-      assert_response :success, "can't get changesets by open-ness"
-      assert_changesets_in_order [changeset3, changeset2, changeset, private_user_changeset]
-
-      get changesets_path(:closed => "true"), :headers => auth_header
-      assert_response :success, "can't get changesets by closed-ness"
-      assert_changesets_in_order [private_user_closed_changeset, closed_changeset]
-
-      get changesets_path(:closed => "true", :user => private_user.id), :headers => auth_header
-      assert_response :success, "can't get changesets by closed-ness and user"
-      assert_changesets_in_order [private_user_closed_changeset]
-
-      get changesets_path(:closed => "true", :user => user.id), :headers => auth_header
-      assert_response :success, "can't get changesets by closed-ness and user"
-      assert_changesets_in_order [closed_changeset]
-
-      get changesets_path(:changesets => "#{private_user_changeset.id},#{changeset.id},#{closed_changeset.id}"), :headers => auth_header
-      assert_response :success, "can't get changesets by id (as comma-separated string)"
-      assert_changesets_in_order [changeset, private_user_changeset, closed_changeset]
-
-      get changesets_path(:changesets => ""), :headers => auth_header
-      assert_response :bad_request, "should be a bad request since changesets is empty"
-    end
-
-    ##
-    # test the query functionality of changesets with the limit parameter
-    def test_query_limit
-      user = create(:user)
-      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
-      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
-      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
-      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
-      changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
-
-      get changesets_path
-      assert_response :success
-      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
-
-      get changesets_path(:limit => "3")
-      assert_response :success
-      assert_changesets_in_order [changeset5, changeset4, changeset3]
-
-      get changesets_path(:limit => "0")
-      assert_response :bad_request
-
-      get changesets_path(:limit => Settings.max_changeset_query_limit)
-      assert_response :success
-      assert_changesets_in_order [changeset5, changeset4, changeset3, changeset2, changeset1]
-
-      get changesets_path(:limit => Settings.max_changeset_query_limit + 1)
-      assert_response :bad_request
-    end
-
-    ##
-    # test the query functionality of sequential changesets with order and time parameters
-    def test_query_order
-      user = create(:user)
-      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
-      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
-      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
-      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
-      changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
-      changeset6 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 6, 1, 0, 0, 0), :closed_at => Time.utc(2008, 6, 2, 0, 0, 0))
-
-      get changesets_path
-      assert_response :success
-      assert_changesets_in_order [changeset6, changeset5, changeset4, changeset3, changeset2, changeset1]
-
-      get changesets_path(:order => "oldest")
-      assert_response :success
-      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4, changeset5, changeset6]
-
-      [
-        # lower time bound at the opening time of a changeset
-        ["2008-02-01T00:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3, changeset2]],
-        # lower time bound in the middle of a changeset
-        ["2008-02-01T12:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3]],
-        # lower time bound at the closing time of a changeset
-        ["2008-02-02T00:00:00Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3, changeset2], [changeset5, changeset4, changeset3]],
-        # lower time bound after the closing time of a changeset
-        ["2008-02-02T00:00:01Z", "2008-05-15T00:00:00Z", [changeset5, changeset4, changeset3], [changeset5, changeset4, changeset3]],
-        # upper time bound in the middle of a changeset
-        ["2007-09-09T12:00:00Z", "2008-04-01T12:00:00Z", [changeset4, changeset3, changeset2, changeset1], [changeset4, changeset3, changeset2, changeset1]],
-        # empty range
-        ["2009-02-02T00:00:01Z", "2018-05-15T00:00:00Z", [], []]
-      ].each do |from, to, interval_changesets, point_changesets|
-        get changesets_path(:time => "#{from},#{to}")
-        assert_response :success
-        assert_changesets_in_order interval_changesets
-
-        get changesets_path(:from => from, :to => to)
-        assert_response :success
-        assert_changesets_in_order point_changesets
-
-        get changesets_path(:from => from, :to => to, :order => "oldest")
-        assert_response :success
-        assert_changesets_in_order point_changesets.reverse
-      end
-    end
-
-    ##
-    # test the query functionality of overlapping changesets with order and time parameters
-    def test_query_order_overlapping
-      user = create(:user)
-      changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 17, 0, 0), :closed_at => Time.utc(2015, 6, 4, 17, 0, 0))
-      changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 16, 0, 0), :closed_at => Time.utc(2015, 6, 4, 18, 0, 0))
-      changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 4, 14, 0, 0), :closed_at => Time.utc(2015, 6, 4, 20, 0, 0))
-      changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 3, 23, 0, 0), :closed_at => Time.utc(2015, 6, 4, 23, 0, 0))
-      create(:changeset, :closed, :user => user, :created_at => Time.utc(2015, 6, 2, 23, 0, 0), :closed_at => Time.utc(2015, 6, 3, 23, 0, 0))
-
-      get changesets_path(:time => "2015-06-04T00:00:00Z")
-      assert_response :success
-      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4]
-
-      get changesets_path(:from => "2015-06-04T00:00:00Z")
-      assert_response :success
-      assert_changesets_in_order [changeset1, changeset2, changeset3]
-
-      get changesets_path(:from => "2015-06-04T00:00:00Z", :order => "oldest")
-      assert_response :success
-      assert_changesets_in_order [changeset3, changeset2, changeset1]
-
-      get changesets_path(:time => "2015-06-04T16:00:00Z,2015-06-04T17:30:00Z")
-      assert_response :success
-      assert_changesets_in_order [changeset1, changeset2, changeset3, changeset4]
-
-      get changesets_path(:from => "2015-06-04T16:00:00Z", :to => "2015-06-04T17:30:00Z")
-      assert_response :success
-      assert_changesets_in_order [changeset1, changeset2]
-
-      get changesets_path(:from => "2015-06-04T16:00:00Z", :to => "2015-06-04T17:30:00Z", :order => "oldest")
-      assert_response :success
-      assert_changesets_in_order [changeset2, changeset1]
-    end
-
-    ##
-    # check that errors are returned if garbage is inserted
-    # into query strings
-    def test_query_invalid
-      ["abracadabra!",
-       "1,2,3,F",
-       ";drop table users;"].each do |bbox|
-        get changesets_path(:bbox => bbox)
-        assert_response :bad_request, "'#{bbox}' isn't a bbox"
-      end
-
-      ["now()",
-       "00-00-00",
-       ";drop table users;",
-       ",",
-       "-,-"].each do |time|
-        get changesets_path(:time => time)
-        assert_response :bad_request, "'#{time}' isn't a valid time range"
-      end
-
-      ["me",
-       "foobar",
-       "-1",
-       "0"].each do |uid|
-        get changesets_path(:user => uid)
-        assert_response :bad_request, "'#{uid}' isn't a valid user ID"
-      end
-
-      get changesets_path(:order => "oldest", :time => "2008-01-01T00:00Z,2018-01-01T00:00Z")
-      assert_response :bad_request, "cannot use order=oldest with time"
-    end
-
     ##
     # check updating tags on a changeset
     def test_changeset_update
@@ -2421,17 +2383,17 @@ module Api
       new_changeset.find("//osm/changeset").first << new_tag
 
       # try without any authorization
-      put changeset_show_path(private_changeset), :params => new_changeset.to_s
+      put api_changeset_path(private_changeset), :params => new_changeset.to_s
       assert_response :unauthorized
 
       # try with the wrong authorization
       auth_header = bearer_authorization_header
-      put changeset_show_path(private_changeset), :params => new_changeset.to_s, :headers => auth_header
+      put api_changeset_path(private_changeset), :params => new_changeset.to_s, :headers => auth_header
       assert_response :conflict
 
       # now this should get an unauthorized
       auth_header = bearer_authorization_header private_user
-      put changeset_show_path(private_changeset), :params => new_changeset.to_s, :headers => auth_header
+      put api_changeset_path(private_changeset), :params => new_changeset.to_s, :headers => auth_header
       assert_require_public_data "user with their data non-public, shouldn't be able to edit their changeset"
 
       ## Now try with the public user
@@ -2442,17 +2404,17 @@ module Api
       new_changeset.find("//osm/changeset").first << new_tag
 
       # try without any authorization
-      put changeset_show_path(changeset), :params => new_changeset.to_s
+      put api_changeset_path(changeset), :params => new_changeset.to_s
       assert_response :unauthorized
 
       # try with the wrong authorization
       auth_header = bearer_authorization_header
-      put changeset_show_path(changeset), :params => new_changeset.to_s, :headers => auth_header
+      put api_changeset_path(changeset), :params => new_changeset.to_s, :headers => auth_header
       assert_response :conflict
 
       # now this should work...
       auth_header = bearer_authorization_header user
-      put changeset_show_path(changeset), :params => new_changeset.to_s, :headers => auth_header
+      put api_changeset_path(changeset), :params => new_changeset.to_s, :headers => auth_header
       assert_response :success
 
       assert_select "osm>changeset[id='#{changeset.id}']", 1
@@ -2473,7 +2435,7 @@ module Api
       new_tag["v"] = "testing"
       new_changeset.find("//osm/changeset").first << new_tag
 
-      put changeset_show_path(changeset), :params => new_changeset.to_s, :headers => auth_header
+      put api_changeset_path(changeset), :params => new_changeset.to_s, :headers => auth_header
       assert_response :conflict
     end
 
@@ -2489,7 +2451,7 @@ module Api
 
       # open a new changeset
       xml = "<osm><changeset/></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success, "can't create a new changeset"
       cs_id = @response.body.to_i
 
@@ -2541,25 +2503,6 @@ module Api
                  "element limit.")
     end
 
-    ##
-    # check that the changeset download for a changeset with a redacted
-    # element in it doesn't contain that element.
-    def test_diff_download_redacted
-      changeset = create(:changeset)
-      node = create(:node, :with_history, :version => 2, :changeset => changeset)
-      node_v1 = node.old_nodes.find_by(:version => 1)
-      node_v1.redact!(create(:redaction))
-
-      get changeset_download_path(changeset)
-      assert_response :success
-
-      assert_select "osmChange", 1
-      # this changeset contains the node in versions 1 & 2, but 1 should
-      # be hidden.
-      assert_select "osmChange node[id='#{node.id}']", 1
-      assert_select "osmChange node[id='#{node.id}'][version='1']", 0
-    end
-
     ##
     # test subscribe success
     def test_subscribe_success
index 9e2972495756de8b987d642b5f90ab4d4ee7667a..a4c8522e82f081be9f99f9bda034cd31106fb9b1 100644 (file)
@@ -1043,7 +1043,7 @@ module Api
       # that the bounding box will be newly-generated.
       with_controller(Api::ChangesetsController.new) do
         xml = "<osm><changeset/></osm>"
-        put changeset_create_path, :params => xml, :headers => auth_header
+        post api_changesets_path, :params => xml, :headers => auth_header
         assert_response :forbidden, "shouldn't be able to create changeset for modify test, as should get forbidden"
       end
 
@@ -1054,7 +1054,7 @@ module Api
       # that the bounding box will be newly-generated.
       changeset_id = with_controller(Api::ChangesetsController.new) do
         xml = "<osm><changeset/></osm>"
-        put changeset_create_path, :params => xml, :headers => auth_header
+        post api_changesets_path, :params => xml, :headers => auth_header
         assert_response :success, "couldn't create changeset for modify test"
         @response.body.to_i
       end
@@ -1064,7 +1064,7 @@ module Api
 
       # now download the changeset to check its bounding box
       with_controller(Api::ChangesetsController.new) do
-        get changeset_show_path(changeset_id)
+        get api_changeset_path(changeset_id)
         assert_response :success, "can't re-read changeset for modify test"
         assert_select "osm>changeset", 1, "Changeset element doesn't exist in #{@response.body}"
         assert_select "osm>changeset[id='#{changeset_id}']", 1, "Changeset id=#{changeset_id} doesn't exist in #{@response.body}"
index f07dadd85dd6cb7fb14841ec4be7ef6bb11c14ee..f7c99a0c6d4cca412d2bd0a3e885b2bef7780e29 100644 (file)
@@ -248,7 +248,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
     confirm_string = user.generate_token_for(:new_email)
 
     post user_confirm_email_path, :params => { :confirm_string => confirm_string }
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert_match(/Confirmed your change of email address/, flash[:notice])
   end
 
@@ -257,13 +257,13 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
     confirm_string = user.generate_token_for(:new_email)
 
     post user_confirm_email_path, :params => { :confirm_string => confirm_string }
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert_match(/already been confirmed/, flash[:error])
   end
 
   def test_confirm_email_bad_token
     post user_confirm_email_path, :params => { :confirm_string => "XXXXX" }
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert_match(/confirmation code has expired or does not exist/, flash[:error])
   end
 
@@ -279,7 +279,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
     # precondition gravatar should be turned off
     assert_not user.image_use_gravatar
     post user_confirm_email_path, :params => { :confirm_string => confirm_string }
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert_match(/Confirmed your change of email address/, flash[:notice])
     # gravatar use should now be enabled
     assert User.find(user.id).image_use_gravatar
@@ -293,7 +293,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
     # precondition gravatar should be turned on
     assert user.image_use_gravatar
     post user_confirm_email_path, :params => { :confirm_string => confirm_string }
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert_match(/Confirmed your change of email address/, flash[:notice])
     # gravatar use should now be disabled
     assert_not User.find(user.id).image_use_gravatar
index 0adf58a9e4b4cb368c3758a074eba24c83d5541e..c55636585ed97044eafbee1d7e53b64770bf7965 100644 (file)
@@ -9,4 +9,10 @@ class DashboardsControllerTest < ActionDispatch::IntegrationTest
       { :controller => "dashboards", :action => "show" }
     )
   end
+
+  def test_show_unauthorized
+    get dashboard_path
+
+    assert_redirected_to login_path(:referer => dashboard_path)
+  end
 end
index a70bb32cd7789d33ae680e2d7a52693aaae68667..0185c67413141d954b88951e220800e72518ed24 100644 (file)
@@ -164,7 +164,7 @@ class NotesControllerTest < ActionDispatch::IntegrationTest
   def test_read_note_suspended_opener_and_comment
     note = create(:note)
     create(:note_comment, :note => note, :author => create(:user, :suspended))
-    create(:note_comment, :note => note)
+    create(:note_comment, :note => note, :event => "commented")
 
     sidebar_browse_check :note_path, note.id, "notes/show"
     assert_select "div.note-comments ul li", :count => 1
index b683107d9a61b30fe257728d74bebbff413fbc32..724c43222b61a84869a1f7787919b8c45153c623 100644 (file)
@@ -27,12 +27,14 @@ module Users
       user = create(:user)
       moderator_user = create(:moderator_user)
       administrator_user = create(:administrator_user)
-      _suspended_user = create(:user, :suspended)
-      _ip_user = create(:user, :creation_address => "1.2.3.4")
+      suspended_user = create(:user, :suspended)
+      name_user = create(:user, :display_name => "Test User")
+      email_user = create(:user, :email => "test@example.com")
+      ip_user = create(:user, :creation_address => "1.2.3.4")
 
-      # There are now 7 users - the five above, plus two extra "granters" for the
+      # There are now 9 users - the 7 above, plus two extra "granters" for the
       # moderator_user and administrator_user
-      assert_equal 7, User.count
+      assert_equal 9, User.count
 
       # Shouldn't work when not logged in
       get users_list_path
@@ -57,19 +59,55 @@ module Users
       get users_list_path
       assert_response :success
       assert_template :show
-      assert_select "table#user_list tbody tr", :count => 7
+      assert_select "table#user_list tbody tr", :count => 9
 
       # Should be able to limit by status
       get users_list_path, :params => { :status => "suspended" }
       assert_response :success
       assert_template :show
-      assert_select "table#user_list tbody tr", :count => 1
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(suspended_user)}']", :count => 1
+      end
+
+      # Should be able to limit by name
+      get users_list_path, :params => { :username => "Test User" }
+      assert_response :success
+      assert_template :show
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(name_user)}']", :count => 1
+      end
+
+      # Should be able to limit by name ignoring case
+      get users_list_path, :params => { :username => "test user" }
+      assert_response :success
+      assert_template :show
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(name_user)}']", :count => 1
+      end
+
+      # Should be able to limit by email
+      get users_list_path, :params => { :username => "test@example.com" }
+      assert_response :success
+      assert_template :show
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(email_user)}']", :count => 1
+      end
+
+      # Should be able to limit by email ignoring case
+      get users_list_path, :params => { :username => "TEST@example.com" }
+      assert_response :success
+      assert_template :show
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(email_user)}']", :count => 1
+      end
 
       # Should be able to limit by IP address
       get users_list_path, :params => { :ip => "1.2.3.4" }
       assert_response :success
       assert_template :show
-      assert_select "table#user_list tbody tr", :count => 1
+      assert_select "table#user_list tbody tr", :count => 1 do
+        assert_select "a[href='#{user_path(ip_user)}']", :count => 1
+      end
     end
 
     def test_show_paginated
index b398762f20a57a718d783e2294ec498f9e7adca1..6b37ed3d99ff40882bfe02a1a3038eb122e1535f 100644 (file)
@@ -195,7 +195,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
 
     post user_go_public_path
 
-    assert_redirected_to edit_account_path
+    assert_redirected_to account_path
     assert User.find(user.id).data_public
   end
 
@@ -249,7 +249,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
       assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/traces']", 1
       assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary']", 1
       assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary_comments']", 1
-      assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/account']", 0
+      assert_select "a[href='/account']", 0
       assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks']", 0
       assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks_by']", 1
       assert_select "a[href='/user_blocks/new/#{ERB::Util.u(moderator_user.display_name)}']", 0
@@ -266,7 +266,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
       assert_select "a[href='/traces/mine']", 1
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1
-      assert_select "a[href='/account/edit']", 1
+      assert_select "a[href='/account']", 1
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
       assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0
@@ -284,7 +284,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/traces']", 1
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1
-      assert_select "a[href='/account/edit']", 0
+      assert_select "a[href='/account']", 0
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0
       assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0
       assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 1
index 877af5ad71adf783aaadc38e54447af99ffd34cd..2f96ccb3d4a2de806ab3bca1a806847672c42d74 100644 (file)
@@ -33,7 +33,7 @@ describe("OSM", function () {
     beforeEach(function () {
       delete OSM.home;
       delete OSM.location;
-      document.location.hash = "";
+      location.hash = "";
       document.cookie = "_osm_location=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
 
       // Test with another cookie set.
@@ -83,7 +83,7 @@ describe("OSM", function () {
     });
 
     it("parses lat/lon/zoom from the hash", function () {
-      document.location.hash = "#map=16/57.6247/-3.6845";
+      location.hash = "#map=16/57.6247/-3.6845";
       const params = OSM.mapParams("?");
       expect(params).to.have.property("lat", 57.6247);
       expect(params).to.have.property("lon", -3.6845);
@@ -133,7 +133,7 @@ describe("OSM", function () {
       params = OSM.mapParams("?");
       expect(params).to.have.property("layers", "C");
 
-      document.location.hash = "#map=5/57.6247/-3.6845&layers=M";
+      location.hash = "#map=5/57.6247/-3.6845&layers=M";
       params = OSM.mapParams("?");
       expect(params).to.have.property("layers", "M");
     });
index ca5ef7fe8bc37578973782fed115478e2037d73c..729f9cccc620495276cb8c704664931b3fe8c4e4 100644 (file)
@@ -7,7 +7,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
   end
 
   test "the status is deleted and the personal data removed" do
-    visit edit_account_path
+    visit account_path
 
     click_on "Delete Account..."
     accept_confirm do
@@ -21,7 +21,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
   end
 
   test "the user is signed out after deletion" do
-    visit edit_account_path
+    visit account_path
 
     click_on "Delete Account..."
     accept_confirm do
@@ -32,7 +32,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
   end
 
   test "the user is shown a confirmation flash message" do
-    visit edit_account_path
+    visit account_path
 
     click_on "Delete Account..."
     accept_confirm do
@@ -45,7 +45,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
   test "can delete with any delay setting value if the user has no changesets" do
     with_user_account_deletion_delay(10000) do
       travel 1.hour do
-        visit edit_account_path
+        visit account_path
 
         click_on "Delete Account..."
 
@@ -59,7 +59,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
       create(:changeset, :user => @user)
 
       travel 1.hour do
-        visit edit_account_path
+        visit account_path
 
         click_on "Delete Account..."
 
@@ -73,7 +73,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
       create(:changeset, :user => @user, :created_at => Time.now.utc, :closed_at => Time.now.utc + 1.hour)
 
       travel 12.hours do
-        visit edit_account_path
+        visit account_path
 
         click_on "Delete Account..."
 
@@ -87,7 +87,7 @@ class AccountDeletionTest < ApplicationSystemTestCase
       create(:changeset, :user => @user, :created_at => Time.now.utc, :closed_at => Time.now.utc + 1.hour)
 
       travel 10.hours do
-        visit edit_account_path
+        visit account_path
 
         click_on "Delete Account..."
 
index 83f0a47bf0d9cf7259978c2915a57039a2b934f9..ccf1cf2ad93027f0234946b8695459d8726946a0 100644 (file)
@@ -12,7 +12,7 @@ class UserEmailChangeTest < ApplicationSystemTestCase
     sign_in_as(user)
 
     assert_emails 1 do
-      visit edit_account_path
+      visit account_path
       fill_in "New Email Address", :with => "new_tester@example.com"
       click_on "Save Changes"
       assert_equal "new_tester@example.com", user.reload.new_email
@@ -25,7 +25,7 @@ class UserEmailChangeTest < ApplicationSystemTestCase
 
     if email.parts[0].parts[0].decoded =~ %r{(/user/confirm-email\?confirm_string=[A-Za-z0-9\-_%]+)\s}
       visit Regexp.last_match(1)
-      assert page.has_css?("body.accounts-edit")
+      assert page.has_css?("body.accounts-show")
     end
 
     assert_equal "new_tester@example.com", user.reload.email
index e70005e647abad142dddac009d1ec0bb477a1a18..d46d5a04cc7543b9a4000b6e3d1983df28c41aef 100644 (file)
@@ -13,7 +13,7 @@ class UserMutingTest < ApplicationSystemTestCase
     click_on "Mute this User"
     assert_content "You muted #{other_user.display_name}"
 
-    visit edit_account_path
+    visit account_path
     assert_content "Muted Users"
     click_on "Muted Users"
     assert_content "You have muted 1 User"
@@ -21,7 +21,7 @@ class UserMutingTest < ApplicationSystemTestCase
 
     assert_content "You unmuted #{other_user.display_name}"
     refute_content "Muted Users"
-    assert_current_path edit_account_path
+    assert_current_path account_path
   end
 
   test "messages sent by muted users are set `muted` and do not cause notification emails" do
index d6368b68b28edfb4a8aa825428341d93b660dcea..55c4b82d7c7c445d65ac885fcfac77f460d3b7cd 100644 (file)
@@ -4,12 +4,12 @@ class UserSuspensionTest < ApplicationSystemTestCase
   test "User shown a message when suspended mid-session" do
     user = create(:user)
     sign_in_as(user)
-    visit edit_account_path
+    visit account_path
     assert_content "My Account"
 
     user.suspend!
 
-    visit edit_account_path
+    visit account_path
     assert_content "This decision will be reviewed by an administrator shortly"
   end
 end
index 9e73a5eb4602b2e38b5ce82b52a08244648823d6..bc2be6e82c0072db70dbdbd3bdabbc30774a2450 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
   resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
   integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
 
-"@eslint/config-array@^0.19.0":
-  version "0.19.0"
-  resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.0.tgz#3251a528998de914d59bb21ba4c11767cf1b3519"
-  integrity sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==
+"@eslint/config-array@^0.19.2":
+  version "0.19.2"
+  resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa"
+  integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==
   dependencies:
-    "@eslint/object-schema" "^2.1.4"
+    "@eslint/object-schema" "^2.1.6"
     debug "^4.3.1"
     minimatch "^3.1.2"
 
-"@eslint/core@^0.10.0":
-  version "0.10.0"
-  resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091"
-  integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==
+"@eslint/core@^0.12.0":
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e"
+  integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==
   dependencies:
     "@types/json-schema" "^7.0.15"
 
-"@eslint/core@^0.11.0":
-  version "0.11.0"
-  resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.11.0.tgz#7a9226e850922e42cbd2ba71361eacbe74352a12"
-  integrity sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==
-  dependencies:
-    "@types/json-schema" "^7.0.15"
-
-"@eslint/eslintrc@^3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c"
-  integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==
+"@eslint/eslintrc@^3.3.0":
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#96a558f45842989cca7ea1ecd785ad5491193846"
+  integrity sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==
   dependencies:
     ajv "^6.12.4"
     debug "^4.3.2"
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@9.20.0":
-  version "9.20.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.20.0.tgz#7421bcbe74889fcd65d1be59f00130c289856eb4"
-  integrity sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==
+"@eslint/js@9.21.0":
+  version "9.21.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.21.0.tgz#4303ef4e07226d87c395b8fad5278763e9c15c08"
+  integrity sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==
 
-"@eslint/object-schema@^2.1.4":
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843"
-  integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==
+"@eslint/object-schema@^2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f"
+  integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
 
-"@eslint/plugin-kit@^0.2.5":
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81"
-  integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==
+"@eslint/plugin-kit@^0.2.7":
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#9901d52c136fb8f375906a73dcc382646c3b6a27"
+  integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==
   dependencies:
-    "@eslint/core" "^0.10.0"
+    "@eslint/core" "^0.12.0"
     levn "^0.4.1"
 
 "@humanfs/core@^0.19.1":
   resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
   integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
 
-"@humanwhocodes/retry@^0.4.1":
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b"
-  integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==
+"@humanwhocodes/retry@^0.4.2":
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161"
+  integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==
 
-"@stylistic/eslint-plugin-js@^3.0.0":
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-3.1.0.tgz#b36292b09bd810ea1b34e0720512f137335ef745"
-  integrity sha512-lQktsOiCr8S6StG29C5fzXYxLOD6ID1rp4j6TRS+E/qY1xd59Fm7dy5qm9UauJIEoSTlYx6yGsCHYh5UkgXPyg==
+"@stylistic/eslint-plugin-js@^4.0.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-4.1.0.tgz#cb3fcc6bef022f1af8245a6cda404d290358c260"
+  integrity sha512-YOe+dChNoR26JVVt+7BjyebsPIQF05OLNmHCXivq8lLZ4ZeVs4+wXaW+pREVboDiAaSRznauAdAU8f+iQouw6Q==
   dependencies:
     eslint-visitor-keys "^4.2.0"
     espree "^10.3.0"
   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
   integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
 
+"@types/geojson@*":
+  version "7946.0.16"
+  resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a"
+  integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==
+
+"@types/jquery@^3.5.0":
+  version "3.5.32"
+  resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.32.tgz#3eb0da20611b92c7c49ebed6163b52a4fdc57def"
+  integrity sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==
+  dependencies:
+    "@types/sizzle" "*"
+
 "@types/json-schema@^7.0.15":
   version "7.0.15"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
   integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
 
+"@types/leaflet@^1.9.0":
+  version "1.9.16"
+  resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.16.tgz#3e3abc103e106523cde01625057e2294f332ec3b"
+  integrity sha512-wzZoyySUxkgMZ0ihJ7IaUIblG8Rdc8AbbZKLneyn+QjYsj5q1QU7TEKYqwTr10BGSzY5LI7tJk9Ifo+mEjdFRw==
+  dependencies:
+    "@types/geojson" "*"
+
+"@types/sizzle@*":
+  version "2.3.9"
+  resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.9.tgz#d4597dbd4618264c414d7429363e3f50acb66ea2"
+  integrity sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==
+
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
@@ -256,20 +273,20 @@ eslint-visitor-keys@^4.2.0:
   integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
 
 eslint@^9.0.0:
-  version "9.20.1"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.20.1.tgz#923924c078f5226832449bac86662dd7e53c91d6"
-  integrity sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==
+  version "9.21.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.21.0.tgz#b1c9c16f5153ff219791f627b94ab8f11f811591"
+  integrity sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.12.1"
-    "@eslint/config-array" "^0.19.0"
-    "@eslint/core" "^0.11.0"
-    "@eslint/eslintrc" "^3.2.0"
-    "@eslint/js" "9.20.0"
-    "@eslint/plugin-kit" "^0.2.5"
+    "@eslint/config-array" "^0.19.2"
+    "@eslint/core" "^0.12.0"
+    "@eslint/eslintrc" "^3.3.0"
+    "@eslint/js" "9.21.0"
+    "@eslint/plugin-kit" "^0.2.7"
     "@humanfs/node" "^0.16.6"
     "@humanwhocodes/module-importer" "^1.0.1"
-    "@humanwhocodes/retry" "^0.4.1"
+    "@humanwhocodes/retry" "^0.4.2"
     "@types/estree" "^1.0.6"
     "@types/json-schema" "^7.0.15"
     ajv "^6.12.4"