]> git.openstreetmap.org Git - rails.git/commitdiff
Merge branch 'pull/5023'
authorAnton Khorev <tony29@yandex.ru>
Sun, 4 Aug 2024 15:46:25 +0000 (18:46 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sun, 4 Aug 2024 15:46:25 +0000 (18:46 +0300)
33 files changed:
Gemfile.lock
app/assets/javascripts/richtext.js
app/helpers/trace_helper.rb
app/views/layouts/_header.html.erb
app/views/shared/_richtext_field.html.erb
app/views/traces/_trace.html.erb
app/views/traces/edit.html.erb
app/views/traces/show.html.erb
app/views/user_mailer/_gpx_description.text.erb [new file with mode: 0644]
app/views/user_mailer/gpx_failure.text.erb [new file with mode: 0644]
app/views/user_mailer/gpx_success.text.erb [new file with mode: 0644]
config/locales/be.yml
config/locales/br.yml
config/locales/da.yml
config/locales/de.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/ia.yml
config/locales/is.yml
config/locales/mk.yml
config/locales/sv.yml
config/locales/tr.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
lib/rich_text.rb
test/controllers/diary_entries_controller_test.rb
test/lib/rich_text_test.rb
test/mailers/user_mailer_test.rb
yarn.lock

index e1337f6a46a3ad74b247617f1070f0c63a98c2a2..e8d918ff5e2e01d48c3fa007dcc7a0d39db20a13 100644 (file)
@@ -485,7 +485,7 @@ GEM
       io-console (~> 0.5)
     request_store (1.7.0)
       rack (>= 1.4)
-    rexml (3.3.2)
+    rexml (3.3.3)
       strscan
     rinku (2.0.6)
     rotp (6.3.0)
index 3036f169b07ed34c6ec3d45b9176c21e01dcc23a..259b914de614f6d2762cbd4beb3e07ca7adc0843 100644 (file)
@@ -1,7 +1,4 @@
 $(document).ready(function () {
-  /* Hide the preview panes */
-  $(".richtext_preview").hide();
-
   /*
    * When the text in an edit pane is changed, clear the contents of
    * the associated preview pne so that it will be regenerated when
@@ -11,34 +8,10 @@ $(document).ready(function () {
     $(this).parents(".richtext_container").find(".richtext_preview").empty();
   });
 
-  /* Disable all the edit buttons */
-  $(".richtext_doedit").prop("disabled", true);
-
-  /* Enable the preview buttons */
-  $(".richtext_dopreview").prop("disabled", false);
-
-  /*
-   * Install a click handler to switch to edit mode when the
-   * edit button is pressed.
-   */
-  $(".richtext_doedit").click(function (event) {
-    var editor = $(this).parents(".richtext_container").find("textarea");
-    var preview = $(this).parents(".richtext_container").find(".richtext_preview");
-
-    preview.hide();
-    editor.show();
-
-    $(this).siblings(".richtext_dopreview").prop("disabled", false);
-    $(this).prop("disabled", true);
-
-    event.preventDefault();
-  });
-
   /*
-   * Install a click handler to switch to preview mode when the
-   * preview button is pressed.
+   * Install a handler to switch to preview mode
    */
-  $(".richtext_dopreview").click(function (event) {
+  $(".richtext_dopreview").on("show.bs.tab", function () {
     var editor = $(this).parents(".richtext_container").find("textarea");
     var preview = $(this).parents(".richtext_container").find(".richtext_preview");
     var minHeight = editor.outerHeight() - preview.outerHeight() + preview.height();
@@ -54,13 +27,6 @@ $(document).ready(function () {
       });
     }
 
-    editor.hide();
     preview.css("min-height", minHeight + "px");
-    preview.show();
-
-    $(this).siblings(".richtext_doedit").prop("disabled", false);
-    $(this).prop("disabled", true);
-
-    event.preventDefault();
   });
 });
index aec1146cb8da9c68fd100364be0b7a626a98ecd5..fbbeb3dffb48e376c1aeef5053ef39c166b2950b 100644 (file)
@@ -2,4 +2,20 @@ module TraceHelper
   def link_to_tag(tag)
     link_to(tag, :tag => tag, :page => nil)
   end
+
+  def trace_icon(trace, options = {})
+    options[:class] ||= "trace_image"
+    options[:alt] ||= ""
+
+    image_tag trace_icon_path(trace.user, trace),
+              options.merge(:size => 50)
+  end
+
+  def trace_picture(trace, options = {})
+    options[:class] ||= "trace_image"
+    options[:alt] ||= ""
+
+    image_tag trace_picture_path(trace.user, trace),
+              options.merge(:size => 250)
+  end
 end
index cb48d834e378798fa747cda8c0dc8e849449aad5..e96564b82b84839d0ab4d15bbfe998b9d80b1d58 100644 (file)
@@ -82,7 +82,7 @@
     <% if current_user && current_user.id %>
       <div class='d-inline-flex dropdown user-menu logged-in'>
         <button class='d-flex gap-1 align-items-center justify-content-center dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
-          <%= user_thumbnail_tiny(current_user, :width => 25, :height => 25, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
+          <%= user_thumbnail_tiny(current_user, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
           <% if current_user.new_messages.size > 0 %>
             <span class="badge count-number position-static m-1"><%= current_user.new_messages.size %></span>
           <% end %>
index f471cbbbf93bf89457e081abaa67ec5a91c67aa3..23817576276da21b53d39c9ad8c3b3b819092adb 100644 (file)
@@ -1,14 +1,24 @@
 <div id="<%= id %>_container" class="row richtext_container">
   <div id="<%= id %>_content" class="col-sm-8 mb-3 mb-sm-0 richtext_content">
-    <%= builder.text_area(attribute, options.merge(:wrapper => false, "data-preview-url" => preview_url(:type => type))) %>
-    <div id="<%= id %>_preview" class="richtext_preview richtext text-break"></div>
+    <ul class="nav nav-tabs mb-3" role="tablist">
+      <li class="nav-item">
+        <button type="button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#<%= id %>_edit"><%= t(".edit") %></button>
+      </li>
+      <li class="nav-item">
+        <button type="button" class="nav-link richtext_dopreview" data-bs-toggle="tab" data-bs-target="#<%= id %>_preview"><%= t(".preview") %></button>
+      </li>
+    </ul>
+    <div class="tab-content">
+      <div id="<%= id %>_edit" class="tab-pane show active">
+        <%= builder.text_area(attribute, options.merge(:wrapper => false, "data-preview-url" => preview_url(:type => type))) %>
+      </div>
+      <div id="<%= id %>_preview" class="tab-pane richtext_preview richtext text-break"></div>
+    </div>
   </div>
   <div id="<%= id %>_help" class="col-sm-4 richtext_help">
     <div class="card bg-body-tertiary h-100">
       <div class="card-body">
         <%= render :partial => "shared/#{type}_help" %>
-        <%= submit_tag t(".edit"), :id => "#{id}_doedit", :class => "richtext_doedit btn btn-primary", :disabled => true %>
-        <%= submit_tag t(".preview"), :id => "#{id}_dopreview", :class => "richtext_dopreview btn btn-primary" %>
       </div>
     </div>
   </div>
index ba503f7306d335b8eb43d580bd4c33488710d864..f60eea7f1cbe22834e631359484b592f6cddb0a7 100644 (file)
@@ -2,7 +2,7 @@
   <td>
     <% if Settings.status != "gpx_offline" %>
       <% if trace.inserted %>
-        <%= link_to image_tag(trace_icon_path(trace.user, trace), :alt => "", :class => "trace_image"),
+        <%= link_to trace_icon(trace),
                     show_trace_path(trace.user, trace),
                     :class => "d-inline-block" %>
       <% else %>
index 2059178cfa91303ca496f68839d590f6db097141..1c440adf25432440ac04b2f1dc330f137df66617 100644 (file)
@@ -2,7 +2,7 @@
   <h1><%= t ".heading", :name => @trace.name %></h1>
 <% end %>
 
-<%= image_tag trace_picture_path(@trace.user, @trace), :class => "trace_image" %>
+<%= trace_picture(@trace) %>
 
 <%= bootstrap_form_for @trace do |f| %>
   <%= f.text_field :name, :disabled => true %>
index 51b21f9828e0f72cfdd56488f0e6657e9098a442..63adf15729c5aaa662d2f4f3d111b6d4d00de5c7 100644 (file)
@@ -4,7 +4,7 @@
 
 <% if Settings.status != "gpx_offline" %>
   <% if @trace.inserted %>
-    <%= image_tag trace_picture_path(@trace.user, @trace), :class => "trace_image" %>
+    <%= trace_picture(@trace) %>
   <% else %>
     <span class="text-danger"><%= t ".pending" %></span>
   <% end %>
diff --git a/app/views/user_mailer/_gpx_description.text.erb b/app/views/user_mailer/_gpx_description.text.erb
new file mode 100644 (file)
index 0000000..6f7a978
--- /dev/null
@@ -0,0 +1,8 @@
+<% trace_name = @trace_name %>
+<% trace_description = @trace_description %>
+<% if @trace_tags.length > 0 %>
+  <% tags = @trace_tags.map { |trace_tag| trace_tag.tag }.join(", ") %>
+  <%= t ".description_with_tags", :trace_name => trace_name, :trace_description => trace_description, :tags => tags %>
+<% else %>
+  <%= t ".description_with_no_tags", :trace_name => trace_name, :trace_description => trace_description %>
+<% end %>
diff --git a/app/views/user_mailer/gpx_failure.text.erb b/app/views/user_mailer/gpx_failure.text.erb
new file mode 100644 (file)
index 0000000..9544c74
--- /dev/null
@@ -0,0 +1,10 @@
+<%= t ".hi", :to_user => @to_user %>
+
+<%= render :partial => "gpx_description" %>
+<%= t ".failed_to_import" %>
+
+==
+<%= @error %>
+==
+
+<%= t ".more_info", :url => t(".import_failures_url") %>
diff --git a/app/views/user_mailer/gpx_success.text.erb b/app/views/user_mailer/gpx_success.text.erb
new file mode 100644 (file)
index 0000000..aee3a0f
--- /dev/null
@@ -0,0 +1,8 @@
+<%= t ".hi", :to_user => @to_user %>
+
+<%= render :partial => "gpx_description" %>
+<%= t(".loaded", :trace_points => @trace_points, :count => @possible_points) %>
+
+<%= t ".trace_location", :trace_url => @trace_url %>
+
+<%= t ".all_your_traces", :url => @my_traces_url %>
index a6eeca216220b3dff11575770ae036d448b2243a..3a837dfd911ecce47b23c6ad5252027559082741 100644 (file)
@@ -942,6 +942,7 @@ be:
           college: Будынак каледжа
           commercial: Камерцыйны будынак
           construction: Будынак будуецца
+          cowshed: Кароўнік
           detached: Хата
           dormitory: Інтэрнат
           duplex: Падзеленая хата
@@ -971,6 +972,7 @@ be:
           shed: Адрына
           stable: Стайня
           static_caravan: Мабільны дом
+          sty: Свінарнік
           temple: Храм
           terrace: Тэраса
           train_station: Чыгуначны вакзал
@@ -2029,7 +2031,7 @@ be:
       lost password link: Згубілі пароль?
       login_button: Увайсці
       register now: Зарэгістравацца зараз
-      with external: або ўвайдзіце ў сістэму з дапамогай трэцяй асобы
+      with external: або ўвайдзіце ў сістэму з дапамогай пабочнага сэрвісу
       or: або
       auth failure: Прабачце, немагчыма увайсці з такім адрасам і паролем.
     destroy:
@@ -2128,6 +2130,15 @@ be:
           Аўстралія
         contributors_ca_canada: Канада
         contributors_cz_czechia: Чэхія
+        contributors_fi_finland: Фінляндыя
+        contributors_fr_france: Францыя
+        contributors_hr_croatia: Харватыя
+        contributors_nl_netherlands: Нідэрланды
+        contributors_nz_new_zealand: Новая Зеландыя
+        contributors_rs_serbia: Сербія
+        contributors_si_slovenia: Славенія
+        contributors_es_spain: Іспанія
+        contributors_za_south_africa: Паўднёвая Афрыка
         contributors_footer_2_html: |-
           Уключэнне дадзеных у OpenStreetMap не азначае, што пастаўшчыкі пачатковых дадзеных
           якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці
@@ -2255,6 +2266,8 @@ be:
           rail: Чыгунка
           train: Цягнік
           subway: Метро
+          ferry: Паром
+          tram: Трамвай
           trolleybus: Тралейбус
           bus: Аўтобус
           cable_car: Канатная дарога
@@ -2263,8 +2276,11 @@ be:
           taxiway: рулёжная дарожка
           apron: Перон аэрапорта
           admin: Адміністрацыйная мяжа
+          capital: Сталіца
+          city: Горад
           forest: Лес
           wood: пушча
+          sand: Пясок
           golf: Поле для гольфа
           park: Парк
           common: Агульныя
@@ -2286,15 +2302,17 @@ be:
           military: Ваенная зона
           school: Школа
           university: Універсітэт
+          hospital: Бальніца
           building: Значны будынак
           station: Чыгуначны вакзал
           summit: Вяршыня
-          peak: Ð¿ік
+          peak: Ð\9fік
           tunnel: Тунэль (пункцірам)
           bridge: Мост (суцэльная лінія)
           private: Прыватны доступ
           destination: Мэтавы доступ
           construction: Дарогі ў стадыі будаўніцтва
+          bus_stop: Аўтобусны прыпынак
           bicycle_shop: Крама ровараў
           bicycle_parking: Паркоўка для ровараў
           toilets: Прыбіральні
@@ -2536,6 +2554,19 @@ be:
       flash: Кліенцкая інфармацыя была абноўленая паспяхова
     destroy:
       flash: Знішчаная рэгістрацыя кліенцкага дастасавання
+  oauth2_applications:
+    index:
+      new: Зарэгістраваць новую праграму
+      name: Назва
+      permissions: Дазволы
+    application:
+      edit: Рэдагаваць
+      delete: Выдаліць
+    new:
+      title: Зарэгістраваць новую праграму
+    show:
+      edit: Правіць
+      delete: Выдаліць
   users:
     new:
       title: Зарэгістравацца
@@ -2544,11 +2575,22 @@ be:
         аўтаматычна.
       about:
         header: Свабодная і даступная для рэдагавання
+        paragraph_1: У адрозненне ад іншых карт, OpenStreetMap цалкам створана такімі
+          ж людзьмі як вы і кожны можа яе свабодна рэдагаваць і выкарыстоўваць.
+        paragraph_2: Зарэгіструйцеся, каб зрабіць свой унёсак.
+        welcome: Вітаем у OpenStreetMap
       display name description: Ваша імя, якое будзе бачнае ўсім. Вы можаце змяніць
         яго потым ў вашых параметрах.
       external auth: 'Аўтэнтыфікацыя праз:'
       continue: Зарэгістравацца
       terms accepted: Дзякуй за прыняцце новых умоў ўдзелу!
+      email_help:
+        privacy_policy: палітыкі прыватнасці
+        html: Адрас вашай электроннай пошты не будзе паказвацца іншым карыстальнікам,
+          звярніцеся да %{privacy_policy_link} за больш дэтальнай інфармацыяй.
+      consider_pd_html: Я пагаджаюся з тым, што мой унёсак будзе часткай %{consider_pd_link}.
+      consider_pd: грамадскага набытку
+      or: або
       use external auth: У якасці альтэрнатывы выкарыстайце для ўваходу старонні сервіс
     terms:
       title: Умовы
@@ -2802,6 +2844,7 @@ be:
       intro: Заўважылі памылку або чагосьці не стае? Дайце іншым удзельнікам магчымасць
         даведацца пра памылку і такім чынам мы выправім яе. Перамясціце маркер у патрэбную
         пазіцыю і напішыце заўвагу з тлумачэннем праблемы.
+      anonymous_warning_sign_up: Зарэгістравацца
       advice: Ваша заўвага агульнадаступная і можа выкарыстоўвацца для абнаўлення
         карты, таму не ўводзьце асабістую інфармацыю або інфармацыю з абароненых аўтарскім
         правам карт або рэестраў.
index 3b9640ebe925f9ad7a39ae6c445ced1e2d997dd7..548529766910c454459444c55d111036fc65e8bc 100644 (file)
@@ -2484,22 +2484,22 @@ br:
       openid_login_button: Kenderc'hel
       openid:
         title: Kevreañ gant OpenID
-        alt: Kevreañ gant un URL OpenID
+        alt: Logo OpenID
       google:
         title: Kevreañ gant Google
-        alt: Kevreañ gant OpenID Google
+        alt: Logo Google
       facebook:
         title: Kevreañ gant Facebook
-        alt: Kevreañ gant ur gont Facebook
+        alt: Logo Facebook
       microsoft:
         title: Kevreañ gant Microsoft
-        alt: Kevreañ gant ur gont Microsoft
+        alt: Logo Microsoft
       github:
         title: Kevreañ gant GitHub
-        alt: Kevreañ gant ur gont GitHub
+        alt: Logo GitHub
       wikipedia:
         title: Kevreañ gant Wikipedia
-        alt: Kevreañ gant ur gont Wikipedia
+        alt: Logo Wikipedia
   oauth:
     authorize:
       title: Aotren mont d'ho kont
@@ -2650,6 +2650,7 @@ br:
       terms accepted: Trugarez deoc'h evit bezañ asantet da ziferadennoù nevez ar
         c'henlabourer !
       email_help:
+        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
index 90c17a15584f0f3f6f371e583dd9fddfb8f941ae..bfb1255a39569d937de65cde4e74eddd82af3671 100644 (file)
@@ -2698,6 +2698,8 @@ da:
       write_notes: Ændre bemærkninger
       write_redactions: Rediger kortdata
       read_email: Læse brugerens e-mailadresse
+      consume_messages: Læs, opdater status og slet brugerbeskeder
+      send_messages: Send private beskeder til andre brugere
       skip_authorization: Godkend applikation automatisk
     for_roles:
       moderator: Denne tilladelse er til handlinger, der kun er tilgængelige for moderatorer
index 06a217f6b6ce828d92bef52e2f1f40adb5fece00..4646cab83a6db4434c5300a8bee3c659d3fda9d4 100644 (file)
@@ -2840,6 +2840,8 @@ de:
       write_notes: Notizen bearbeiten
       write_redactions: Kartendaten redigieren
       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
       skip_authorization: Antrag automatisch genehmigen
     for_roles:
       moderator: Diese Berechtigung gilt nur für Aktionen, die nur Moderatoren zur
index 1c119fcf3cca30d3a0a98c8f6c81ec67dcf6366b..a694163377f100a3c3a89261d07d1d8ad0a3ecb1 100644 (file)
@@ -1627,11 +1627,14 @@ en:
       befriend_them: "You can also add them as a friend at %{befriendurl}."
       befriend_them_html: "You can also add them as a friend at %{befriendurl}."
     gpx_description:
+      description_with_tags: "It looks like your GPX file %{trace_name} with the description %{trace_description} and the following tags: %{tags}"
       description_with_tags_html: "It looks like your GPX file %{trace_name} with the description %{trace_description} and the following tags: %{tags}"
+      description_with_no_tags: "It looks like your GPX file %{trace_name} with the description %{trace_description} and no tags"
       description_with_no_tags_html: "It looks like your GPX file %{trace_name} with the description %{trace_description} and no tags"
     gpx_failure:
       hi: "Hi %{to_user},"
       failed_to_import: "failed to import. Here is the error:"
+      more_info: "More information about GPX import failures and how to avoid them can be found at %{url}."
       more_info_html: "More information about GPX import failures and how to avoid them can be found at %{url}."
       import_failures_url: "https://wiki.openstreetmap.org/wiki/GPX_Import_Failures"
       subject: "[OpenStreetMap] GPX Import failure"
@@ -1640,6 +1643,8 @@ en:
       loaded:
         one: "loaded successfully with %{trace_points} out of a possible %{count} point."
         other: "loaded successfully with %{trace_points} out of a possible %{count} points."
+      trace_location: "Your trace is available at %{trace_url}"
+      all_your_traces: "All your successfully uploaded GPX traces can be found at %{url}"
       all_your_traces_html: "All your successfully uploaded GPX traces can be found at %{url}."
       subject: "[OpenStreetMap] GPX Import success"
     signup_confirm:
index dc4748e155fbe47c710e2450b955084273d996ae..5e7bf550efddb59eb75e4c48e6623dbcba3289fe 100644 (file)
@@ -2660,6 +2660,8 @@ eo:
       write_notes: modifi rimarkojn
       write_redactions: Redakti map-datumojn
       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
       skip_authorization: Aŭtomate akcepti aplikaĵojn
     for_roles:
       moderator: Tiu ĉi permeso estas por agoj disponeblaj nur por kontrolantoj
index 1d517adf567fd1aa36eb3f6d9ece580e77c10811..1d096a5d4f38936d11c12580d2d0b6bf21d4097a 100644 (file)
@@ -2810,6 +2810,7 @@ es:
       write_notes: Modifica notas
       write_redactions: Censurar datos del mapa
       read_email: Leer dirección de correo electrónico del usuario
+      send_messages: Enviar mensajes privados a otros usuarios
       skip_authorization: Auto aprobar aplicación
     for_roles:
       moderator: Este permiso es para acciones disponibles solo para moderadores.
index f22835bc2457bc92460f84f0ad5534da0401e8a5..420e74cca7c2f4ceda3a9426cc0750b71b5397fc 100644 (file)
@@ -116,7 +116,7 @@ fr:
     dir: ltr
   time:
     formats:
-      friendly: '%e %B %Y à %H%M'
+      friendly: '%e %B %Y à %-H h %M'
       blog: '%e %B %Y'
   helpers:
     file:
@@ -138,8 +138,8 @@ fr:
         create: S’inscrire
         update: Mettre à jour
       redaction:
-        create: Créer la censure
-        update: Enregistrer la censure
+        create: Créer le masquage
+        update: Enregistrer le masquage
       trace:
         create: Téléverser
         update: Enregistrer les modifications
@@ -162,7 +162,7 @@ fr:
       changeset_tag: Attribut du groupe de modifications
       country: Pays
       diary_comment: Commentaire du journal
-      diary_entry: Entrée d’agenda
+      diary_entry: Entrée du journal
       friend: Ami(e)
       issue: Problème
       language: Langue
@@ -199,7 +199,7 @@ fr:
         support_url: URL de l’assistance
         allow_read_prefs: lire les préférences de l’utilisateur
         allow_write_prefs: modifier les préférences de l’utilisateur
-        allow_write_diary: créer des entrées de carnet, des commentaires et des liens
+        allow_write_diary: créer des entrées du journal, des commentaires et des liens
           d’amitié
         allow_write_api: modifier la carte
         allow_read_gpx: lire ses traces GPS privées
@@ -251,7 +251,7 @@ fr:
         email: Courriel
         new_email: Nouvelle adresse de courriel
         active: Actif
-        display_name: Afficher le nom
+        display_name: Pseudonyme
         description: Description du profil
         home_lat: Latitude
         home_lon: Longitude
@@ -347,7 +347,7 @@ fr:
         reopened_at_by_html: Réactivé à %{when} par %{user}
       rss:
         title: Notes OpenStreetMap
-        description_all: Une liste de notes rapportées, commentées ou fermées
+        description_all: Une liste de notes signalées, commentées ou fermées
         description_area: Une liste de notes, signalées, commentées ou fermées dans
           votre zone [(%{min_lat} ; %{min_lon}) – (%{max_lat} ; %{max_lon})]
         description_item: Un flux RSS pour la note %{id}
@@ -369,7 +369,7 @@ fr:
           utilisant le bouton ci-dessous. Veuillez prendre note des détails suivants :'
         delete_profile: Les informations de votre profil, y compris votre avatar,
           votre description et votre lieu de résidence seront supprimées.
-        delete_display_name: Votre nom affiché sera supprimé et pourra être réutilisé
+        delete_display_name: Votre pseudonyme sera supprimé et pourra être réutilisé
           pour d’autres comptes.
         retain_caveats: 'Cependant, quelques informations vous concernant seront conservées
           sur OpenStreetMap, même après la suppression de votre compte :'
@@ -396,12 +396,12 @@ fr:
       external auth: Authentification externe
       openid:
         link: https://wiki.openstreetmap.org/wiki/FR:OpenID
-        link text: qu’est-ce que cela ?
+        link text: qu’est-ce?
       public editing:
         heading: Modification publique
         enabled: Activée. Non anonyme et peut modifier les données.
         enabled link: https://wiki.openstreetmap.org/wiki/FR:Modifications_anonymes
-        enabled link text: qu’est-ce que ceci ?
+        enabled link text: qu’est-ce ?
         disabled: Désactivée et ne peut pas modifier les données ; toutes les précédentes
           modifications sont anonymes.
         disabled link text: pourquoi ne puis-je pas modifier ?
@@ -415,9 +415,9 @@ fr:
         agreed_with_pd: Vous avez également déclaré que vous considérez vos modifications
           comme relevant du domaine public.
         link: https://wiki.osmfoundation.org/wiki/Licence/Contributor_Terms/FR
-        link text: qu’est-ce que ceci ?
+        link text: qu’est-ce ?
       save changes button: Enregistrer les modifications
-      delete_account: Supprimer le compte...
+      delete_account: Supprimer le compte
     go_public:
       heading: Modification publique
       currently_not_public: Actuellement, vos modifications sont anonymes et les utilisateurs
@@ -458,10 +458,10 @@ fr:
       other: '%{count} chemins'
     download_xml: Télécharger en XML
     view_history: Voir l’historique
-    view_unredacted_history: Voir l'historique non censuré
+    view_unredacted_history: Voir l'historique non masqué
     view_details: Afficher les détails
-    view_redacted_data: Afficher les données censurées
-    view_redaction_message: Afficher le message de rédaction
+    view_redacted_data: Afficher les données masquées
+    view_redaction_message: Afficher le message de masquage
     location: 'Emplacement :'
     common_details:
       coordinates_html: '%{latitude} ; %{longitude}'
@@ -506,8 +506,8 @@ fr:
         note: note
     timeout:
       title: Erreur de dépassement du délai d’attente
-      sorry: Désolé, les données pour l’objet %{type} d’identifiant %{id} ont mis
-        trop de temps à être récupérées.
+      sorry: Désolé, obtenir les données pour l’objet %{type} d’identifiant %{id}
+        a pris trop de temps.
       type:
         node: nœud
         way: chemin
@@ -527,7 +527,7 @@ fr:
         navigateur lent ou le bloquer. Êtes-vous sûr de vouloir afficher ces données
         ?
       load_data: Charger les données
-      loading: Chargement en cours...
+      loading: Chargement en cours
     tag_details:
       tags: Attributs
       wiki_link:
@@ -546,18 +546,18 @@ fr:
       enclosing: Objets englobants
   old_nodes:
     not_found:
-      sorry: 'Désolé, le nœud #%{id} version %{version} est introuvable.'
+      sorry: Désolé, la version %{version} du nœud %{id} est introuvable.
   old_ways:
     not_found:
-      sorry: 'Désolé, la façon #%{id} version %{version} est introuvable.'
+      sorry: Désolé, la version %{version} du chemin %{id} est introuvable.
   old_relations:
     not_found:
-      sorry: 'Désolé, la relation #%{id} version %{version} est introuvable.'
+      sorry: Désolé, la version %{version} de la relation %{id} est introuvable.
   changesets:
     changeset_paging_nav:
       showing_page: Page %{page}
-      next: Suivant â\96¸
-      previous: â\97\82 Précédent
+      next: Suivant â\80º
+      previous: â\80¹Â Précédent
     changeset:
       anonymous: Anonyme
       no_edits: (aucune modification)
@@ -588,10 +588,10 @@ fr:
         closed: Fermé
         belongs_to: Auteur
     subscribe:
-      heading: S'abonner à la discussion sur l'ensemble de modifications suivante ?
-      button: S'abonner à la discussion
+      heading: S’abonner à la discussion sur l’ensemble de modifications suivant ?
+      button: Sabonner à la discussion
     unsubscribe:
-      heading: Se désabonner de la discussion du groupe de modifications suivant ?
+      heading: Se désabonner de la discussion du groupe de modifications suivant?
       button: Se désinscrire de la discussion
     heading:
       title: Groupe de modifications %{id}
@@ -599,9 +599,8 @@ fr:
     no_such_entry:
       title: Aucun ensemble de modifications de ce type
       heading: 'Aucune entrée avec l’identifiant : %{id}'
-      body: Désolé, il n’y a aucun groupe de modifications avec l'identifiant %{id}.
-        Veuillez vérifier l'orthographe ou la validité du lien sur lequel vous avez
-        cliqué.
+      body: Désolé, il n’y a aucun groupe de modifications avec l’identifiant %{id}.
+        Peut-être avez-vous fait une erreur en le recopiant ou suivi un lien erroné ?
     show:
       title: 'Groupe de modifications : %{id}'
       created: 'Créé : %{when}'
@@ -617,7 +616,7 @@ fr:
       subscribe: S’abonner
       unsubscribe: Se désabonner
       comment_by_html: Commentaire de %{user} %{time_ago}
-      hidden_comment_by_html: Commentaire caché de %{user} %{time_ago}
+      hidden_comment_by_html: Commentaire masqué de %{user} %{time_ago}
       hide_comment: masquer
       unhide_comment: démasquer
       comment: Commenter
@@ -631,22 +630,22 @@ fr:
       relations: Relations (%{count})
       relations_paginated: Relations (%{x} à %{y} sur %{count})
     timeout:
-      sorry: Désolé, la liste des groupes de modifications que vous avez demandée
-        a mis trop de temps à récupérer.
+      sorry: Désolé, récupérer la liste des groupes de modifications que vous avez
+        demandée a pris trop de temps.
   changeset_comments:
     comment:
       comment: Nouveau commentaire sur le groupe de modifications nº %{changeset_id}
         par %{author}
       commented_at_by_html: Mis à jour le %{when} par %{user}
     comments:
-      comment: Nouveau commentaire sur le groupe de modifications nº %{changeset_id}
+      comment: Nouveau commentaire sur le groupe de modifications %{changeset_id}
         par %{author}
     index:
       title_all: Discussion sur le groupe de modifications OpenStreetMap
-      title_particular: Discussion sur le groupe de modifications OpenStreetMap nº %{changeset_id}
+      title_particular: Discussion sur le groupe de modifications OpenStreetMap %{changeset_id}
     timeout:
-      sorry: Désolé, la liste des commentaires d’ensembles de modifications que vous
-        avez demandée est trop longue à récupérer.
+      sorry: Désolé, récupérer les commentaires du groupe de modifications que vous
+        avez demandés a pris trop de temps.
   dashboards:
     contact:
       km away: à %{count} km
@@ -660,7 +659,7 @@ fr:
       title: Mon tableau de bord
       no_home_location_html: '%{edit_profile_link} et définissez l’emplacement de
         votre domicile pour voir les utilisateurs à proximité.'
-      edit_your_profile: Modifier votre profil
+      edit_your_profile: Modifiez votre profil
       my friends: Mes amis
       no friends: Vous n’avez encore ajouté aucun ami.
       nearby users: Autres utilisateurs à proximité
@@ -680,12 +679,12 @@ fr:
       title: Journaux des utilisateurs
       title_friends: Journaux des amis
       title_nearby: Journaux des utilisateurs à proximité
-      user_title: Carnet de %{user}
-      in_language_title: Entrées du carnet en %{language}
+      user_title: Journal de %{user}
+      in_language_title: Entrées du journal en %{language}
       new: Nouvelle entrée du journal
       new_title: Écrire une nouvelle entrée dans mon journal utilisateur
       my_diary: Mon journal
-      no_entries: Aucune entrée de carnet
+      no_entries: Aucune entrée de journal
       recent_entries: Entrées récentes du journal
       older_entries: Entrées plus anciennes
       newer_entries: Entrées plus récentes
@@ -693,8 +692,8 @@ fr:
       title: Modifier l’entrée du journal
       marker_text: Emplacement de l’entrée du journal
     show:
-      title: Carnet de %{user} | %{title}
-      user_title: Carnet de %{user}
+      title: Journal de %{user} | %{title}
+      user_title: Journal de %{user}
       discussion: Discussion
       subscribe: S’abonner
       unsubscribe: Se désabonner
@@ -702,11 +701,11 @@ fr:
       login_to_leave_a_comment_html: '%{login_link} pour laisser un commentaire'
       login: Se connecter
     no_such_entry:
-      title: Aucune entrée de carnet correspondante
+      title: Aucune entrée de journal correspondante
       heading: 'Aucune entrée avec l’identifiant : %{id}'
-      body: Désolé, il n’y a aucune entrée ni commentaire de carnet avec l’identifiant
-        %{id}. Veuillez vérifier votre orthographe ou la validité du lien que vous
-        avez cliqué.
+      body: Désolé, il n’y a aucune entrée ni commentaire de journal avec l’identifiant
+        %{id}. Peut-être avez-vous fait une erreur en le recopiant ou suivi un lien
+        erroné ?
     diary_entry:
       posted_by_html: Publié par %{link_user} le %{created} en %{language_link}.
       updated_at_html: Dernière mise à jour le %{updated}.
@@ -738,8 +737,8 @@ fr:
         description: Entrées récentes du journal OpenStreetMap de %{user}
       language:
         title: Entrées du journal OpenStreetMap en %{language_name}
-        description: Entrées récentes des carnets d’utilisateurs d’OpenStreetMap en
-          %{language_name}
+        description: Entrées récentes des journaux d’utilisateurs d’OpenStreetMap
+          en %{language_name}
       all:
         title: Entrées des journaux OpenStreetMap
         description: Entrées récentes des journaux d’utilisateurs de OpenStreetMap
@@ -760,6 +759,8 @@ fr:
       comment: Commentaire
       newer_comments: Commentaires plus récents
       older_comments: Commentaires plus anciens
+    new:
+      heading: Ajouter un commentaire à cette discussion ?
   doorkeeper:
     errors:
       messages:
@@ -945,7 +946,7 @@ fr:
           prison: Prison
           pub: Pub
           public_bath: Bains publics
-          public_bookcase: Bibliothèque publique
+          public_bookcase: Microbibliothèque
           public_building: Bâtiment public
           ranger_station: Poste de garde forestière
           recycling: Point de recyclage
@@ -2671,6 +2672,7 @@ fr:
           Il n’est pas nécessaire d’établir formellement un groupe dans la même mesure que les chapitres locaux.
           En effet, de nombreux groupes existent avec beaucoup de succès en tant que rassemblement informel de personnes ou en tant que groupe communautaire. Chacun peut en créer ou en rejoindre un. En savoir plus sur la %{communities_wiki_link}.
         communities_wiki: page wiki des communautés
+        communities_wiki_url: https://wiki.openstreetmap.org/wiki/FR:User_group
   traces:
     visibility:
       private: Privé (partagé anonymement, points non ordonnés)
@@ -2806,6 +2808,7 @@ fr:
       oauth2_authorizations: Droits OAuth 2
       muted_users: Utilisateurs silencieux
     auth_providers:
+      openid_url: URL OpenID
       openid_login_button: Continuer
       openid:
         title: Connexion avec OpenID
@@ -2835,7 +2838,7 @@ fr:
       allow_to: 'Autoriser l’application cliente à :'
       allow_read_prefs: lire vos préférences utilisateur ;
       allow_write_prefs: modifier vos préférences utilisateur ;
-      allow_write_diary: créer des entrées dans votre carnet, faire des commentaires
+      allow_write_diary: créer des entrées dans votre journal, faire des commentaires
         et ajouter des ami(e)s ;
       allow_write_api: modifier la carte.
       allow_read_gpx: lire vos traces GPS privées ;
@@ -2867,6 +2870,8 @@ fr:
       write_notes: Modifier les notes
       write_redactions: Caviarder les données cartographiques
       read_email: Lire l’adresse courriel de l’utilisateur
+      consume_messages: Lire, modifier l’état et supprimer les messages de l’utilisateur
+      send_messages: Envoyer des messages privés à d’autres utilisateurs
       skip_authorization: Demande d’approbation automatique
     for_roles:
       moderator: Cette autorisation concerne les actions disponibles uniquement pour
@@ -3069,7 +3074,7 @@ fr:
       destroy_mute: Réactiver le son de cet utilisateur
       edit_profile: Modifier le profil
       send message: Envoyer un message
-      diary: Carnet
+      diary: Journal
       edits: Modifications
       traces: Traces
       notes: Notes de carte
@@ -3201,6 +3206,8 @@ fr:
     update:
       only_creator_can_edit: Seul le modérateur ou la modératrice qui a créé ce blocage
         peut le modifier.
+      only_creator_or_revoker_can_edit: Seuls les modérateurs ayant créé ou annulé
+        ce blocage peuvent le modifier.
       success: Blocage mis à jour.
     index:
       title: Blocages d’utilisateur
@@ -3391,7 +3398,8 @@ fr:
       center_marker: Centrer la carte sur le marqueur
       paste_html: Coller le HTML à inclure dans le site web
       view_larger_map: Afficher une carte plus grande
-      only_standard_layer: Seule la couche standard peut être exportée comme une image
+      only_standard_layer: Seule les couche « Standard », « Carte cyclable » et « Carte
+        de transport » peuvent être exportées comme une image
     embed:
       report_problem: Signaler un problème
     key:
index eb86798a82d84a36465bb7caae76e8cc0b6eb119..d692068664b3c56e44fe2d6ded0edc9e53295f56 100644 (file)
@@ -420,7 +420,7 @@ gl:
       feature_warning: Cargando %{num_features} funcións, que poden facer que o teu
         navegador sexa lento ou non responda. Queres mostrar estes datos?
       load_data: Cargar os datos
-      loading: Estase a carregar...
+      loading: Cargando...
     tag_details:
       tags: Etiquetas
       wiki_link:
@@ -654,7 +654,7 @@ gl:
       newer_comments: Comentarios máis recentes
       older_comments: Comentarios máis vellos
     new:
-      heading: Queres engadir un comentario á seguinte discusión sobre a entrada do
+      heading: Queres engadir un comentario á seguinte conversa sobre a entrada no
         diario?
   doorkeeper:
     errors:
@@ -864,7 +864,7 @@ gl:
           veterinary: Clínica veterinaria
           village_hall: Concello
           waste_basket: Cesto do lixo
-          waste_disposal: Contedor de lixo
+          waste_disposal: Colector do lixo
           waste_dump_site: Lugar de vertedoiro de lixo
           watering_place: Bebedoiro para animais
           water_point: Punto de auga
@@ -2727,6 +2727,8 @@ gl:
       write_notes: Modificar notas
       write_redactions: Censurar datos do mapa
       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
       skip_authorization: Aprobar automaticamente aplicacións
     for_roles:
       moderator: Estes permisos son para as accións dispoñibles unicamente para os
@@ -3052,6 +3054,8 @@ gl:
       flash: Bloqueo creado para o usuario %{name}.
     update:
       only_creator_can_edit: Só o moderador que creou o bloqueo pode editalo.
+      only_creator_or_revoker_can_edit: Só os moderadores que crearon ou revogaron
+        o bloqueo poden editalo.
       success: Bloqueo actualizado.
     index:
       title: Bloqueos de usuario
@@ -3262,7 +3266,7 @@ gl:
           other: Estás a menos de %{count} pés deste punto
       base:
         standard: Estándar
-        cyclosm: CyclOSM (Ciclista)
+        cyclosm: CyclOSM
         cycle_map: Ciclista
         transport_map: Transporte
         tracestracktop_topo: Tracestrack Topo
index bf5812cd3f7db495a913c6eb350a0782ca344078..3defbfbda37029b12f5b13f8d231f240b320952c 100644 (file)
@@ -2699,6 +2699,8 @@ he:
       write_notes: לשנות הערות
       write_redactions: שינוי נתוני המפה
       read_email: לקרוא את כתובת הדוא"ל של המשתמש
+      consume_messages: קריאה, עדכון מצב ומחיקה של הודעות משתמשים
+      send_messages: שליחת הודעה פרטית למשתמשים אחרים
       skip_authorization: לאשר את היישום אוטומטית
     for_roles:
       moderator: ההרשאה הזאת מיועדת לפעולות שזמינות רק למפקחים
index 846ead0cff47a261b328b15e6e488fd840b6f25e..cb72dcccbbb204f96d81c9af08fe97fc57bc8b5a 100644 (file)
@@ -4,6 +4,7 @@
 # Author: Carlosedepaula
 # Author: Fanjiayi
 # Author: Julian Mendez
+# Author: Karmwiki
 # Author: Macofe
 # Author: McDutchie
 # Author: Nemo bis
@@ -2689,6 +2690,7 @@ ia:
       write_notes: Modificar notas
       write_redactions: Censurar datos del carta
       read_email: Leger le adresse de e-mail del usator
+      send_messages: Inviar messages private a altere usatores
       skip_authorization: Approbar automaticamente le application
     for_roles:
       moderator: Iste permission es pro actiones que es disponibile solmente al moderatores
index 11711973d30696306ef232dba0da1834c736d556..d48e413a3af27b11f1b6fa04fd0153ece8467847 100644 (file)
@@ -20,6 +20,8 @@ is:
     formats:
       friendly: '%e. %B %Y kl. %H:%M'
       blog: '%e. %B %Y'
+  count:
+    at_least_pattern: '%{count}+'
   helpers:
     file:
       prompt: Veldu skrá
@@ -53,6 +55,9 @@ is:
       messages:
         invalid_email_address: lítur ekki út fyrir að vera gilt tölvupóstfang
         email_address_not_routable: er ekki nothæft
+      models:
+        user_mute:
+          is_already_muted: er nú þegar þaggað
     models:
       acl: Aðgangslisti
       changeset: Breytingasett
@@ -214,6 +219,7 @@ is:
         other: fyrir %{count} árum síðan
   printable_name:
     with_name_html: '%{name} (%{id})'
+    current_and_old_links_html: '%{current_link}, %{old_link}'
   editor:
     default: Sjálfgefið (núna %{name})
     id:
@@ -225,8 +231,10 @@ is:
   auth:
     providers:
       none: Ekkert
+      openid: OpenID
       google: Google
       facebook: Facebook
+      microsoft: Microsoft
       github: GitHub
       wikipedia: Wikipedia
   api:
@@ -461,8 +469,15 @@ is:
         created: Búið til
         closed: Lokað
         belongs_to: Höfundur
+    heading:
+      title: Breytingasett %{id}
+      created_by_html: Útbúið af %{link_user} þann %{created}.
+    no_such_entry:
+      title: Ekkert slíkt breytingasett
     show:
       title: 'Breytingasett: %{id}'
+      created: 'Búið til: %{when}'
+      closed: 'Lokað: %{when}'
       created_ago_html: Búið til %{time_ago}
       closed_ago_html: Lokað %{time_ago}
       created_ago_by_html: Búið til %{time_ago} af %{user}
@@ -550,6 +565,9 @@ is:
     show:
       title: Blogg %{user} | %{title}
       user_title: Blogg %{user}
+      discussion: Umræða
+      subscribe: Gerast áskrifandi
+      unsubscribe: Hætta í áskrift
       leave_a_comment: Bæta við athugasemd
       login_to_leave_a_comment_html: '%{login_link} til að bæta við athugasemd'
       login: Skrá inn
@@ -593,6 +611,10 @@ is:
       all:
         title: OpenStreetMap bloggfærslur
         description: Nýjustu bloggfærslur frá notendum OpenStreetMap
+    subscribe:
+      button: Gerast áskrifandi að umræðu
+    unsubscribe:
+      button: Hætta áskrift að umræðu
   diary_comments:
     index:
       title: Dagbók Athugasemdir bætt við af %{user}
@@ -617,6 +639,8 @@ is:
       contact_the_community_html: Ekki hika við að %{contact_link} OpenStreetMap-samfélagið
         ef þú hefur fundið bilaðan tengil eða villu. Taktu niður nákvæma vefslóð beiðni
         þinnar.
+    bad_request:
+      title: Ógild beiðni
     forbidden:
       title: Bannað
       description: Aðgerðin sem þú baðst um á OpenStreetMap-þjóninum er aðeins í boði
@@ -814,6 +838,7 @@ is:
           college: Framhaldsskólabygging
           commercial: Verslunarhús
           construction: Bygging á framkvæmdastigi
+          cowshed: Fjós
           detached: Aðskilið hús
           dormitory: Heimavist
           duplex: Parhús
@@ -1687,8 +1712,8 @@ is:
           hefur gert athugasemd við. Minnispunkturinn er nálægt %{place}.'
         commented_note_html: '%{commenter} hefur endurvirkjað minnispunkt á korti
           sem þú hefur gert athugasemd við. Minnispunkturinn er nálægt %{place}.'
-      details: Nánari upplýsingar um minnispunktinn er að finna á %{url}.
-      details_html: Nánari upplýsingar um minnispunktinn er að finna á %{url}.
+      details: Svaraðu eða fáðu nánari upplýsingar um minnispunktinn á %{url}.
+      details_html: Svaraðu eða fáðu nánari upplýsingar um minnispunktinn á %{url}.
     changeset_comment_notification:
       hi: Hæ %{to_user},
       greeting: Hæ,
@@ -1708,12 +1733,11 @@ is:
         partial_changeset_with_comment: með umsögninni '%{changeset_comment}'
         partial_changeset_with_comment_html: með umsögninni '%{changeset_comment}'
         partial_changeset_without_comment: án athugasemdar
-      details: Nánari upplýsingar um breytingasettið er að finna á %{url}.
-      details_html: Nánari upplýsingar um breytingasettið er að finna á %{url}.
-      unsubscribe: Til að hætta áskrift að uppfærslum á þessu breytingasetti, farðu
-        þá á %{url} og smelltu á "Segja upp áskrift".
-      unsubscribe_html: Til að hætta áskrift að uppfærslum á þessu breytingasetti,
-        farðu þá á %{url} og smelltu á "Segja upp áskrift".
+      details: Svaraðu eða fáðu nánari upplýsingar um breytingasettið á %{url}.
+      details_html: Svaraðu eða fáðu nánari upplýsingar um breytingasettið á %{url}.
+      unsubscribe: Þú getur hætt áskrift að uppfærslum á þessu breytingasetti á %{url}.
+      unsubscribe_html: Þú getur hætt áskrift að uppfærslum á þessu breytingasetti
+        á %{url}.
   confirmations:
     confirm:
       heading: Skoðaðu tölvupóstinn þinn!
@@ -1792,6 +1816,9 @@ is:
       people_mapping_nearby: nálæga notendur
     muted:
       title: Þögguð skilaboð
+      messages:
+        one: '%{count} þögguð skilaboð'
+        other: Þú ert með %{count} þögguð skilaboð
     reply:
       wrong_user: Þú hefur skráð þig inn sem `%{user}' en skilaboðin sem þú baðst
         um að svara voru ekki send til þess notanda. Skráðu þig inn sem réttan notanda
@@ -1810,6 +1837,7 @@ is:
     heading:
       my_inbox: Innhólfið mitt
       my_outbox: Úthólfið mitt
+      muted_messages: Þögguð skilaboð
     mark:
       as_read: Skilaboðin voru merkt sem lesin
       as_unread: Skilaboðin voru merkt sem ólesin
@@ -1852,6 +1880,7 @@ is:
       image: Mynd
       gravatar:
         gravatar: Nota Gravatar-auðkennismynd
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         what_is_gravatar: Hvað er Gravatar?
         disabled: Gravatar-auðkennismynd hefur verið gerð óvirk.
         enabled: Birting Gravatar-auðkennismyndar hefur verið gerð virk.
@@ -1871,15 +1900,16 @@ is:
       failure: Gat ekki uppfært kjörstillingar.
   sessions:
     new:
-      title: Innskrá
-      tab_title: Innskrá
+      title: Skrá inn
+      tab_title: Skrá inn
       email or username: Tölvupóstur eða notandanafn
       password: Lykilorð
       remember: Muna innskráninguna
       lost password link: Gleymdirðu lykilorðinu þínu?
-      login_button: Innskrá
+      login_button: Skrá inn
       register now: Skrá þig núna
-      with external: 'Þú getur líka notað utanaðkomandi þjónustur til innskráningar:'
+      with external: eða skráð inn með utanaðkomandi þjónustu
+      or: eða
       auth failure: Þetta notandanafn eða lykilorð er rangt.
     destroy:
       title: Útskráning
@@ -2070,6 +2100,7 @@ is:
           Statistics Canada).
         contributors_ca_canada: Kanada
         contributors_cz_czechia: Tékkland
+        contributors_cz_cc_licence_url: https://creativecommons.org/licenses/by/4.0/
         contributors_fi_credit_html: |-
           %{finland}: Inniheldur gögn frá
           landupplýsingagagnagrunni Landmælinga Finnlands
@@ -2081,6 +2112,9 @@ is:
           %{france}: Inniheldur afleidd gögn frá
           Direction Générale des Impôts (Skattstjóraembættið).
         contributors_fr_france: Frakkland
+        contributors_hr_croatia: Króatía
+        contributors_hr_dgu_url: https://dgu.gov.hr/
+        contributors_hr_open_data_portal_url: https://data.gov.hr/
         contributors_nl_credit_html: '%{netherlands}: Inniheldur AND-gögn &copy;,
           2007 (%{and_link})'
         contributors_nl_netherlands: Holland
@@ -2099,7 +2133,9 @@ is:
           (opinberar upplýsingar um Serbíu), 2018.
         contributors_rs_serbia: Serbía
         contributors_rs_rgz: Serbneska jarðfræðistofnunin
+        contributors_rs_rgz_url: https://geosrbija.rs/
         contributors_rs_open_data_portal: National Open Data Portal
+        contributors_rs_open_data_portal_url: https://data.gov.rs/sr/
         contributors_si_credit_html: |-
           %{slovenia}: Inniheldur gögn frá %{gu_link} og %{mkgp_link}
           (opinberar upplýsingar frá Slóveníu).
@@ -2321,6 +2357,7 @@ is:
           ferry: Ferja
           light_rail: Léttlest
           tram: Sporvagn
+          trolleybus: Rafknúinn strætisvagn
           bus: Strætó
           cable_car: Kláflyfta
           chair_lift: Stólalyfta
@@ -2330,11 +2367,13 @@ is:
           admin: Stjórnsýslumörk
           capital: Höfuðborg
           city: Borg
+          orchard: Trjágarður
           vineyard: Vínekra
           forest: Ræktaður skógur
           wood: Skógur
           farmland: Ræktarland
           grass: Gras
+          meadow: Rjóður
           bare_rock: Berar klappir
           sand: Sandur
           golf: Golfvöllur
@@ -2562,6 +2601,7 @@ is:
         other: GPX-skrá með %{count} punktum frá %{user}
       description_without_count: GPX-skrá frá %{user}
   application:
+    auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
     permission_denied: Þú hefur ekki réttindi til að nota þessa aðgerð
     require_cookies:
       cookies_needed: Þú virðist ekki vera með stuðning við vefkökur í vafranum þínum.
@@ -2584,24 +2624,25 @@ is:
       oauth2_authorizations: OAuth 2 auðkenningar
       muted_users: Þaggaðir notendur
     auth_providers:
+      openid_login_button: Halda áfram
       openid:
         title: Skrá inn með OpenID
-        alt: Skrá inn með OpenID-slóð
+        alt: Táknmerki OpenID
       google:
         title: Skrá inn með Google
-        alt: Skrá inn með Google OpenID-aðgangi
+        alt: Táknmerki Google
       facebook:
         title: Skrá inn með Facebook
-        alt: Skrá inn með Facebook-aðgangi
+        alt: Táknmerki Facebook
       microsoft:
         title: Skrá inn með Microsoft
-        alt: Skrá inn með Microsoft-aðgangi
+        alt: Táknmerki Microsoft
       github:
         title: Skrá inn með GitHub
-        alt: Skrá inn með GitHub-aðgangi
+        alt: Táknmerki GitHub
       wikipedia:
         title: Skrá inn með Wikipedia
-        alt: Skrá inn með Wikipedia-aðgangi
+        alt: Táknmerki Wikipedia
   oauth:
     authorize:
       title: Auðkenndu aðgang að notandaaðganginum þínum
@@ -2692,6 +2733,7 @@ is:
       no_applications_html: Ert þú að nota forrit sem þú myndir vilja skrá til notkunar
         hjá okkur með %{oauth2} staðlinum? Þú verður að skrá vefforritið áður en það
         fer að senda OAuth-beiðnir á þessa þjónustu.
+      oauth_2: OAuth 2
       new: Skrá nýtt forrit
       name: Nafn
       permissions: Heimildir
@@ -2732,37 +2774,42 @@ is:
       application: Forrit
       permissions: Heimildir
       no_applications_html: Þú hefur ekki ennþá heimilað nein %{oauth2} forrit.
+      oauth_2: OAuth 2
     application:
       revoke: Afturkalla aðgang
       confirm_revoke: Afturkalla aðgang fyrir þetta forrit?
   users:
     new:
       title: Nýskrá
+      tab_title: Nýskrá
       no_auto_account_create: Því miður getum við eki búið til reikning fyrir þig
         sjálfkrafa.
       please_contact_support_html: Hafðu samband við %{support_link} til að fá aðgang
         búinn til - við munum reyna að afgreiða beiðnina eins fljótt og mögulegt er.
       support: aðstoðarteymið
       about:
-        header: Frjálst og breytanlegt
+        header: Frjálst og breytanlegt.
         paragraph_1: Ólíkt öðrum landakortum, er OpenStreetMap gert frá grunni af
           fólki eins og þér, öllum er heimilt að laga það, uppfæra, sækja og nota.
-        paragraph_2: Skráðu þig sem notanda til að geta tekið þátt. Við munum senda
-          þér tölvupóst til staðfestingar á aðgangnum.
+        paragraph_2: Skráðu þig sem notanda til að geta tekið þátt.
       display name description: Nafn þitt sem aðrir notendur sjá, þú getur breytt
         því síðar í stillingunum þínum.
       by_signing_up:
         privacy_policy: meðferð persónuupplýsinga
         privacy_policy_title: persónuverndarstefnu OSMF, þar með talinn hlutann um
           tölvupóstföng
+        contributor_terms: skilmálar vegna framlags
+      tou: notkunarskilmálar
       external auth: 'Auðkenning með þriðja aðila:'
       continue: Nýskrá
       terms accepted: Bestu þakkir fyrir að samþykkja nýju skilmálana vegna framlags
         þíns!
       email_help:
+        privacy_policy: stefna vegna meðferðar persónuupplýsinga
         html: Netfangið þitt er ekki birt opinberlega, skoðaðu síðuna um %{privacy_policy_link}
           til að sjá nánari upplýsingar.
-      use external auth: Þú getur líka notað utanaðkomandi þjónustur til innskráningar
+      or: eða
+      use external auth: eða nýskráð þig með utanaðkomandi þjónustu
     terms:
       title: Skilmálar
       heading: Skilmálar
@@ -2861,6 +2908,8 @@ is:
     index:
       title: Notendur
       heading: Notendur
+      older: Eldri notendur
+      newer: Nýrri notendur
       summary_html: '%{name} var útbúinn frá %{ip_address} þann %{date}'
       summary_no_ip_html: '%{name} útbúinn þann %{date}'
       confirm: Staðfesta valda notendur
@@ -2949,6 +2998,8 @@ is:
       confirm: Staðfestu að þú viljir eyða þessu banni.
       revoke: Eyða banninu
       flash: Banninu var eytt.
+    revoke_all:
+      revoke: Afturkalla!
     helper:
       time_future_html: Endar eftir %{time}
       until_login: Virkt þangað til notandinn skráir sig inn.
@@ -3005,12 +3056,24 @@ is:
       revoker_name: Eytt af
   user_mutes:
     index:
+      title: Þaggaðir notendur
+      my_muted_users: Þaggaðir notendur mínir
+      you_have_muted_n_users:
+        one: Þú hefur þaggað niður í {count} notanda
+        other: Þú hefur þaggað niður í {count} notendum
       table:
         thead:
           muted_user: Þaggaður notandi
           actions: Aðgerðir
         tbody:
+          unmute: Ekki þagga
           send_message: Senda skilaboð
+    create:
+      notice: Þú þaggaðir niður í %{name}.
+      error: Ekki tókst að þagga niður í %{name}. %{full_message}.
+    destroy:
+      notice: Þú hættir að þagga niður í %{name}.
+      error: Ekki tókst að þagga niður í notandanum. Reyndu aftur.
   notes:
     index:
       title: Minnispunktar sem hafa verið sendir inn eða gerðar athugasemdir við af
@@ -3060,6 +3123,7 @@ is:
       intro: Fannstu mistök eða eitthvað sem vantar? Láttu aðra kortagerðarmenn vita
         svo hægt sé að laga það. Færðu kortamerkið á réttan stað og skrifaðu minnispunkt
         til að útskýra vandamálið.
+      anonymous_warning_log_in: skrá inn
       advice: Minnispunkturinn þinn er opinber og gæti verið notaður til að uppfæra
         kortið; því ættirðu ekki að setja inn neinar persónulegar upplýsingar, eða
         upplýsingar úr höfundarvörðu efni.
@@ -3078,14 +3142,15 @@ is:
       custom_dimensions: Setja sérsniðnar stærðir
       format: 'Snið:'
       scale: 'Kvarði:'
-      image_dimensions: Myndin mun sýna venjulegt lag á %{width} x %{height}
+      image_dimensions: Myndin mun sýna %{layer} lagið í %{width} x %{height}
       download: Sækja
       short_url: Stutt URL-slóð
       include_marker: Hafa með kortamerkið
       center_marker: Miðja kort á kortamerki
       paste_html: Notaðu þennan HTML kóða til að bæta kortinu á vefsíðu
       view_larger_map: Skoða stærra kort
-      only_standard_layer: Eingöngu er hægt að flytja staðallagið út sem mynd
+      only_standard_layer: Eingöngu er hægt að flytja lögin Staðlað, Hjólakort og
+        Samgöngur út sem mynd
     embed:
       report_problem: Tilkynna vandamál
     key:
@@ -3106,6 +3171,7 @@ is:
           other: Þú ert minna en %{count} fet frá þessum punkti
       base:
         standard: Staðlað
+        cyclosm: CyclOSM
         cycle_map: Hjólakort
         transport_map: Umferðarkort
         hot: Hjálparstarf
index 44b3e11018c35e5c4b66fddd71165f9c2d5e5f59..16ffe65ba2fc46bd9d535877da15a5c8f81b12ef 100644 (file)
@@ -2675,6 +2675,8 @@ mk:
       write_notes: Менување на белешки
       write_redactions: Прикриј податоци за картата
       read_email: Читање на корисничка е-пошта
+      consume_messages: Читајте, менувајте статуси и бришете кориснички пораки
+      send_messages: Испраќајте приватни пораки до други корисници
       skip_authorization: Автоодобрување на прилог
     for_roles:
       moderator: Оваа дозвола е за дејства достапни само за модератори.
index b931e7f522b011c21f13c9759139b7512b4e4007..61c145fdbef2b6baa91a14c09610e75de116e06d 100644 (file)
@@ -444,8 +444,8 @@ sv:
         relation: relation
     start_rjs:
       feature_warning: Laddar %{num_features} kartkomponenter, vilket kan göra din
-        webbläsare långsam eller få den att sluta svara. Är säker på att du vill visa
-        denna data?
+        webbläsare långsam eller få den att sluta svara. Är du säker på att du vill
+        visa denna data?
       load_data: Ladda data
       loading: Läser in …
     tag_details:
@@ -614,6 +614,8 @@ sv:
       title: '%{user}s dagbok | %{title}'
       user_title: '%{user}s dagbok'
       discussion: Diskussion
+      subscribe: Prenumerera
+      unsubscribe: Avsluta prenumeration
       leave_a_comment: Lämna en kommentar
       login_to_leave_a_comment_html: '%{login_link} för att lämna en kommentar'
       login: Logga in
@@ -673,6 +675,8 @@ sv:
       comment: Kommentar
       newer_comments: Nyare kommentarer
       older_comments: Äldre kommentarer
+    new:
+      heading: Lägg en kommentar på följande diskussion om dagboksinlägg?
   doorkeeper:
     errors:
       messages:
@@ -907,6 +911,7 @@ sv:
           college: Högskolebyggnad
           commercial: Kommersiell byggnad
           construction: Byggnad under uppförande
+          cowshed: Kostall
           detached: Fristående hus
           dormitory: Studenthem
           duplex: Dubbelhus
@@ -936,6 +941,7 @@ sv:
           shed: Skjul
           stable: Stall
           static_caravan: Husvagn
+          sty: Stia
           temple: Tempelbyggnad
           terrace: Terrassbyggnad
           train_station: Järnvägsstation
@@ -1643,6 +1649,8 @@ sv:
     intro_text: OpenStreetMap är en karta över världen, skapad av människor som du
       och fri att använda under en öppen licens.
     intro_2_create_account: Skapa ett användarkonto
+    hosting_partners_2024_html: Driften stöds av %{fastly}, %{corpmembers} och andra
+      %{partners}.
     partners_fastly: Fastly
     partners_corpmembers: OSMF-företagsmedlemmar
     partners_partners: partners
@@ -1921,6 +1929,9 @@ sv:
       new password button: Återställ lösenord
       help_text: Ange e-postadressen du använde för att registrera dig så skickar
         vi en länk till den som du kan använda för att återställa ditt lösenord.
+    create:
+      send_paranoid_instructions: Om din e-postadress finns i vår databas kommer du
+        få ett e-postmeddelande för att bekräfta din e-postadress på några minuter.
     edit:
       title: Återställ lösenord
       heading: Återställ lösenord för %{user}
@@ -2140,6 +2151,9 @@ sv:
         contributors_at_cc_by: CC BY
         contributors_at_land_vorarlberg: Förbundsland Vorarlberg
         contributors_at_cc_by_at_with_amendments: CC BY AT med tillägg
+        contributors_au_credit_html: '%{australia}: Inkorporerades eller utvecklades
+          med hjälp av administrativa gränser &copy; %{geoscape_australia_link} licensierades
+          av Samväldet Australien under %{cc_licence_link}.'
         contributors_au_australia: Australien
         contributors_au_geoscape_australia: Geoscape Australien
         contributors_au_cc_licence: Creative Commons Erkännande 4.0 Internationell-licens
@@ -2168,6 +2182,7 @@ sv:
           och %{open_data_portal} (offentlig information om Kroatien)'
         contributors_hr_croatia: Kroatien
         contributors_hr_dgu: Kroatiens statliga geodatiska förvaltning
+        contributors_hr_open_data_portal: Nationella öppen data-portalen
         contributors_nl_credit_html: '%{netherlands}: Innehåller &copy; AND data,
           2007 (%{and_link}).'
         contributors_nl_netherlands: Nederländerna
@@ -2198,6 +2213,7 @@ sv:
         contributors_za_credit_html: '%{south_africa}: Innehåller data från %{ngi_link},
           statens upphovsrätt förbehålls.'
         contributors_za_south_africa: Sydafrika
+        contributors_za_ngi: 'Chief Directorate: National Geo-Spatial Information'
         contributors_gb_credit_html: '%{united_kingdom}: Innehåller Ordnance Survey
           data &copy; Crown copyright and database right 2010-2023.'
         contributors_gb_united_kingdom: Storbritannien
@@ -2644,25 +2660,26 @@ sv:
       oauth2_authorizations: OAuth 2-auktoriseringar
       muted_users: Tystade användare
     auth_providers:
+      openid_url: OpenID-URL
       openid_login_button: Fortsätt
       openid:
         title: Logga in med OpenID
-        alt: Logga in med en OpenID-URL
+        alt: OpenID-logotyp
       google:
         title: Logga in med Google
-        alt: Logga in med ett Google OpenID
+        alt: Google-logotyp
       facebook:
         title: Logga in med Facebook
-        alt: Logga in med ett Facebook-konto
+        alt: Facebook-logotyp
       microsoft:
         title: Logga in med Microsoft
-        alt: Logga in med ett Microsoft-konto
+        alt: Microsoft-logotyp
       github:
         title: Logga in med GitHub
-        alt: Logga in med ett GitHub-Konto
+        alt: GitHub-logotyp
       wikipedia:
         title: Logga in med Wikipedia
-        alt: Logga in med ett Wikipedia-konto
+        alt: Wikipedia-logotyp
   oauth:
     authorize:
       title: Auktorisera tillgång till ditt konto
@@ -2817,9 +2834,14 @@ sv:
           ner och använda.
         paragraph_2: Registrera dig för att börja bidra.
         welcome: Välkommen till OpenStreetMap
+      duplicate_social_email: Om du redan har ett OpenStreetMap-konto och vill använda
+        en identitetsleverantör från en tredjepart, kan du logga in med ditt lösenord
+        och modifiera inställningarna för ditt konto.
       display name description: Ditt offentligt visade användarnamn. Du kan ändra
         detta senare i alternativ.
       by_signing_up:
+        html: Genom att registrera dig accepterar du vår %{tou_link}, %{privacy_policy_link}
+          och %{contributor_terms_link}.
         privacy_policy: integritetspolicy
         privacy_policy_title: OSMFs integritetspolicy inklusive avsnitt om e-postadresser
         contributor_terms: bidragsvillkor
@@ -2829,6 +2851,8 @@ sv:
       terms accepted: Tack för att du accepterat de nya villkoren för bidrag till
         kartan!
       email_help:
+        privacy_policy: integritetspolicy
+        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}.
@@ -2900,6 +2924,8 @@ sv:
       remove as friend: Ta bort vän
       add as friend: Lägg till vän
       mapper since: 'Karterar sedan:'
+      last map edit: 'Senaste kartredigering:'
+      no activity yet: Ännu ingen aktivitet
       uid: 'Användar id:'
       ct status: 'Användarvillkor:'
       ct undecided: Ej bestämda
@@ -3022,6 +3048,8 @@ sv:
     update:
       only_creator_can_edit: Bara moderatorn som skapade denna blockering kan redigera
         den.
+      only_creator_or_revoker_can_edit: Endast moderatorer som skapade eller drog
+        tillbaka den här blockeringen kan redigera den.
       success: Blockering uppdaterad.
     index:
       title: Användarblockeringar
@@ -3202,14 +3230,15 @@ sv:
       custom_dimensions: Ange anpassade dimensioner
       format: 'Format:'
       scale: 'Skala:'
-      image_dimensions: Bilden kommer visa standardlager på %{width} x %{height}
+      image_dimensions: Bilden kommer visa lager %{layer} på %{width} x %{height}
       download: Ladda ned
       short_url: Kortlänk
       include_marker: Lägg till markör
       center_marker: Centrera kartan på markören
       paste_html: Klistra in HTML-koden för att publicera på en webbsida
       view_larger_map: Visa större karta
-      only_standard_layer: Endast standardlagret kan exporteras som en bild
+      only_standard_layer: Endast lagrena Standard, Cykelkarta och Transport kan exporteras
+        som en bild
     embed:
       report_problem: Rapportera ett problem
     key:
index e566d03395e5d3acf790d224b66ca8526c97dde3..d44f9418bf70ca806035b069cec9a96471c5435e 100644 (file)
@@ -2613,8 +2613,8 @@ tr:
     trace:
       pending: BEKLEMEDE
       count_points:
-        one: '%{count} puan'
-        other: '%{count} puan'
+        one: '%{count} nokta'
+        other: '%{count} nokta'
       more: daha fazla
       trace_details: İz Ayrıntılarını Görüntüle
       view_map: Haritayı Görüntüle
index 7ff6dfe88d200af5b1d583043fdb77ee9a7c85ce..811203715dbf2b23e3f6a979e5eab4c4550d67e5 100644 (file)
@@ -2526,6 +2526,8 @@ zh-CN:
       write_notes: 修改备注
       write_redactions: 隐删地图数据
       read_email: 查看用户邮箱地址
+      consume_messages: 读取、更新状态和删除用户留言
+      send_messages: 向其他用户发送私信
       skip_authorization: 自动核准应用
     for_roles:
       moderator: 此权限仅适用于仲裁员可用的操作。
index 2d240c3faa5b4917d10cb467ca7da5f3fbeb88df..d39f3e2d3806c257c6d9e0b72b01e81ee05cdc83 100644 (file)
@@ -2493,6 +2493,8 @@ zh-TW:
       write_notes: 修改註記
       write_redactions: 編寫地圖資料
       read_email: 讀取使用者電子郵件位址
+      consume_messages: 讀取、更新狀態、與刪除使用者訊息
+      send_messages: 傳送私人訊息給其他使用者
       skip_authorization: 自動核准申請
     for_roles:
       moderator: 此權限用於僅可由仲裁員執行的操作
index f19d3d3a952ddd2c8240e2ea8da228c434523ffc..edfa535f434c07d23fb88412ad9dd673c38645d5 100644 (file)
@@ -104,13 +104,17 @@ module RichText
     end
 
     def first_image_element(element)
-      return element if element.type == :img
+      return element if image?(element) && element.attr["src"].present?
 
       element.children.find do |child|
         nested_image = first_image_element(child)
         break nested_image if nested_image
       end
     end
+
+    def image?(element)
+      element.type == :img || (element.type == :html_element && element.value == "img")
+    end
   end
 
   class Text < Base
index bb6c25781fc5bd6aa6a31de5976bd31e74c4c0ef..24475fc80ac4786ca7b9c77ecce7687c4ca01b3b 100644 (file)
@@ -119,9 +119,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
         assert_select "input#latitude[name='diary_entry[latitude]']", :count => 1
         assert_select "input#longitude[name='diary_entry[longitude]']", :count => 1
         assert_select "input[name=commit][type=submit][value=Publish]", :count => 1
-        assert_select "input[name=commit][type=submit][value=Edit]", :count => 1
-        assert_select "input[name=commit][type=submit][value=Preview]", :count => 1
-        assert_select "input", :count => 6
+        assert_select "button[type=button]", :text => "Edit", :count => 1
+        assert_select "button[type=button]", :text => "Preview", :count => 1
+        assert_select "input", :count => 4
       end
     end
   end
@@ -272,9 +272,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
         assert_select "input#latitude[name='diary_entry[latitude]']", :count => 1
         assert_select "input#longitude[name='diary_entry[longitude]']", :count => 1
         assert_select "input[name=commit][type=submit][value=Update]", :count => 1
-        assert_select "input[name=commit][type=submit][value=Edit]", :count => 1
-        assert_select "input[name=commit][type=submit][value=Preview]", :count => 1
-        assert_select "input", :count => 7
+        assert_select "button[type=button]", :text => "Edit", :count => 1
+        assert_select "button[type=button]", :text => "Preview", :count => 1
+        assert_select "input", :count => 5
       end
     end
 
index 8dc9e49b1180582535d0939b67fdd3ede88219be..e601c36fc5d3b1c27a1443985e9110840fded551 100644 (file)
@@ -275,6 +275,41 @@ class RichTextTest < ActiveSupport::TestCase
     assert_equal "https://example.com/image1.jpg", r.image
   end
 
+  def test_markdown_image_with_empty_src
+    r = RichText.new("markdown", "![invalid]()")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_image_with_empty_src
+    r = RichText.new("markdown", "![invalid]() ![valid](https://example.com/valid.gif)")
+    assert_equal "https://example.com/valid.gif", r.image
+  end
+
+  def test_markdown_html_image
+    r = RichText.new("markdown", "<img src='https://example.com/img_element.png'>")
+    assert_equal "https://example.com/img_element.png", r.image
+  end
+
+  def test_markdown_html_image_with_empty_src
+    r = RichText.new("markdown", "<img src=''>")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_html_image_with_empty_src
+    r = RichText.new("markdown", "<img src=''> <img src='https://example.com/next_img_element.png'>")
+    assert_equal "https://example.com/next_img_element.png", r.image
+  end
+
+  def test_markdown_html_image_without_src
+    r = RichText.new("markdown", "<img>")
+    assert_nil r.image
+  end
+
+  def test_markdown_skip_html_image_without_src
+    r = RichText.new("markdown", "<img> <img src='https://example.com/next_img_element.png'>")
+    assert_equal "https://example.com/next_img_element.png", r.image
+  end
+
   private
 
   def assert_html(richtext, &block)
index 25123b392f3dee63f15fd129b846674c8e584321..2a547e752aff6fa901340eee7edc619380eff06e 100644 (file)
@@ -10,39 +10,43 @@ class UserMailerTest < ActionMailer::TestCase
   def test_gpx_description_tags
     trace = create(:trace) do |t|
       create(:tracetag, :trace => t, :tag => "one")
-      create(:tracetag, :trace => t, :tag => "two")
-      create(:tracetag, :trace => t, :tag => "three")
+      create(:tracetag, :trace => t, :tag => "two&three")
+      create(:tracetag, :trace => t, :tag => "four<five")
     end
     email = UserMailer.gpx_success(trace, 100)
 
-    assert_match("<em>one</em>, <em>two</em>, <em>three</em>", email.html_part.body.to_s)
+    assert_match("<em>one</em>, <em>two&amp;three</em>, <em>four&lt;five</em>", email.html_part.body.to_s)
+    assert_match("one, two&three, four<five", email.text_part.body.to_s)
   end
 
   def test_gpx_success_all_traces_link
     trace = create(:trace)
     email = UserMailer.gpx_success(trace, 100)
-    body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
-
     url = Rails.application.routes.url_helpers.url_for(:controller => "traces", :action => "mine", :host => Settings.server_url, :protocol => Settings.server_protocol)
-    assert_select body, "a[href='#{url}']"
+
+    assert_select Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body),
+                  "a[href='#{url}']"
+    assert_includes email.text_part.body, url
   end
 
   def test_gpx_success_trace_link
     trace = create(:trace)
     email = UserMailer.gpx_success(trace, 100)
-    body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
-
     url = Rails.application.routes.url_helpers.show_trace_url(trace.user, trace, :host => Settings.server_url, :protocol => Settings.server_protocol)
-    assert_select body, "a[href='#{url}']", :text => trace.name
+
+    assert_select Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body),
+                  "a[href='#{url}']", :text => trace.name
+    assert_includes email.text_part.body, url
   end
 
   def test_gpx_failure_no_trace_link
     trace = create(:trace)
     email = UserMailer.gpx_failure(trace, "some error")
-    body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
-
     url = Rails.application.routes.url_helpers.show_trace_url(trace.user, trace, :host => Settings.server_url, :protocol => Settings.server_protocol)
-    assert_select body, "a[href='#{url}']", :count => 0
+
+    assert_select Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body),
+                  "a[href='#{url}']", :count => 0
+    assert_not_includes email.text_part.body, url
   end
 
   def test_html_encoding
index c027f1479470789c624d8af2b4fe2dde480c4b13..290ff527c1c96064f6f4ca5e66c119d559efebfd 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -624,9 +624,9 @@ punycode@^2.1.0:
   integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
 
 qs@^6.9.4:
-  version "6.12.3"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754"
-  integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==
+  version "6.13.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
+  integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
   dependencies:
     side-channel "^1.0.6"