Merge remote-tracking branch 'upstream/pull/2018'
authorTom Hughes <tom@compton.nu>
Thu, 11 Oct 2018 17:47:47 +0000 (18:47 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 11 Oct 2018 17:47:47 +0000 (18:47 +0100)
17 files changed:
app/assets/stylesheets/common.scss
app/controllers/browse_controller.rb
app/controllers/notes_controller.rb
config/locales/ar.yml
config/locales/de.yml
config/locales/es.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/ja.yml
config/locales/kab.yml
config/locales/nb.yml
config/locales/ru.yml
config/locales/sl.yml
config/locales/sv.yml
config/locales/ta.yml
config/locales/zh-TW.yml
test/controllers/notes_controller_test.rb

index 4b8a80c..56c4515 100644 (file)
@@ -1237,7 +1237,8 @@ tr.turn:hover {
     margin: $lineheight/2 0;
 
     p {
-      margin-left: 10px;
+      margin: 10px 6px 0 6px;
+      line-height: 1.5;
     }
   }
 
@@ -1402,9 +1403,9 @@ tr.turn:hover {
 
 /* Overrides for pages that use new layout conventions */
 
-.user-new,
-.user-create,
-.user-terms {
+.users-new,
+.users-create,
+.users-terms {
   .content-body .content-inner {
     padding: 0;
 
@@ -1415,10 +1416,10 @@ tr.turn:hover {
   }
 }
 
-.user-new,
-.user-create,
-.user-terms,
-.user-confirm {
+.users-new,
+.users-create,
+.users-terms,
+.users-confirm {
   .content-heading .content-inner {
     height: 200px;
   }
@@ -1594,7 +1595,7 @@ tr.turn:hover {
   margin-left: 70px;
 }
 
-.user-show {
+.users-show {
   // Silly exception; remove when user page is redesigned.
   .content-inner {
     max-width: none;
@@ -1745,7 +1746,7 @@ tr.turn:hover {
 
 /* Rules for the account confirmation page */
 
-.user-terms {
+.users-terms {
   .legale {
     border: 1px solid #ccc;
     padding: $lineheight;
index 89b9c6c..6eb9675 100644 (file)
@@ -66,7 +66,7 @@ class BrowseController < ApplicationController
     @node_pages, @nodes = paginate(:old_nodes, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "node_page")
     @way_pages, @ways = paginate(:old_ways, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "way_page")
     @relation_pages, @relations = paginate(:old_relations, :conditions => { :changeset_id => @changeset.id }, :per_page => 20, :parameter => "relation_page")
-    if @changeset.user.data_public?
+    if @changeset.user.active? && @changeset.user.data_public?
       @next_by_user = @changeset.user.changesets.where("id > ?", @changeset.id).reorder(:id => :asc).first
       @prev_by_user = @changeset.user.changesets.where("id < ?", @changeset.id).reorder(:id => :desc).first
     end
index fc7a9e3..95566a1 100644 (file)
@@ -255,12 +255,47 @@ class NotesController < ApplicationController
   ##
   # Return a list of notes matching a given string
   def search
-    # Check the arguments are sane
-    raise OSM::APIBadUserInput, "No query string was given" unless params[:q]
-
-    # Get any conditions that need to be applied
+    # Get the initial set of notes
     @notes = closed_condition(Note.all)
-    @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?)", params[:q])
+
+    # Add any user filter
+    if params[:display_name] || params[:user]
+      if params[:display_name]
+        @user = User.find_by(:display_name => params[:display_name])
+
+        raise OSM::APIBadUserInput, "User #{params[:display_name]} not known" unless @user
+      else
+        @user = User.find_by(:id => params[:user])
+
+        raise OSM::APIBadUserInput, "User #{params[:user]} not known" unless @user
+      end
+
+      @notes = @notes.joins(:comments).where(:note_comments => { :author_id => @user })
+    end
+
+    # Add any text filter
+    @notes = @notes.joins(:comments).where("to_tsvector('english', note_comments.body) @@ plainto_tsquery('english', ?)", params[:q]) if params[:q]
+
+    # Add any date filter
+    if params[:from]
+      begin
+        from = Time.parse(params[:from])
+      rescue ArgumentError
+        raise OSM::APIBadUserInput, "Date #{params[:from]} is in a wrong format"
+      end
+
+      begin
+        to = if params[:to]
+               Time.parse(params[:to])
+             else
+               Time.now
+             end
+      rescue ArgumentError
+        raise OSM::APIBadUserInput, "Date #{params[:to]} is in a wrong format"
+      end
+
+      @notes = @notes.where(:created_at => from..to)
+    end
 
     # Find the notes we want to return
     @notes = @notes.order("updated_at DESC").limit(result_limit).preload(:comments)
index 3dc901b..cf946f7 100644 (file)
@@ -42,40 +42,40 @@ ar:
     models:
       acl: لائحة التحكم بالوصول
       changeset: حزمة التغييرات
-      changeset_tag: سمة حزمة التغييرات
-      country: البلد/الدولة
+      changeset_tag: وسم مجموعة التغييرات
+      country: البلد
       diary_comment: تعليق يومية
       diary_entry: مدخلة يومية
       friend: صديق
       language: اللغة
       message: الرسالة
       node: عقدة
-      node_tag: سمة عقدة
+      node_tag: وسم عقدة
       notifier: المخطر
       old_node: عقدة قديمة
-      old_node_tag: سمة عقدة قديمة
+      old_node_tag: وسم عقدة قديمة
       old_relation: علاقة قديمة
       old_relation_member: عضو علاقة قديم
-      old_relation_tag: سمة علاقة قديمة
-      old_way: طريق قديم
+      old_relation_tag: وسم علاقة قديمة
+      old_way: طريقةط قديمة
       old_way_node: عقدة طريق قديمة
-      old_way_tag: سمة طريق قديمة
+      old_way_tag: وسم طريق قديم
       relation: علاقة
       relation_member: عضو علاقة
-      relation_tag: سمة علاقة
+      relation_tag: وسم علاقة
       session: جلسة
       trace: أثر
       tracepoint: نقطة أثر
       tracetag: سمة الأثر
       user: المستخدم
       user_preference: تفضيل المستخدم
-      user_token: نموذج المستخدم
-      way: طريق
+      user_token: رمز المستخدم
+      way: طريقة
       way_node: عقدة طريق
       way_tag: سمة طريق
     attributes:
       diary_comment:
-        body: نص الرسالة
+        body: الجسم
       diary_entry:
         user: المستخدم
         title: الموضوع
@@ -97,7 +97,7 @@ ar:
       message:
         sender: المرسل
         title: الموضوع
-        body: نص الرسالة
+        body: الجسم
         recipient: المستلم
       user:
         email: البريد الإلكتروني
@@ -112,11 +112,11 @@ ar:
       name: Potlatch 1
       description: Potlatch 1 (محرّر ضمن المتصفح)
     id:
-      name: Ù\85عرÙ\91Ù\81
-      description: iD (محرِّر عبر المتصفِّح)
+      name: معرف
+      description: معرف (محرر عبر المتصفِّح)
     potlatch2:
       name: Potlatch 2
-      description: Potlatch 2 (محرّر ضمن المتصفح)
+      description: Potlatch 2 (محرر ضمن المتصفح)
     remote:
       name: تحكم عن بعد
       description: تحكم عن بعد (JOSM أو Merkaartor)
@@ -130,12 +130,12 @@ ar:
     edited_by_html: تم التعديل قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
     closed_by_html: تم الإغلاق قبل <abbr title='%{title}'>%{time}</abbr> على يد %{user}
     version: الإصدار
-    in_changeset: التغييرات
+    in_changeset: مجموعة التغييرات
     anonymous: مجهول
     no_comment: (لا تعليق)
     part_of: جزء من
-    download_xml: Ø­Ù\85Ù\91ل XML
-    view_history: السجل
+    download_xml: ØªÙ\86زÙ\8aل XML
+    view_history: Ø¹Ø±Ø¶ Ø§Ù\84سجÙ\84
     view_details: شاهد التفاصيل
     location: 'الموقع:'
     changeset:
@@ -175,14 +175,14 @@ ar:
       history_title: 'تاريخ الصلة: %{name}'
       members: الأعضاء
     relation_member:
-      entry_role: '%{type} %{name} كــ %{role}'
+      entry_role: '%{type} %{name} كــ%{role}'
       type:
         node: عقدة
         way: طريق
         relation: علاقة
     containing_relation:
       entry: العلاقة %{relation_name}
-      entry_role: العلاقة %{relation_name} (كــ %{relation_role})
+      entry_role: العلاقة %{relation_name} (كــ%{relation_role})
     not_found:
       sorry: 'عفوًا، تعذر العثور على %{type} #%{id}.'
       type:
@@ -215,11 +215,11 @@ ar:
     tag_details:
       tags: الوسوم
       wiki_link:
-        key: صفحة وصف الويكي لعلامة %{key}
-        tag: صفحة وصف الويكي لعلامة %{key}=%{value}
-      wikidata_link: ØµÙ\81حة %{page} Ø¹Ù\84Ù\89 Ù\88Ù\8aÙ\83Ù\8a Ø¯Ø§ØªØ§
-      wikipedia_link: الـ%{page} مقالة على ويكيبيديا
-      telephone_link: اتصل بـ %{phone_number}
+        key: صفحة وصف الويكي للوسم %{key}
+        tag: صفحة وصف الويكي للوسم %{key}=%{value}
+      wikidata_link: Ø§Ù\84عÙ\86صر %{page} Ø¹Ù\84Ù\89 Ù\88Ù\8aÙ\83Ù\8a Ø¨Ù\8aاÙ\86ات
+      wikipedia_link: مقالة %{page} على ويكيبيديا
+      telephone_link: اتصل بـ%{phone_number}
     note:
       title: 'ملاحظة: %{id}'
       new_note: ملاحظة جديدة
@@ -233,15 +233,16 @@ ar:
       commented_by: تعليق من %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
       commented_by_anonymous: تعليق من مجهول قبل <abbr title='%{exact_time}'>%{when}
         </abbr>
-      closed_by: حلّه %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
-      closed_by_anonymous: حلّه مجهول قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      closed_by: تم الحل بواسطة %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
+      closed_by_anonymous: تم الحل بواسطة مجهول قبل <abbr title='%{exact_time}'>%{when}
+        </abbr>
       reopened_by: أعاد تنشيطه %{user} قبل <abbr title='%{exact_time}'>%{when} </abbr>
       reopened_by_anonymous: أعاد تنشيطه مجهول قبل <abbr title='%{exact_time}'>%{when}
         </abbr>
       hidden_by: أخفاه %{user} قبل <abbr title='%{exact_time}'>%{when} =</abbr>
-      report: أبلغ هذه الملاحظة
+      report: أبلغ عن هذه الملاحظة
     query:
-      title: إشارات الاستفهام
+      title: ميزات الاستفهام
       introduction: اضغط على الخريطة لمعرفة النقاط القريبة
       nearby: نقاط قريبة
       enclosing: نقاط مرافقة
@@ -255,8 +256,8 @@ ar:
       no_edits: (لا تعديلات)
       view_changeset_details: اعرض تفاصيل حزمة التغييرات
     changesets:
-      id: Ø±Ù\82Ù\85
-      saved_at: حُفظ في
+      id: Ø§Ù\84Ù\85عرÙ\81
+      saved_at: حُفِظ في
       user: المستخدم
       comment: التعليق
       area: منطقة
@@ -270,13 +271,13 @@ ar:
       empty_user: لم يُعثَر على أي حزم تغييرات لهذا المستخدم.
       no_more: لم يُعثَر على حزم تغييرات أخرى.
       no_more_area: لم يُعثَر على حزم تغييرات أخرى في هذه المنطقة.
-      no_more_user: ' يُعثَر على حزم تغييرات أخرى لهذا المستخدم.'
+      no_more_user: لم يُعثَر على حزم تغييرات أخرى لهذا المستخدم.
       load_more: حمِّل المزيد؟
     timeout:
-      sorry: Ø¹Ø°Ø±Ø§Ù\8bØ\8c Ù\84Ù\82د Ø¥Ø³ØªÙ\85رت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب.
+      sorry: Ø¹Ø°Ø±Ø§Ù\8bØ\8c Ù\84Ù\82د Ø§Ø³ØªØºØ±Ù\82ت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب.
     rss:
       title_all: مناقشة مجموعة تغيير خريطة الشارع المفتوحة
-      title_particular: 'مناقشة #%{changeset_id} مجموعة تغيير خريطة الشارع المفتوحة'
+      title_particular: مناقشة مجموعة تغيير خريطة الشارع المفتوحة %{changeset_id}
       comment: 'تعليق جديد على مجموعة التغيير #%{changeset_id} بواسطة %{author}'
       commented_at_html: تم التحديث قبل %{when}
       commented_at_by_html: تم التحديث قبل %{when} بواسطة %{user}
@@ -288,19 +289,19 @@ ar:
     index:
       title: يوميات المستخدمين
       title_friends: يوميات الأصدقاء
-      title_nearby: يوميات/مفكرات المستخدمين في المقبرة
+      title_nearby: يوميات المستخدمين القريبين
       user_title: يومية %{user}
       in_language_title: مدخلات اليومية باللغة %{language}
       new: مدخلة يومية جديدة
       new_title: تأليف إدخال جديد في مذكرات المستخدم الخاصة بي
-      no_entries: لا يوجد مدخلات يومية
-      recent_entries: Ø¥Ø¯Ø®Ø§Ù\84ات Ù\8aÙ\88Ù\85Ù\8aات Ø§Ù\84حدÙ\8aثة
+      no_entries: لا توجد مدخلات يومية
+      recent_entries: إدخالات يوميات حديثة
       older_entries: المدخلات الأقدم
       newer_entries: المدخلات الأحدث
     edit:
-      title: Ø¹Ø¯Ù\91Ù\84 Ù\85دخÙ\84Ø© Ù\8aÙ\88Ù\85Ù\8aØ©
+      title: عدل مدخلة يومية
       subject: 'الموضوع:'
-      body: 'نص الرسالة:'
+      body: 'النص:'
       language: 'اللغة:'
       location: 'الموقع:'
       latitude: 'خط العرض:'
@@ -316,26 +317,26 @@ ar:
       login: تسجيل الدخول
       save_button: احفظ
     no_such_entry:
-      title: Ù\85دخÙ\84Ø© Ù\8aÙ\88Ù\85Ù\8aØ© ØºÙ\8aر Ù\85Ù\88جÙ\88دة
-      heading: 'لا يوجد مدخلة بالمعرّف: %{id}'
-      body: عذرًا، لا يوجد مدخلة يومية أو تعليق بالمعرّف %{id}. يرجى تدقيق التهجئة،
-        أو ربما يكون الرابط الذي تم النقر عليه خاطئ.
+      title: Ù\84ا ØªÙ\88جد Ù\85Ø«Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\8aÙ\88Ù\85Ù\8aة
+      heading: 'لا توجد مدخلة بالمعرف: %{id}'
+      body: عذرًا، لا توجد مدخلة يومية أو تعليق بالمعرف %{id}؛ يُرجَى تدقيق التهجئة،
+        أو ربما يكون الرابط الذي نقرت عليه خاطئا.
     diary_entry:
-      posted_by: أُرسل بواسطة %{link_user} في %{created} باللغة %{language_link}
-      comment_link: Ø¹Ù\84Ù\91Ù\82 Ø¹Ù\84Ù\89 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85دخÙ\84Ø©
-      reply_link: Ø±Ø¯ Ø¨رسالة
+      posted_by: نُشِر بواسطة %{link_user} في %{created} باللغة %{language_link}
+      comment_link: علق على هذه المدخلة
+      reply_link: Ø±Ø¯ Ø¹Ù\84Ù\89 Ù\87Ø°Ù\87 Ø§Ù\84رسالة
       comment_count:
         zero: لا تعليق
         one: '%{count} تعليق'
-        other: '%{count} تعليق'
-      edit_link: Ø¹Ø¯Ù\91Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85دخÙ\84Ø©
+        other: '%{count} تعليقات'
+      edit_link: عدل هذه المدخلة
       hide_link: اخفِ هذه المدخلة
-      confirm: Ø£Ù\83Ù\91د
-      report: أببلغ عن هذه المذكرة
+      confirm: ØªØ£Ù\83Ù\8aد
+      report: أبلغ عن هذه المدخلة
     diary_comment:
-      comment_from: تعليق من %{link_user}  في %{comment_created_at}
+      comment_from: تعليق من %{link_user} في %{comment_created_at}
       hide_link: اخفِ هذا التعليق
-      confirm: Ø£Ù\83Ù\91د
+      confirm: ØªØ£Ù\83Ù\8aد
       report: أبلغ عن هذا التعليق
     location:
       location: 'الموقع:'
@@ -343,18 +344,16 @@ ar:
       edit: تعديل
     feed:
       user:
-        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم %{user}
-        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة بواسطة المستخدم
-          %{user}
+        title: مدخلات يومية خريطة الشارع المفتوحة للمستخدم ل%{user}
+        description: المدخلات الحديثة في يومية خريطة الشارع المفتوحة من %{user}
       language:
-        title: مدخلات يومية خريطة الشارع المفتوحة باللغة %{language_name}
-        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة باللغة
-          %{language_name}
+        title: مدخلات يومية خريطة الشارع المفتوحة ب%{language_name}
+        description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة ب%{language_name}
       all:
         title: مدخلات اليومية في خريطة الشارع المفتوحة
         description: المدخلات الحديثة في يومية مستخدمي خريطة الشارع المفتوحة
     comments:
-      has_commented_on: '%{display_name} Ø¹Ù\84Ù\91Ù\82 Ø¹Ù\84Ù\89 Ù\85دخÙ\84ات Ø§Ù\84Ù\8aÙ\88Ù\85Ù\8aØ© Ø§Ù\84تاÙ\84Ù\8aØ©'
+      has_commented_on: '%{display_name} علق على مدخلات اليومية التالية'
       post: إرسال
       when: متى
       comment: التعليق
@@ -377,7 +376,7 @@ ar:
         aerialway:
           cable_car: عربة قطار هوائي
           chair_lift: كرسي تلفريك
-          drag_lift: اسحبها لليسار
+          drag_lift: اسحب لليسار
           gondola: تلفريك
           platter: مصعد تزلج
           pylon: نقطة تعليق
@@ -415,7 +414,7 @@ ar:
           car_sharing: مشاركة سيارات
           car_wash: غسيل سيارات
           casino: نادي قمار
-          charging_station: Ù\85حطة ØªØ¹Ø¨Ø¦Ø©
+          charging_station: Ù\85حطة Ø´Ø­Ù\86
           childcare: رعاية الأطفال
           cinema: سينما
           clinic: عيادة
@@ -447,7 +446,7 @@ ar:
           monastery: دير
           motorcycle_parking: مرآب دراجات نارية
           nightclub: نادي ليلي
-          nursing_home: دار رعاية مسنين/معاقين
+          nursing_home: دار رعاية
           office: مكتب
           parking: موقف سيارات
           parking_entrance: مدخل مرآب
@@ -467,9 +466,9 @@ ar:
           sauna: حمّام بخاري حار
           school: مدرسة
           shelter: ملجأ
-          shop: متجر/دكان/حانوت
+          shop: متجر
           shower: غسيل بالدش
-          social_centre: Ù\85رÙ\83ز Ø¥جتماعي
+          social_centre: Ù\85رÙ\83ز Ø§جتماعي
           social_club: نادي اجتماعي
           social_facility: مرفق اجتماعي
           studio: ستوديو
@@ -482,11 +481,11 @@ ar:
           university: جامعة
           vending_machine: آلة بيع
           veterinary: جراحة بيطرية
-          village_hall: Ù\85بÙ\86Ù\89/دار Ø§Ù\84قرية
+          village_hall: Ù\82اعة قرية
           waste_basket: سلة نفايات
           waste_disposal: التخلص من النفايات
           water_point: موقع مياه
-          youth_centre: مركز نشاطات للشباب
+          youth_centre: مركز شباب
         boundary:
           administrative: حدود إدارية
           census: حدود تعدادية
@@ -504,7 +503,7 @@ ar:
         craft:
           brewery: مصنع الجعة
           carpenter: نجار
-          electrician: اختصاصي كهرباء
+          electrician: كهربائي
           gardener: بستاني
           painter: رسام
           photographer: مصور
@@ -532,7 +531,7 @@ ar:
           emergency_access_point: نقطة دخول طوارئ
           footway: ممر للمشاة
           ford: مخاضة
-          give_way: Ø§Ø´Ø§Ø±Ø© ØªÙ\85Ù\87Ù\84
+          give_way: Ø¥Ø´Ø§Ø±Ø© Ø¥Ù\81ساح Ø§Ù\84طرÙ\8aÙ\82
           living_street: شارع سكني
           milestone: معلم
           motorway: طريق سريع
@@ -544,10 +543,10 @@ ar:
           platform: منصة
           primary: طريق أولي
           primary_link: طريق أولي
-          proposed: طريق تحت الإنشاء
+          proposed: طريق مقترح
           raceway: حلبة سباق
           residential: طريق سكني
-          rest_area: Ù\85Ù\86Ø·Ù\82Ø© Ø¥ستراحة
+          rest_area: Ù\85Ù\86Ø·Ù\82Ø© Ø§ستراحة
           road: طريق
           secondary: طريق ثانوي
           secondary_link: طريق ثانوي
@@ -565,12 +564,12 @@ ar:
           trunk: طريق رئيسي
           trunk_link: طريق رئيسي
           turning_loop: جولة
-          unclassified: Ø·Ø±Ù\8aÙ\82 ØºÙ\8aر Ù\85صÙ\86Ù\91Ù\81
+          unclassified: طريق غير مصنف
           "yes": طريق
         historic:
           archaeological_site: موقع أثري
           battlefield: ساحة معركة
-          boundary_stone: Ø­Ø¬Ø±/صخرة ØªØ¹Ù\84Ù\8aÙ\85 حدود
+          boundary_stone: ØµØ®Ø±Ø© حدود
           building: مبنى تاريخي
           bunker: برج دفاعي
           castle: قلعة
@@ -584,14 +583,14 @@ ar:
           manor: عزبة
           memorial: نصب تذكاري
           mine: منجم
-          mine_shaft: منجم
+          mine_shaft: Ù\81تحة Ù\85Ù\86جÙ\85
           monument: أثر
           roman_road: طريق روماني
           ruins: أطلال
           stone: حجر
           tomb: قبر
           tower: برج
-          wayside_cross: ØµÙ\84Ù\8aب ØªØ°Ù\83ارÙ\8a
+          wayside_cross: ØµÙ\84Ù\8aب Ø¬Ø§Ù\86ب Ø·Ø±Ù\8aÙ\82
           wayside_shrine: مزار جانب طريق
           wreck: حطام
           "yes": موقع تاريخي
@@ -624,10 +623,10 @@ ar:
           reservoir: خزان
           reservoir_watershed: خزان مستجمعات المياه
           residential: منطقة سكنية
-          retail: بيع بالمفرق
+          retail: بيع بالتجزئة
           road: منطقة الطريق
           village_green: أرض خضراء
-          vineyard: كرم عنب
+          vineyard: حقل عنب
           "yes": استخدام الأرض
         leisure:
           beach_resort: شاطئ منتجع
@@ -653,13 +652,13 @@ ar:
           sauna: حمّام بخاري حار
           slipway: مزلقة
           sports_centre: مركز رياضي
-          stadium: مدرج ألعاب رياضية
-          swimming_pool: بركة سباحة
+          stadium: ستاد
+          swimming_pool: مسبح
           track: مضمار سباق
           water_park: منتزه ألعاب مائية
           "yes": وقت الفراغ
         man_made:
-          adit: مدخل الى منجم
+          adit: مدخل منجم
           beacon: منارة
           beehive: خلية نحل
           breakwater: مكسر أمواج
@@ -669,15 +668,15 @@ ar:
           crane: رافعة
           dolphin: مرسى
           dyke: حاجز
-          embankment: Ø³Ø§Ù\8aÙ\84Ù\87
+          embankment: Ø³Ø¯
           flagpole: سارية علم
           gasometer: مقياس غاز
           groyne: مصد أمواج
           kiln: تنور
           lighthouse: منارة
-          mast: Ø­Ø§Ù\81ظة Ø§Ù\86تÙ\8aÙ\86ا
-          mine: Ù\84غم
-          mineshaft: Ù\85Ù\86جÙ\85 Ø£Ù\84غام
+          mast: Ø³Ø§Ø±Ù\8aØ©
+          mine: Ù\85Ù\86جم
+          mineshaft: Ù\81تحة Ù\85Ù\86جم
           monitoring_station: محطة مراقبة
           petroleum_well: بئر بترول
           pier: رصيف بحري
@@ -704,7 +703,7 @@ ar:
         natural:
           bay: خليج
           beach: شاطئ
-          cape: Ø±Ø£Ø³ (أرض Ø¯Ø§Ø®Ù\84Ø© Ù\81Ù\8a Ø§Ù\84بحر(
+          cape: Ø®Ù\84Ù\8aج
           cave_entrance: مدخل كهف
           cliff: جرف
           crater: فوهة بركان
@@ -713,7 +712,7 @@ ar:
           fjord: مضيق بحري
           forest: غابة
           geyser: نافورة ماء حار
-          glacier: نهر/بحر جليدي
+          glacier: نهر جليدي
           grassland: أرض عشبية
           heath: أرض بور
           hill: تلة
@@ -724,7 +723,7 @@ ar:
           mud: وحل
           peak: ذروة
           point: نقطة
-          reef: Ø³Ù\84سÙ\84Ø© ØµØ®Ù\88ر Ù\82رب Ø³Ø·Ø­ Ø§Ù\84Ù\85اء
+          reef: Ø´Ø¹Ø§Ø¨
           ridge: أرض مرتفعة
           rock: صخرة
           saddle: سرج
@@ -754,7 +753,7 @@ ar:
           it: مكتب تقنية معلومات
           lawyer: محامي
           ngo: مكتب منظمة غير حكومية
-          telecommunication: Ù\85Ù\83تب Ø´Ø±Ù\83Ø© Ø¥تصالات
+          telecommunication: Ù\85Ù\83تب Ø§تصالات
           travel_agent: وكيل سفريات
           "yes": مكتب
         place:
@@ -777,7 +776,7 @@ ar:
           quarter: حارة
           region: المنطقة
           sea: بحر
-          square: مربع
+          square: ميدان
           state: ولاية
           subdivision: التقسيم الفرعي
           suburb: ضاحية
@@ -794,8 +793,8 @@ ar:
           junction: تقاطع سكك حديدية
           level_crossing: تقاطع سكك حديدية
           light_rail: قطار خفيف
-          miniature: مصغرة السكك الحديدية
-          monorail: قطار ذات سكة حديد واحدة
+          miniature: سكة حديدية مصغرة
+          monorail: قطار ذو سكة حديد واحدة
           narrow_gauge: سكة حديد ضيقة
           platform: رصيف محطة قطار
           preserved: سكة حديدية تراثية
@@ -816,7 +815,7 @@ ar:
           beauty: صالون تجميل
           beverages: متجر مشروبات
           bicycle: متجر دراجات
-          bookmaker: Ù\85Ø­Ù\84 Ù\82Ù\85ار
+          bookmaker: Ù\86اشر
           books: متجر كتب
           boutique: دكان
           butcher: جزار
@@ -852,7 +851,7 @@ ar:
           gift: متجر هدايا
           greengrocer: محل خضروات
           grocery: بقالة
-          hairdresser: مزين/مصفف شعر
+          hairdresser: حلاق
           hardware: متجر عتاد
           hifi: متجر هاي فاي
           houseware: متجر أدوات منزلية
@@ -892,7 +891,7 @@ ar:
           vacant: متجر شاغر
           variety_store: متجر شامل
           video: متجر فيديو
-          wine: Ù\85Ø­Ù\84 Ù\84بÙ\8aع Ø§Ù\84نبيذ
+          wine: Ù\85تجر نبيذ
           "yes": متجر
         tourism:
           alpine_hut: كوخ جبلي
@@ -911,7 +910,7 @@ ar:
           information: معلومات
           motel: نُزل
           museum: متحف
-          picnic_site: Ù\85Ù\88Ù\82ع Ø¨Ù\8aÙ\83 Ù\86Ù\8aÙ\83
+          picnic_site: Ù\85Ù\88Ù\82ع ØªÙ\86زÙ\87
           theme_park: حديقة ملاهي
           viewpoint: موقع كاشف
           zoo: حديقة حيوانات
@@ -920,7 +919,7 @@ ar:
           culvert: مجرى مائي
           "yes": نفق
         waterway:
-          artificial: Ù\85جرÙ\89 Ù\85اء Ø¥صطناعي
+          artificial: Ù\85جرÙ\89 Ù\85اء Ø§صطناعي
           boatyard: حوض سفن
           canal: قناة
           dam: سدّ
@@ -936,7 +935,7 @@ ar:
           stream: جدول
           wadi: وادي
           waterfall: شلال
-          weir: هدار (سدّ منخفض)
+          weir: سياج
           "yes": معبر مائي
       admin_levels:
         level2: حدود قطرية
@@ -948,8 +947,8 @@ ar:
         level10: حدود الضاحية
     description:
       title:
-        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
-          Nominatim</a>
+        osm_nominatim: موقع من <a href="http://nominatim.openstreetmap.org/">Nominatim
+          خريطة الشارع المفتوحة</a>
         geonames: موقع من <a href="http://www.geonames.org/">GeoNames</a>
       types:
         cities: مدن
@@ -969,16 +968,17 @@ ar:
       search: البحث
       search_guidance: 'بحث عن مشاكل:'
       user_not_found: المستخدم غير موجود
-      issues_not_found: لم يتم العثور على مشاكل
+      issues_not_found: لم يتم العثور على مشاكل كهذه
       status: الحالة
       reports: بلاغات
       last_updated: آخر تحديث
-      last_updated_time_html: <abbr title='%{title}'>%{time} ago</abbr>
-      last_updated_time_user_html: <abbr title='%{title}'>%{time} ago</abbr> by %{user}
+      last_updated_time_html: منذ <abbr title='%{title}'>%{time}</abbr>
+      last_updated_time_user_html: منذ <abbr title='%{title}'>%{time} </abbr> بواسطة
+        %{user}
       link_to_reports: عرض البلاغات
       reports_count:
-        one: 1 Report
-        other: '%{count} Reports'
+        one: 1 بلاغ
+        other: '%{count} بلاغات'
       reported_item: شيء تم الابلاغ عنه
       states:
         ignored: تم تجاهله
@@ -987,19 +987,19 @@ ar:
     update:
       new_report: لقد تم تسجيل بلاغك بنجاح
       successful_update: لقد تم تحديث بلاغك بنجاح
-      provide_details: يرجى تقديم التفاصيل المطلوبة
+      provide_details: يُرجَى تقديم التفاصيل المطلوبة
     show:
       title: '%{status} المشكلة #%{issue_id}'
       reports:
-        zero: No reports
-        one: 1 report
-        other: '%{count} reports'
-      report_created_at: Ø§ول بلاغ تم في %{datetime}
+        zero: لا توجد بلاغات
+        one: 1 بلاغ
+        other: '%{count} بلاغات'
+      report_created_at: Ø£ول بلاغ تم في %{datetime}
       last_resolved_at: آخر حل تم في %{datetime}
       last_updated_at: آخر تحديث تم في %{datetime} بواسطة %{displayname}
       resolve: حل
       ignore: تجاهل
-      reopen: Ø§عادة فتح
+      reopen: Ø¥عادة فتح
       reports_of_this_issue: بلاغات هذه المشكلة
       read_reports: اقرأ البلاغات
       new_reports: بلاغات جديدة
@@ -1007,39 +1007,39 @@ ar:
       no_other_issues: لا مشاكل أخرى ضد هذا المستخدم.
       comments_on_this_issue: التعليقات على هذه المشكلة
     resolve:
-      resolved: تم تعيين حالة المشكلة إلى 'تم حله'
+      resolved: تم تعيين حالة المشكلة إلى 'محلولة'
     ignore:
-      ignored: تم تعيين حالة المشكلة إلى 'تم تجاهله'
+      ignored: تم تعيين حالة المشكلة إلى 'تم تجاهلها'
     reopen:
-      reopened: ØªÙ\85 ØªØ¹Ù\8aÙ\8aÙ\86 Ø­Ø§Ù\84Ø© Ø§Ù\84Ù\85Ø´Ù\83Ù\84Ø© Ø¥Ù\84Ù\89 'Ù\81تح'
+      reopened: ØªÙ\85 ØªØ¹Ù\8aÙ\8aÙ\86 Ø­Ø§Ù\84Ø© Ø§Ù\84Ù\85Ø´Ù\83Ù\84Ø© Ø¥Ù\84Ù\89 'Ù\85Ù\81تÙ\88حة'
     comments:
       created_at: في %{datetime}
-      reassign_param: إعادة تعيين المشكلة ؟
+      reassign_param: إعادة تعيين المشكلة؟
     reports:
       updated_at: في %{datetime}
-      reported_by_html: تم الابلاغ عنه ك %{category} بواسطة %{user}
+      reported_by_html: تم الابلاغ عنه ك%{category} بواسطة %{user}
     helper:
       reportable_title:
-        diary_comment: '%{entry_title}, تعليق #%{comment_id}'
+        diary_comment: '%{entry_title}، تعليق #%{comment_id}'
         note: 'ملاحظة #%{note_id}'
   issue_comments:
     create:
-      comment_created: ØªÙ\85 Ø§نشاء تعليقك بنجاح
+      comment_created: ØªÙ\85 Ø¥نشاء تعليقك بنجاح
   reports:
     new:
       title_html: بلاغ %{link}
-      missing_params: Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø§نشاء بلاغ جديد
-      details: يرجى تقديم بعض التفاصيل حول المشكلة (مطلوب).
-      select: 'حدد سبب بلاغك:'
+      missing_params: Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¥نشاء بلاغ جديد
+      details: يُرجَى تقديم بعض التفاصيل حول المشكلة (مطلوب).
+      select: 'حدد سببا لبلاغك:'
       disclaimer:
-        intro: 'قبل إرسال تقريرك إلى مشرف الموقع ، يرجى التأكد مما يلي:'
+        intro: 'قبل إرسال تقريرك إلى مشرف الموقع، يُرجَى التأكد مما يلي:'
         not_just_mistake: أنك متأكد من أن المشكلة ليست مجرد خطأ
         unable_to_fix: أنت غير قادر على إصلاح المشكلة بنفسك أو بمساعدة زملائك أعضاء
           المجتمع
         resolve_with_user: لقد حاولت بالفعل حل المشكلة مع المستخدم المعني
       categories:
         diary_entry:
-          spam_label: هذه المذكرة تحتوي على بريد مزعج
+          spam_label: هذه المذكرة هي/تحتوي على بريد مزعج
           offensive_label: هذه المذكرة مسيئة
           threat_label: هذا المذكرة تحتوي على تهديد
           other_label: أخرى
@@ -1049,9 +1049,9 @@ ar:
           threat_label: مذكرة التعليق هذه تحتوي على تهديد
           other_label: أخرى
         user:
-          spam_label: ' ملف المستخدم هذا يحتوي على بريد مزعج'
-          offensive_label: ' ملف المستخدم هذا مسيء'
-          threat_label: ' ملف المستخدم هذا يحتوي على تهديد'
+          spam_label: ملف المستخدم هذا يكون/يحتوي على بريد مزعج
+          offensive_label: ملف المستخدم هذا مسيء
+          threat_label: ملف المستخدم هذا يحتوي على تهديد
           vandal_label: هذا المستخدم مخرب
           other_label: أخرى
         note:
@@ -1061,17 +1061,17 @@ ar:
           other_label: أخرى
     create:
       successful_report: لقد تم تسجيل بلاغك بنجاح
-      provide_details: يرجى تقديم التفاصيل المطلوبة
+      provide_details: يُرجَى تقديم التفاصيل المطلوبة
   layouts:
     logo:
       alt_text: شعار خريطة الشارع المفتوحة
     home: اذهب إلى الصفحة الرئيسية
     logout: سجل خروج
     log_in: تسجيل الدخول
-    log_in_tooltip: Ø³Ø¬Ù\91Ù\84 Ø§Ù\84دخÙ\88Ù\84 Ù\85ع حساب موجود
+    log_in_tooltip: ØªØ³Ø¬Ù\8aÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84حساب موجود
     sign_up: أنشئ حسابًا
     start_mapping: ابدأ التخطيط
-    sign_up_tooltip: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ù\8bا Ù\83Ù\8a ØªØ³ØªØ·Ù\8aع Ø§Ù\84Ù\85ساÙ\87Ù\85Ø©
+    sign_up_tooltip: Ø£Ù\86شئ Ø­Ø³Ø§Ø¨Ù\8bا Ù\84Ù\84تعدÙ\8aÙ\84
     edit: تعديل
     history: تاريخ
     export: صدِّر
@@ -1082,11 +1082,11 @@ ar:
     gps_traces_tooltip: عالج آثار جي بي إس
     user_diaries: يوميات المستخدمين
     user_diaries_tooltip: اعرض يوميات المستخدمين
-    edit_with: Ø­Ø±Ø± Ø¨Ø¥ستعمال %{editor}
+    edit_with: Ø­Ø±Ø± Ø¨Ø§ستعمال %{editor}
     tag_line: ويكي خريطة العالم الحرة
-    intro_header: مرحبا بكم في !OpenStreetMap
-    intro_text: Ø¥Ù\86 OpenStreetMap Ù\87Ù\8a Ø®Ø±Ù\8aطة Ø§Ù\84عاÙ\84Ù\85, Ø£Ù\86شئت Ø¨Ù\88اسطة Ø£Ø´Ø®Ø§Øµ Ù\85Ø«Ù\84Ù\83 Ù\88حرة Ø§Ù\84استخداÙ\85
-      برخصة مفتوحة.
+    intro_header: مرحبا بكم في خريطة الشارع المفتوحة!
+    intro_text: Ø®Ø±Ù\8aطة Ø§Ù\84شارع Ø§Ù\84Ù\85Ù\81تÙ\88حة Ù\87Ù\8a Ø®Ø±Ù\8aطة Ø§Ù\84عاÙ\84Ù\85Ø\8c Ø£Ù\8fÙ\86Ø´Ù\90ئت Ø¨Ù\88اسطة Ø£Ø´Ø®Ø§Øµ Ù\85Ø«Ù\84Ù\83 Ù\88حرة
+      Ø§Ù\84استخداÙ\85 Ø¨Ø±Ø®ØµØ© Ù\85Ù\81تÙ\88حة.
     intro_2_create_account: أنشئ حساب مستخدم
     hosting_partners_html: يتم دعم الاستضافة بواسطة %{ucl} و%{bytemark} و%{partners}
       آخرين.
@@ -1115,8 +1115,7 @@ ar:
     diary_comment_notification:
       subject: '[خريطة الشارع المفتوحة] %{user} علق على مدخلتك في اليومية'
       hi: مرحبًا %{to_user}،
-      header: '%{from_user} علق على مدخلتك في اليومية في خريطة الشارع المفتوحة بالعنوان
-        %{subject}:'
+      header: '%{from_user} علق على مدخلة يومية خريطة الشارع المفتوحة بالعنوان %{subject}:'
       footer: يمكنك أيضًا قراءة التعليق على %{readurl} ويمكنك التعليق على %{commenturl}
         أو الرد على %{replyurl}
     message_notification:
@@ -1134,22 +1133,22 @@ ar:
       greeting: تحياتي،
       your_gpx_file: يبدو أنه ملف جي بي إكس الخاص بك
       with_description: مع الوصف
-      and_the_tags: 'والسمات التالية:'
-      and_no_tags: ولا يوجد سمات.
+      and_the_tags: 'والوسوم التالية:'
+      and_no_tags: ولا توجد وسوم.
       failure:
         subject: '[خريطة الشارع المفتوحة] فشل استيراد جي بي إكس'
-        failed_to_import: 'فشل الاستيراد. الخطأ هو:'
-        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبها
-        more_info_2: 'Ù\88Ù\87Ù\85 Ù\85Ù\88جÙ\88دÙ\8aÙ\86 على:'
+        failed_to_import: 'فشل الاستيراد، الخطأ هو:'
+        more_info_1: المزيد من المعلومات حول فشل استيراد جي بي إكس وكيفية تجنبه
+        more_info_2: 'Ù\88Ù\87Ù\8a Ù\85Ù\88جÙ\88دة على:'
       success:
         subject: '[خريطة الشارع المفتوحة] نجاح استيراد جي بي إكس'
         loaded_successfully: تم تحميل بنجاح %{trace_points} نقطة من أصل %{possible_points}
           نقطة ممكنة.
     signup_confirm:
-      subject: '[خرائط اوبن ستريت] مرحباً بك في خرائط اوبن ستريت'
+      subject: '[خريطة الشارع المفتوحة] مرحبا بك في خريطة الشارع المفتوحة'
       greeting: مرحبا هناك!
       created: شخص ما (نأمل أن تكون أنت) أنشأ حسابا في %{site_url}.
-      confirm: 'Ù\82بÙ\84 Ø£Ù\86 ØªÙ\81عÙ\84 Ø£Ù\8a Ø´Ù\8aØ¡ Ø¢Ø®Ø±Ø\8c Ù\88Ù\86Ø­Ù\86 Ø¨Ø­Ø§Ø¬Ø© Ù\84Ù\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 Ù\87ذا Ø§Ù\84Ø·Ù\84ب Ø¬Ø§Ø¡ Ù\85Ù\86Ù\83Ø\8c
+      confirm: 'Ù\82بÙ\84 Ø£Ù\86 ØªÙ\81عÙ\84 Ø£Ù\8a Ø´Ù\8aØ¡ Ø¢Ø®Ø±Ø\8c Ù\86Ø­Ù\86 Ø¨Ø­Ø§Ø¬Ø© Ù\84Ù\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 Ù\87ذا Ø§Ù\84Ø·Ù\84ب Ø¬Ø§Ø¡ Ù\85Ù\86Ù\83Ø\9b
         لذلك إذا كان كذلك، الرجاء الضغط على الرابط أدناه لتأكيد حسابك:'
       welcome: بعد تأكيد حسابك، سوف نقدم لك بعض المعلومات الإضافية للبدء.
     email_confirm:
@@ -1158,62 +1157,63 @@ ar:
       greeting: تحياتي،
       hopefully_you: شخص ما (نأمل أن تكون أنت) يرغب في تغيير عنوان بريده الإلكتروني
         في %{server_url} إلى %{new_address}.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لتأكيد التغيير.
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لتأكيد التغيير.
     email_confirm_html:
       greeting: مرحبًا،
       hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على %{server_url}
-        to %{new_address}.
-      click_the_link: إذا كان هذا هو أنت، رجاءًا انقر فوق الرابط أدناه لتأكيد التغيير.
+        إلى %{new_address}.
+      click_the_link: إذا كان هذا أنت، رجاءً انقر فوق الرابط أدناه لتأكيد التغيير.
     lost_password:
       subject: '[خريطة الشارع المفتوحة] طلب إعادة تعيين كلمة المرور'
     lost_password_plain:
       greeting: تحياتي،
       hopefully_you: شخص ما (ربما أنت) طلب إعادة تعيين كلمة المرور لحساب openstreetmap.org
         على عنوان البريد الإلكتروني هذا.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
         كلمة المرور.
     lost_password_html:
       greeting: تحياتي،
       hopefully_you: شخص ما (ربما أنت) طلب إعادة تعيين كلمة المرور لحساب openstreetmap.org  على
         عنوان البريد الإلكتروني هذا.
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعادة تعيين
+      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
         كلمة المرور.
     note_comment_notification:
       anonymous: مستخدم مجهول
-      greeting: أهلا,
+      greeting: مرحبا،
       commented:
-        subject_own: '[OpenStreetMap] علق %{commenter} على واحدة من ملاحظاتك'
+        subject_own: '[OpenStreetMap] قدعلق %{commenter} على إحدى ملاحظاتك'
         subject_other: '[OpenStreetMap] علق %{commenter} على ملاحظة تههتم بها'
-        your_note: علق %{commenter} على واحدة من ملاحظات خريطتك بالقرب من %{place}.
-        commented_note: علق %{commenter} على ملاحظة الخريطة التي علقت عليها. كانت
+        your_note: علق %{commenter} على إحدى ملاحظات خريطتك بالقرب من %{place}.
+        commented_note: علق %{commenter} على ملاحظة الخريطة التي علقت عليها، كانت
           الملاحظة بالقرب من %{place}.
       closed:
         subject_own: '[OpenStreetMap] حل %{commenter} إحدى ملاحظاتك'
         subject_other: '[OpenStreetMap] حل %{commenter} ملاحظة تهتم بها'
-        your_note: Ø­Ù\84 %{commenter} Ø¥Ø­Ø¯Ù\89 Ù\85Ù\84احظات Ø§Ù\84خرÙ\8aطة بالقرب من %{place}.
-        commented_note: حل %{commenter} ملاحظة الخريطة التي علقت عليها.كانت الملاحظة
-          بالقرب من %{place}.
+        your_note: Ø­Ù\84 %{commenter} Ø¥Ø­Ø¯Ù\89 Ù\85Ù\84احظات Ø®Ø±Ù\8aطتÙ\83 بالقرب من %{place}.
+        commented_note: حل %{commenter} ملاحظة الخريطة التي علقت عليها، الملاحظة بالقرب
+          من %{place}.
       reopened:
-        subject_own: نشط [OpenStreetMap] %{commenter} إحدى ملاحظاتك
-        subject_other: نشط [OpenStreetMap] %{commenter} ملاحظة كنت مهتما بها
-        your_note: نشط %{commenter} إحدى ملاحظات الخريطة بالقرب من %{place}.
-        commented_note: نشط %{commenter} ملاحظة الخريطة التي علقت عليها.كانت الملاحظة
-          بالقرب من %{place}.
+        subject_own: لقد أعاد [OpenStreetMap] %{commenter} تنشيط إحدى ملاحظاتك
+        subject_other: لقد أعاد [OpenStreetMap] %{commenter} تنشيط ملاحظة كنت مهتما
+          بها
+        your_note: لقد أعاد %{commenter} تنشيط إحدى ملاحظات الخريطة بالقرب من %{place}.
+        commented_note: لقد أعاد %{commenter} تنشيط ملاحظة الخريطة التي علقت عليها،
+          الملاحظة بالقرب من %{place}.
       details: يمكن العثور على مزيد من التفاصيل حول هذه الملاحظة في %{url}.
     changeset_comment_notification:
       hi: أهلا %{to_user}،
-      greeting: مرحبا ،
+      greeting: مرحبا،
       commented:
-        subject_own: '[OpenStreetMap] علق %{commenter} على على إحدى تغييراتك'
-        subject_other: '[OpenStreetMap] علق %{commenter} على ملاحظة تهتم بها'
-        your_changeset: '%{commenter} Ø¹Ù\84Ù\82 Ø¹Ù\84Ù\89 Ø£Ø­Ø¯ Ø§Ù\84تغÙ\8aÙ\8aرات في %{time}'
-        commented_changeset: '%{commenter} ترك تعليقاً على الخريطة التي تشاهدها بواسطة
-          %{changeset_author} في %{time}'
+        subject_own: '[OpenStreetMap] علق %{commenter} على على إحدى مجموعات تغييراتك'
+        subject_other: '[OpenStreetMap] علق %{commenter} على مجموعة تغييرات تهتم بها'
+        your_changeset: '%{commenter} Ø¹Ù\84Ù\82 Ø¹Ù\84Ù\89 Ø¥Ø­Ø¯Ù\89 Ù\85جÙ\85Ù\88عات ØªØºÙ\8aÙ\8aراتÙ\83 في %{time}'
+        commented_changeset: '%{commenter} ترك تعليقاً على مجموعة تغييرات الخريطة
+          التي تشاهدها بواسطة %{changeset_author} في %{time}'
         partial_changeset_with_comment: مع تعليق '%{changeset_comment}'
         partial_changeset_without_comment: بدون تعليق
-      details: Ù\8aÙ\85Ù\83Ù\86 Ø§Ù\84عثÙ\88ر Ø¹Ù\84Ù\89 Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84تÙ\81اصÙ\8aÙ\84 Ø­Ù\88Ù\84 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\84احظة في %{url}.
-      unsubscribe: لإلغاء الاشتراك من التحديثات لهذه التغييرات ، تفضل بزيارة %{url}
-        وانقر على "إلغاء الاشتراك".
+      details: Ù\8aÙ\85Ù\83Ù\86 Ø§Ù\84عثÙ\88ر Ø¹Ù\84Ù\89 Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84تÙ\81اصÙ\8aÙ\84 Ø­Ù\88Ù\84 Ù\85جÙ\85Ù\88عة Ø§Ù\84تغÙ\8aÙ\8aرات في %{url}.
+      unsubscribe: لإلغاء الاشتراك من التحديثات لهذه التغييرات؛ قم بزيارة %{url} وانقر
+        على "إلغاء الاشتراك".
   messages:
     inbox:
       title: الوارد
@@ -1955,7 +1955,7 @@ ar:
       heading: تسجيل الدخول
       email or username: 'عنوان البريد الإلكتروني أو اسم المستخدم:'
       password: 'كلمة السر:'
-      openid: '%{logo} OpenID:'
+      openid: '%{logo} معرف مفتوح:'
       remember: 'تذكرني:'
       lost password link: أنسيت كلمة المرور؟
       login_button: تسجيل الدخول
@@ -2056,6 +2056,7 @@ ar:
       terms accepted: نشكرك على قبول شروط المساهم الجديدة!
       terms declined: نحن نأسف أن كنت قد قررت عدم قبول شروط المساهمة الجديدة. لمزيد
         من المعلومات، يرجى الاطلاع على <a href="%{url}">صفحة الويكي هذه</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: 'شروط المساهم:'
       heading: 'شروط المساهم:'
@@ -2063,10 +2064,12 @@ ar:
         شروط هذا الاتفاق على مشاركاتك الموجودة حاليًا والمستقبلية.
       consider_pd: وبالإضافة إلى الاتفاقية أعلاه، أريد أن تكون مساهماتي ملكية عامة.
       consider_pd_why: ما هذا؟
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'معلومات للمساعدة في فهم هذه المصطلحات: <a href="%{summary}"> ملخص
         قابل للقراءة بالإنسان </a> وبعض <a href="%{translations}"> ترجمة غير رسمية
         </a>'
       agree: أوافق
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: انخفاض
       you need to accept or decline: الرجاء القراءة ومن ثم قبول أو رفض شروط المساهمة
         الجديدة للمتابعة.
@@ -2183,6 +2186,7 @@ ar:
         review link text: يرجى اتباع هذا الرابط في الوقت الذي يناسبك لمراجعة وقبول
           شروط المساهمة الجديدة.
         agreed_with_pd: وقد أعلنتَ أيضًا أنك تعتبر تعديلاتك ملكية عامة.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: ما هذا؟
       profile description: 'وصف الملف الشخصي:'
       preferred languages: 'اللغات المفضّلة:'
@@ -2190,6 +2194,7 @@ ar:
       image: "\uFEFFالصورة:"
       gravatar:
         gravatar: استخدام Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: ما هذا؟
         disabled: تم تعطيل Gravatar .
         enabled: تم تمكين عرض Gravatar الخاص بك.
index d12f89f..13e2921 100644 (file)
@@ -2156,11 +2156,12 @@ de:
       consider_pd: Zusätzlich zu den oben genannten Bedingungen betrachte ich meine
         Beiträge als gemeinfrei (Public Domain)
       consider_pd_why: Was bedeutet dies?
-      consider_pd_why_url: https://www.osmfoundation.org/wiki/DE:License/Why_would_I_want_my_contributions_to_be_public_domain
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Informationen die dabei helfen, diese Bedingungen zu verstehen: eine
         <a href="%{summary}">verständliche Zusammenfassung</a> sowie einige <a href="%{translations}">inoffizielle
         Übersetzungen</a>'
       agree: Akzeptieren
+      declined: https://wiki.openstreetmap.org/wiki/DE:Contributor_Terms_Declined
       decline: Ablehnen
       you need to accept or decline: Bitte lies die neuen Bedingungen für Mitwirkende
         und nimm sie an oder lehne sie ab, bevor du weitermachst.
@@ -2284,6 +2285,7 @@ de:
           durchzulesen sowie zu akzeptieren.
         agreed_with_pd: Du hast zudem erklärt, dass du deine Beiträge gemeinfrei veröffentlichst
           (unter Public Domain stellst).
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: Worum handelt es sich?
       profile description: 'Profil-Beschreibung:'
       preferred languages: 'Bevorzugte Sprachen:'
index a81db8f..923e2ba 100644 (file)
@@ -1114,6 +1114,8 @@ es:
     intro_text: OpenStreetMap es un mapa del mundo, creado por gente como tú y de
       uso libre bajo una licencia abierta.
     intro_2_create_account: Crear una cuenta de usuario
+    hosting_partners_html: El alojamiento es apoyado por %{ucl}, %{bytemark}, y otros
+      %{partners}.
     partners_ucl: UCL
     partners_bytemark: Bytemark Hosting
     partners_partners: socios
@@ -2111,6 +2113,7 @@ es:
       terms declined: Lamentamos que haya decidido no aceptar los nuevos Términos
         de contribución. Para obtener más información, consulte <a href="%{url}">esta
         página wiki</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
     terms:
       title: Términos del colaborador
       heading: Términos del colaborador
@@ -2120,9 +2123,11 @@ es:
       consider_pd: Además del acuerdo anterior, considero que mis contribuciones se
         encuentran en Dominio Público.
       consider_pd_why: ¿qué es esto?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Información para ayudar a comprender estos términos: un <a href="%{summary}">resumen
         legible</a> y algunas <a href="%{translations}">traducciones informales</a>'
       agree: Aceptar
+      declined: https://wiki.openstreetmap.org/wiki/ES:Contributor_Terms_Declined
       decline: Declinar
       you need to accept or decline: Por favor lea y, a continuación, acepte o rechace
         los nuevos Términos de contribución para continuar.
@@ -2244,6 +2249,7 @@ es:
           los nuevos Términos de Colaborador.
         agreed_with_pd: También has declarado que consideras tus modificaciones como
           de Dominio Público.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: ¿Qué es esto?
       profile description: 'Descripción del perfil:'
       preferred languages: 'Idiomas preferidos:'
index cd7f047..1782780 100644 (file)
@@ -2155,9 +2155,11 @@ fr:
       consider_pd: En plus de l’accord ci-dessus, je considère mes contributions comme
         étant dans le domaine public
       consider_pd_why: qu’est-ce que ceci ?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Pour plus d''information sur ces termes : un <a href="%{summary}">résumé
         lisible</a> et quelques <a href="%{translations}">traductions informelles</a>'
       agree: J’accepte
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Décliner
       you need to accept or decline: Veuillez lire et ensuite soit accepter ou refuser
         les nouvelles conditions de contributeur pour continuer.
index 1437180..6cf0178 100644 (file)
@@ -195,7 +195,7 @@ gl:
         relation: relación
     start_rjs:
       feature_warning: A carga de %{num_features} características pode facer que o
-        seu navegador vaia lento ou que non responda. Está seguro de querer amosar
+        seu navegador vaia lento ou que non responda. Está na certeza de querer amosar
         eses datos?
       load_data: Cargar os datos
       loading: Cargando...
@@ -1022,7 +1022,7 @@ gl:
       select: Seleccione unha razón pola que queira informarnos
       disclaimer:
         intro: 'Antes de enviarlle o informe aos moderadores, asegúrese de que:'
-        not_just_mistake: Vostede está seguro/a de que o problema non é un simple
+        not_just_mistake: Vostede está na certeza de que o problema non é un sinxelo
           erro
         unable_to_fix: Non é quen de arranxar o problema só ou coa axuda dos membros
           da comunidade
@@ -1937,7 +1937,7 @@ gl:
       support_notice: Soportamos HMAC-SHA1 (recomendado) e sinaturas RSA-SHA1.
       edit: Edita-los detalles
       delete: Borrar o cliente
-      confirm: Está seguro?
+      confirm: Está na certeza?
       requests: 'Solicitar os seguintes permisos ao usuario:'
       allow_read_prefs: ler as súas preferencias de usuario.
       allow_write_prefs: modificar as súas preferencias de usuario.
@@ -2352,14 +2352,16 @@ gl:
     grant:
       title: Confirma-la concesión do rol
       heading: Confirma-la concesión do rol
-      are_you_sure: Seguro que quere concederlle o rol "%{role}" ao usuario "%{name}"?
+      are_you_sure: Está na certeza de que quere concederlle o rol "%{role}" ó usuario
+        "%{name}"?
       confirm: Confirmar
       fail: Non se lle puido conceder o rol "%{role}" ao usuario "%{name}". Comprobe
         que tanto o usuario coma o rol son correctos.
     revoke:
       title: Confirma-la revogación do rol
       heading: Confirma-la revogación do rol
-      are_you_sure: Seguro que quere revogarlle o rol "%{role}" ao usuario "%{name}"?
+      are_you_sure: Está na certeza de que quere revogarlle o rol "%{role}" ó usuario
+        "%{name}"?
       confirm: Confirmar
       fail: Non se lle puido revogar o rol "%{role}" ao usuario "%{name}". Comprobe
         que tanto o usuario coma o rol son correctos.
@@ -2420,7 +2422,7 @@ gl:
       heading: Revogando o bloqueo en %{block_on} por %{block_by}
       time_future: Este bloqueo rematará en %{time}.
       past: Este bloqueo rematou hai %{time}. Entón, xa non se pode retirar.
-      confirm: Está seguro de querer retirar este bloqueo?
+      confirm: Está na certeza de querer retirar este bloqueo?
       revoke: Revogar!
       flash: Revogouse o bloqueo.
     period:
@@ -2451,7 +2453,7 @@ gl:
       show: Amosar
       edit: Editar
       revoke: Revogar!
-      confirm: Está seguro?
+      confirm: Está na certeza?
       reason: 'Motivo para o bloqueo:'
       back: Ollar tódolos bloqueos
       revoker: 'Autor da revogación:'
@@ -2716,7 +2718,7 @@ gl:
       user: 'Creador:'
       edit: Editar esta redacción
       destroy: Eliminar esta redacción
-      confirm: Está seguro?
+      confirm: Está na certeza?
     create:
       flash: Redacción creada.
     update:
index fc99f2e..ee0e9a6 100644 (file)
@@ -946,6 +946,9 @@ ja:
     results:
       no_results: 該当するものはありません
       more_results: その他の結果
+  issues:
+    index:
+      last_updated_time_html: <abbr title='%{title}'>%{time}前</abbr>
   layouts:
     logo:
       alt_text: OpenStreetMap ロゴ
index beb47f7..2018fe5 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: Alem
 # Author: Belkacem77
+# Author: Marzuquccen
 # Author: Mastanabal
 # Author: Mhenni
 # Author: MustaphaLateb
@@ -603,12 +604,42 @@ kab:
           butcher: Agezzar
           car: Tahanutt n tkeryas
           car_parts: Ticeqqufin n ubeddel n tkeryas
+          clothes: Taḥanut n icetiḍen
+          computer: Taḥanut n iselkimen
+          confectionery: Taḥanut n ḥlawat
+          copyshop: Taḥanut n talsuffeɣt
+          cosmetics: Taḥanut n rwayeḥ
+          department_store: Taḥanut tameqqrant
+          farm: Tahanutt n tkeryas n tfellaḥt
+          fish: Taḥanut n iselman
+          florist: Taḥanut n ijeǧǧigen
+          food: Taḥanut n wuččan
+          gift: Taḥanut n isefan
+          greengrocer: Ameznuz n lxeḍra
+          hairdresser: Aḥeffaf
+          hifi: Taḥanut Hi-Fi
+          interior_decoration: Azewweq n daxel
+          jewelry: Taḥanut n sdaq
+          lottery: Loto
+          market: Suq
+          mobile_phone: Taḥanut n tilifunat ufus
+          newsagent: Ameznuz n iǧarnanen
+          optician: Taḥanut n nwaḍer
+          pharmacy: Taḥanut n ddwa
+          shoes: Taḥanut n isebbaḍen
+          sports: Taḥanut n tɣawsiwin n waddal
+          supermarket: Ssuq ameqqran
+          ticket: Taḥanut n itikiyen
+          tobacco: Birutabac
+          toys: Taḥanut n illelucen
+          tyres: Taḥanut n rwadi
           "yes": Taḥanut
         tourism:
           hostel: Azebriz
           hotel: Asensu
           information: Talɣut
           museum: Asalay
+          zoo: Zoo
         tunnel:
           "yes": Ifri
         waterway:
index dc7045f..af66c57 100644 (file)
@@ -257,14 +257,14 @@ nb:
     index:
       title: Endringssett
       title_user: Endringssett av %{user}
-      title_friend: Endringssett fra mine venner
+      title_friend: Endringssett av mine venner
       title_nearby: Endringssett av brukere i nærheten
       empty: Inget endringssett funnet.
       empty_area: Ingen endringssett i dette området.
-      empty_user: Ingen endringssett fra denne brukeren.
+      empty_user: Ingen endringssett av denne brukeren.
       no_more: Ingen flere endringssett funnet.
       no_more_area: Ingen flere endringssett i dette området.
-      no_more_user: Ingen flere endringssett fra denne brukeren.
+      no_more_user: Ingen flere endringssett av denne brukeren.
       load_more: Last inn mer
     timeout:
       sorry: Beklager, listen over endringssett som du ba om tok for lang tid å hente.
index cf13d83..e99df32 100644 (file)
@@ -2126,6 +2126,7 @@ ru:
       terms accepted: Спасибо за принятие новых условий участия!
       terms declined: Нам жаль, что вы решили не принимать новые условия участия.
         Дополнительную информацию можно найти <a href="%{url}">на следующей странице</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=ru
     terms:
       title: Условия сотрудничества
       heading: Условия сотрудничества
@@ -2135,9 +2136,11 @@ ru:
       consider_pd: В дополнение к вышеизложенному соглашению, я принимаю во внимание,
         что мой вклад находится в общественном достоянии
       consider_pd_why: что это значит?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain?uselang=ru
       guidance: 'Информация, которая поможет понять эти условия: <a href="%{summary}">краткое
         описание</a> и несколько <a href="%{translations}">неофициальных переводов</a>'
       agree: Принять
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined?uselang=ru
       decline: Отклонить
       you need to accept or decline: Пожалуйста, прочитайте, а затем согласитесь или
         отклоните новые Условия участия.
@@ -2270,6 +2273,7 @@ ru:
       image: 'Изображение:'
       gravatar:
         gravatar: Использовать Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar?uselang=ru
         link text: что это?
         disabled: Gravatar отключён.
         enabled: Отображение вашего Gravatar включено.
index 28d3be7..1792cd2 100644 (file)
@@ -106,7 +106,7 @@ sl:
   browse:
     created: Ustvarjeno
     closed: Zaprto
-    created_html: Ustvarjeno <abbr title='%{title}'>%{time} nazas</abbr>
+    created_html: Ustvarjeno <abbr title='%{title}'>%{time} nazaj</abbr>
     closed_html: Zaprto <abbr title='%{title}'>%{time} nazaj</abbr>
     created_by_html: Ustvaril %{user} <abbr title='%{title}'>%{time} nazaj</abbr>
     deleted_by_html: Izbrisal %{user} <abbr title='%{title}'>%{time} nazaj</abbr>
index 6d63768..5c65aef 100644 (file)
@@ -2099,6 +2099,7 @@ sv:
         kartan!
       terms declined: Vi beklagar att du bestämt dig för att inte acceptera de nya
         användarvillkoren. För mer information, se <a href="%{url}">denna wikisida</a>.
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: Villkor för deltagare
       heading: Villkor för deltagare
@@ -2108,9 +2109,11 @@ sv:
       consider_pd: Utöver ovan nämnda avtal, anser jag att mina bidrag är inom Public
         Domain.
       consider_pd_why: vad är det här?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 'Information som hjälper dig förstå dessa termer: en <a href="%{summary}">lättläst
         sammanfattning</a> och några <a href="%{translations}">informella översättningar</a>'
       agree: Jag godkänner
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: Avslå
       you need to accept or decline: Läs igenom och Godkänn eller Avböj de nya bidragsvillkoren
         för att fortsätta.
@@ -2233,6 +2236,7 @@ sv:
           de nya bidragsvillkoren.
         agreed_with_pd: Du har också förklarat att du anser att dina redigeringar
           är inom Public Domain.
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: vad är detta?
       profile description: 'Profilbeskrivning:'
       preferred languages: 'Föredraget språk:'
@@ -2240,6 +2244,7 @@ sv:
       image: 'Bild:'
       gravatar:
         gravatar: Använd Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: vad är detta?
         disabled: Gravatar har inaktiverats.
         enabled: Din Gravatar har aktiverats.
index 18d889d..23b1e63 100644 (file)
@@ -157,6 +157,7 @@ ta:
       description: விளக்கம்
   changeset:
     changeset_paging_nav:
+      showing_page: பக்கம் %{page}
       next: அடுத்து »
       previous: « முந்தைய
     changeset:
@@ -219,6 +220,7 @@ ta:
     diary_comment:
       hide_link: இக் கருத்துரையை மறை
       confirm: உறுதிசெய்
+      report: இந்தப் பின்னூட்டத்தை முறையிடுக
     location:
       location: 'இடம்:'
       view: காண்
index 21b1544..ae2532c 100644 (file)
@@ -1921,14 +1921,17 @@ zh-TW:
       continue: 註冊
       terms accepted: 感謝您接受新的貢獻條款!
       terms declined: 我們很遺憾你已決定不接受新的貢獻者條款。有關詳細資訊,請參閱<a href="%{url}">此 wiki 頁面</a>。
+      terms declined url: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
     terms:
       title: 貢獻者條款
       heading: 貢獻者條款
       read and accept: 請閱讀下面的協議並按同意按鈕,以確認為你現有的和將來的貢獻接受本協議的條款。
       consider_pd: 在上述協議之上,我同意將我的貢獻放到公共領域
       consider_pd_why: 這是什麼?
+      consider_pd_why_url: https://www.osmfoundation.org/wiki/License/Why_would_I_want_my_contributions_to_be_public_domain
       guidance: 幫助理解這些條款的資料:一個<a href="%{summary}">供普通人閱讀的摘要</a>和一些<a href="%{translations}">非正式翻譯</a>
       agree: 同意
+      declined: https://wiki.openstreetmap.org/wiki/Contributor_Terms_Declined
       decline: 拒絕
       you need to accept or decline: 請先閱讀,然後選擇接受或拒絕新的貢獻者條款,再繼續。
       legale_select: 請選擇您的居住地:
@@ -2039,6 +2042,7 @@ zh-TW:
         not yet agreed: 您未同意新的貢獻者條款。
         review link text: 請跟隨此連結,方便你檢視並接受新的貢獻者條款。
         agreed_with_pd: 您亦同意將您的編輯放到公共領域
+        link: https://www.osmfoundation.org/wiki/License/Contributor_Terms
         link text: 這是什麼?
       profile description: 基本資料描述:
       preferred languages: 偏好的語言:
@@ -2046,6 +2050,7 @@ zh-TW:
       image: 圖片:
       gravatar:
         gravatar: 使用 Gravatar
+        link: https://wiki.openstreetmap.org/wiki/Gravatar
         link text: 這是什麼?
         disabled: Gravatar已停用。
         enabled: 您的Gravatar顯示功能已啟用。
index 1ebce60..33261c4 100644 (file)
@@ -876,6 +876,84 @@ class NotesControllerTest < ActionController::TestCase
     end
   end
 
+  def test_search_by_display_name_success
+    user = create(:user)
+
+    create(:note) do |note|
+      create(:note_comment, :note => note, :author => user)
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 1
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 1, js["features"].count
+
+    get :search, :params => { :display_name => user.display_name, :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 1
+      end
+    end
+
+    get :search, :params => { :display_name => user.display_name, :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 1
+    end
+  end
+
+  def test_search_by_user_success
+    user = create(:user)
+
+    create(:note) do |note|
+      create(:note_comment, :note => note, :author => user)
+    end
+
+    get :search, :params => { :user => user.id, :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 1
+    end
+
+    get :search, :params => { :user => user.id, :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 1, js["features"].count
+
+    get :search, :params => { :user => user.id, :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 1
+      end
+    end
+
+    get :search, :params => { :user => user.id, :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 1
+    end
+  end
+
   def test_search_no_match
     create(:note_with_comments)
 
@@ -911,15 +989,59 @@ class NotesControllerTest < ActionController::TestCase
     end
   end
 
-  def test_search_bad_params
-    get :search
-    assert_response :bad_request
+  def test_search_by_time_no_match
+    create(:note_with_comments)
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "xml" }
+    assert_response :success
+    assert_equal "application/xml", @response.content_type
+    assert_select "osm", :count => 1 do
+      assert_select "note", :count => 0
+    end
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "json" }
+    assert_response :success
+    assert_equal "application/json", @response.content_type
+    js = ActiveSupport::JSON.decode(@response.body)
+    assert_not_nil js
+    assert_equal "FeatureCollection", js["type"]
+    assert_equal 0, js["features"].count
+
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "rss" }
+    assert_response :success
+    assert_equal "application/rss+xml", @response.content_type
+    assert_select "rss", :count => 1 do
+      assert_select "channel", :count => 1 do
+        assert_select "item", :count => 0
+      end
+    end
 
+    get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "gpx" }
+    assert_response :success
+    assert_equal "application/gpx+xml", @response.content_type
+    assert_select "gpx", :count => 1 do
+      assert_select "wpt", :count => 0
+    end
+  end
+
+  def test_search_bad_params
     get :search, :params => { :q => "no match", :limit => "0", :format => "json" }
     assert_response :bad_request
 
     get :search, :params => { :q => "no match", :limit => "10001", :format => "json" }
     assert_response :bad_request
+
+    get :search, :params => { :display_name => "non-existent" }
+    assert_response :bad_request
+
+    get :search, :params => { :user => "-1" }
+    assert_response :bad_request
+
+    get :search, :params => { :from => "wrong-date", :to => "wrong-date" }
+    assert_response :bad_request
+
+    get :search, :params => { :from => "01.01.2010", :to => "2010.01.2010" }
+    assert_response :bad_request
   end
 
   def test_feed_success