diff options
author | Seb Bacon <seb.bacon@gmail.com> | 2011-09-09 09:07:20 +0100 |
---|---|---|
committer | Seb Bacon <seb.bacon@gmail.com> | 2011-09-09 09:07:20 +0100 |
commit | b0181d36715c4e5258803c735b72a809b0f254a9 (patch) | |
tree | f7f496910e93213692b0ac295c08811ec03d1360 | |
parent | a9c7286807dca10872b5c659c216e1e2a754e9c3 (diff) | |
parent | e1d38525ae985d268a5d5478ed8122c5a5b19871 (diff) |
Merge origin/develop into local develop (including Nick's design changes)
32 files changed, 1198 insertions, 715 deletions
diff --git a/app/controllers/public_body_controller.rb b/app/controllers/public_body_controller.rb index 0e58b7055..79ca58d13 100644 --- a/app/controllers/public_body_controller.rb +++ b/app/controllers/public_body_controller.rb @@ -91,7 +91,10 @@ class PublicBodyController < ApplicationController @tag = params[:tag] @locale = self.locale_from_params() - locale_condition = "(upper(public_body_translations.name) LIKE upper(?) OR upper(public_body_translations.notes) LIKE upper (?)) AND public_body_translations.locale = ?" + locale_condition = "(upper(public_body_translations.name) LIKE upper(?) + OR upper(public_body_translations.notes) LIKE upper (?)) + AND public_body_translations.locale = ? + AND public_bodies.id <> #{PublicBody.internal_admin_body.id}" if @tag.nil? or @tag == "all" @tag = "all" conditions = [locale_condition, @query, @query, @locale] @@ -123,7 +126,7 @@ class PublicBodyController < ApplicationController @description = @tag end end - PublicBody.with_locale(@locale) do + PublicBody.with_locale(@locale) do @public_bodies = PublicBody.paginate( :order => "public_body_translations.name", :page => params[:page], :per_page => 1000, # fit all councils on one page :conditions => conditions, diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d12238582..a0f16dfaf 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -105,8 +105,12 @@ module ApplicationHelper method_name.sub(/\?$/, "") end - def form_tag_id(object_name, method_name) - return "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}" + def form_tag_id(object_name, method_name, locale=nil) + if locale.nil? + return "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}" + else + return "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}__#{locale.to_s}" + end end end diff --git a/app/models/track_mailer.rb b/app/models/track_mailer.rb index f8bef4d61..85b1fedd8 100644 --- a/app/models/track_mailer.rb +++ b/app/models/track_mailer.rb @@ -26,6 +26,12 @@ class TrackMailer < ApplicationMailer @body = { :user => user, :email_about_things => email_about_things, :unsubscribe_url => unsubscribe_url } end + def contact_from_name_and_email + contact_name = MySociety::Config.get("TRACK_SENDER_NAME", 'Alaveteli') + contact_email = MySociety::Config.get("TRACK_SENDER_EMAIL", 'contact@localhost') + return "#{contact_name} <#{contact_email}>" + end + # Send email alerts for tracked things. Never more than one email # a day, nor about events which are more than a week old, nor # events about which emails have been sent within the last two @@ -40,6 +46,8 @@ class TrackMailer < ApplicationMailer return false end for user in users + next if !user.should_be_emailed? + email_about_things = [] track_things = TrackThing.find(:all, :conditions => [ "tracking_user_id = ? and track_medium = ?", user.id, 'email_daily' ]) for track_thing in track_things diff --git a/app/models/user.rb b/app/models/user.rb index c3c3da6f7..e98d777b1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -16,6 +16,8 @@ # admin_level :string(255) default("none"), not null # ban_text :text default(""), not null # about_me :text default(""), not null +# email_bounced_at :datetime +# email_bounce_message :text default(""), not null # # models/user.rb: @@ -350,15 +352,37 @@ class User < ActiveRecord::Base } end + def record_bounce(message) + self.email_bounced_at = Time.now + self.email_bounce_message = message + self.save! + end + + def should_be_emailed? + return (self.email_confirmed && self.email_bounced_at.nil?) + end + + ## Private instance methods private + def create_new_salt + self.salt = self.object_id.to_s + rand.to_s + end + + ## Class methods def User.encrypted_password(password, salt) string_to_hash = password + salt # XXX need to add a secret here too? Digest::SHA1.hexdigest(string_to_hash) end - - def create_new_salt - self.salt = self.object_id.to_s + rand.to_s + + def User.record_bounce_for_email(email, message) + user = User.find_user_by_email(email) + return false if user.nil? + + if user.email_bounced_at.nil? + user.record_bounce(message) + end + return true end end diff --git a/app/views/admin_public_body/_form.rhtml b/app/views/admin_public_body/_form.rhtml index 6a9013071..1cdc9b3fe 100644 --- a/app/views/admin_public_body/_form.rhtml +++ b/app/views/admin_public_body/_form.rhtml @@ -26,20 +26,20 @@ <div id="div-locale-<%=locale.to_s%>"> <%= t.hidden_field :locale, :value => locale.to_s %> - <p><label for="<%= form_tag_id(t.object_name, :name) %>">Name</label><br/> - <%= t.text_field :name, :size => 60, :id => form_tag_id(t.object_name, :name) %></p> + <p><label for="<%= form_tag_id(t.object_name, :name, locale) %>">Name</label><br/> + <%= t.text_field :name, :size => 60, :id => form_tag_id(t.object_name, :name, locale) %></p> - <p><label for="<%= form_tag_id(t.object_name, :short_name) %>">Short name <small>(only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL - don't worry about breaking URLs through renaming, as the history is used to redirect)</small></label><br/> - <%= t.text_field :short_name, :size => 60, :id => form_tag_id(t.object_name, :short_name) %></p> + <p><label for="<%= form_tag_id(t.object_name, :short_name, locale) %>">Short name <small>(only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL - don't worry about breaking URLs through renaming, as the history is used to redirect)</small></label><br/> + <%= t.text_field :short_name, :size => 60, :id => form_tag_id(t.object_name, :short_name, locale) %></p> - <p><label for="<%= form_tag_id(t.object_name, :request_email) %>">Request email <small>(set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA)</small></label><br/> - <%= t.text_field :request_email, :size => 40, :id => form_tag_id(t.object_name, :request_email) %></p> + <p><label for="<%= form_tag_id(t.object_name, :request_email, locale) %>">Request email <small>(set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA)</small></label><br/> + <%= t.text_field :request_email, :size => 40, :id => form_tag_id(t.object_name, :request_email, locale) %></p> - <p><label for="<%= form_tag_id(t.object_name, :publication_scheme) %>">Publication scheme URL</label><br/> - <%= t.text_field :publication_scheme, :size => 60, :id => form_tag_id(t.object_name, :publication_scheme) %></p> + <p><label for="<%= form_tag_id(t.object_name, :publication_scheme, locale) %>">Publication scheme URL</label><br/> + <%= t.text_field :publication_scheme, :size => 60, :id => form_tag_id(t.object_name, :publication_scheme, locale) %></p> - <p><label for="<%= form_tag_id(t.object_name, :notes) %>">Public notes</label> <small>(HTML, for users to consider when making FOI requests to the authority)</small><br/> - <%= t.text_area :notes, :rows => 3, :cols => 60, :id => form_tag_id(t.object_name, :notes) %></p> + <p><label for="<%= form_tag_id(t.object_name, :notes, locale) %>">Public notes</label> <small>(HTML, for users to consider when making FOI requests to the authority)</small><br/> + <%= t.text_area :notes, :rows => 3, :cols => 60, :id => form_tag_id(t.object_name, :notes, locale) %></p> </div> <% end diff --git a/app/views/general/frontpage.rhtml b/app/views/general/frontpage.rhtml index 55b00b753..215288791 100644 --- a/app/views/general/frontpage.rhtml +++ b/app/views/general/frontpage.rhtml @@ -58,7 +58,7 @@ <ul> <% for event in @request_events %> <li> - <%= public_body_link(event.info_request.public_body) %> answered a request about + <%= public_body_link(event.info_request.public_body) %> <%= _('answered a request about') %> <%=link_to h(event.info_request.title), request_url(event.info_request)%> <%= _('{{length_of_time}} ago', :length_of_time => time_ago_in_words(event.described_at)) %> <p class="excerpt" onclick="document.location.href='<%=request_url(event.info_request)%>'"><%= excerpt(event.info_request.title, "", 200) %></p> diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml index 1075ffc03..bd96f1528 100644 --- a/app/views/layouts/default.rhtml +++ b/app/views/layouts/default.rhtml @@ -32,9 +32,10 @@ <style type="text/css">@import url("/stylesheets/ie7.css");</style> <![endif]--> <%= stylesheet_link_tag 'custom', :title => "Main", :rel => "stylesheet" %> - <!-- XXX: add conditional include --> + <% if force_registration_on_new_request %> <%= stylesheet_link_tag 'jquery.fancybox-1.3.4', :rel => "stylesheet" %> - + <% end %> + <% if @feed_autodetect %> <% for feed in @feed_autodetect %> <link rel="alternate" type="application/atom+xml" title="<%=h feed[:title] %>" href="<%=h feed[:url]%>"> @@ -62,8 +63,8 @@ $(document).ready(function() { $("#make-request-link").fancybox({ 'modal': false, - 'width': 800, - 'height': 500, + 'width': 900, + 'height': 400, 'type': 'iframe', 'href': '/en/profile/sign_in?modal=1', 'onClosed': function() { @@ -132,9 +133,7 @@ </div> </div> <div id="wrapper"> - <div id="content"> - <% if flash[:notice] %> <div id="notice"><%= flash[:notice] %></div> <% end %> diff --git a/app/views/layouts/no_chrome.rhtml b/app/views/layouts/no_chrome.rhtml index c314dfbd3..74c79b701 100644 --- a/app/views/layouts/no_chrome.rhtml +++ b/app/views/layouts/no_chrome.rhtml @@ -11,7 +11,9 @@ <script type="text/javascript" src="/javascripts/jquery.js"></script> - <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet" %> + <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet" %> + <%= stylesheet_link_tag 'fonts', :rel => "stylesheet" %> + <%= stylesheet_link_tag 'theme', :rel => "stylesheet" %> <!--[if LT IE 7]> <style type="text/css">@import url("/stylesheets/ie6.css");</style> <![endif]--> @@ -21,7 +23,7 @@ <%= stylesheet_link_tag 'custom', :title => "Main", :rel => "stylesheet" %> </head> <body> - <div class="entirebody"> + <div class="entirebody"> <div id="content"> <% if flash[:notice] %> <div id="notice"><%= flash[:notice] %></div> diff --git a/app/views/request/_search_ahead.rhtml b/app/views/request/_search_ahead.rhtml index b8ef7437e..9c49680c3 100644 --- a/app/views/request/_search_ahead.rhtml +++ b/app/views/request/_search_ahead.rhtml @@ -1,13 +1,12 @@ -<p> - <div id="request_search_ahead_results"> +<div id="request_search_ahead_results"> <% if @xapian_requests.results.size > 0 %> <h3><%= _("Possibly related requests:") %></h3> <% end %> <% for result in @xapian_requests.results %> <%= render :partial => 'request/request_listing_short_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %> <% end %> - </div> -</p> - - + <p> + <a id="body-site-search-link" target="_blank"><%= _("Or search in their website for this information.") %></a> + </p> +</div> diff --git a/app/views/request/new.rhtml b/app/views/request/new.rhtml index 8dae8467a..355641b63 100644 --- a/app/views/request/new.rhtml +++ b/app/views/request/new.rhtml @@ -4,8 +4,16 @@ // Avoid triggering too often (on each keystroke) by using the debounce jQuery plugin: // http://benalman.com/projects/jquery-throttle-debounce-plugin/ $("#typeahead_search").keypress($.debounce( 300, function() { - $("#typeahead_response").load("<%=search_ahead_url%>?q="+encodeURI(this.value)); + $("#typeahead_response").load("<%=search_ahead_url%>?q="+encodeURI(this.value), function() { + // When following links in typeahead results, open new tab/window + $("#typeahead_response a").attr("target","_blank"); + + // Update the public body site search link + $("#body-site-search-link").attr("href", "http://www.google.com/#q="+encodeURI($("#typeahead_search").val())+ + "+site:<%= @info_request.public_body.calculated_home_page %>"); + }); })); + }); </script> @@ -84,6 +92,7 @@ <% end %> ) </div> + <div id="typeahead_response"> </div> </div> diff --git a/commonlib b/commonlib -Subproject a87ebeae21166b3b4a8a66b32399861fcd6d0c4 +Subproject 16e32f0575107068ae1f16c26e31c598e4fef41 diff --git a/config/alert-tracks-debian.ugly b/config/alert-tracks-debian.ugly index 730a125b4..5bd146061 100644 --- a/config/alert-tracks-debian.ugly +++ b/config/alert-tracks-debian.ugly @@ -32,7 +32,7 @@ start_daemon() { } stop_daemon() { - /sbin/start-stop-daemon --stop --pidfile "$PIDFILE" + /sbin/start-stop-daemon --stop --oknodo --pidfile "$PIDFILE" } restart() { stop; start; } diff --git a/config/general.yml-example b/config/general.yml-example index ae50afc5a..dcaa0d648 100644 --- a/config/general.yml-example +++ b/config/general.yml-example @@ -64,6 +64,10 @@ ADMIN_PASSWORD: 'passwordx' CONTACT_EMAIL: 'postmaster@localhost' CONTACT_NAME: 'Alaveteli Webmaster' +# Email "from" details for track messages +TRACK_SENDER_EMAIL: 'postmaster@localhost' +TRACK_SENDER_NAME: 'Alaveteli Webmaster' + # Where the raw incoming email data gets stored; make sure you back # this up! RAW_EMAILS_LOCATION: 'files/raw_emails' @@ -115,3 +119,6 @@ USE_GHOSTSCRIPT_COMPRESSION: true # mySociety's gazeteer service. Shouldn't change. GAZE_URL: http://gaze.mysociety.org + +# The email address to which non-bounce responses should be forwarded +FORWARD_NONBOUNCE_RESPONSES_TO: user-support@localhost diff --git a/db/migrate/103_add_user_bounce_columns.rb b/db/migrate/103_add_user_bounce_columns.rb new file mode 100644 index 000000000..a16ecde75 --- /dev/null +++ b/db/migrate/103_add_user_bounce_columns.rb @@ -0,0 +1,15 @@ +require 'digest/sha1' + +class AddUserBounceColumns < ActiveRecord::Migration + def self.up + add_column :users, :email_bounced_at, :datetime + add_column :users, :email_bounce_message, :text, :default => "", :null => false + end + def self.down + remove_column :users, :email_bounced_at + remove_column :users, :email_bounce_message + end +end + + + diff --git a/lib/external_command.rb b/lib/external_command.rb deleted file mode 100644 index 96292854f..000000000 --- a/lib/external_command.rb +++ /dev/null @@ -1,135 +0,0 @@ -# Run an external command, capturing its stdout and stderr -# streams into variables. -# -# So it’s rather like the `backtick` built-in, except that: -# - The command is run as-is, rather than being parsed by the shell; -# - Standard error is also captured. -# -# After the run() method has been called, the instance variables -# out, err and status contain the contents of the process’s stdout, -# the contents of its stderr, and the exit status. -# -# Example usage: -# require 'external_command' -# xc = ExternalCommand("ls", "-l").run() -# puts "Ran ls -l with exit status #{xc.status}" -# puts "===STDOUT===\n#{xc.out}" -# puts "===STDERR===\n#{xc.err}" -# -# The out and err attributes are writeable. If you assign -# a string, after calling the constructor and before calling -# run(), then the subprocess output/error will be appended -# to this string. - -# <rant author="robin"> -# In any sane language, this would be implemented with a -# single child process. The parent process would block on -# select(), and when the child process terminated, the -# select call would be interrupted by a CHLD signal -# and return EINTR. Unfortunately Ruby goes out of its -# way to prevent this from working, automatically restarting -# the select call if EINTR is returned. Therefore we -# use a parent-child-grandchild arrangement, where the -# parent blocks on select() and the child blocks on -# waitpid(). When the child detects that the grandchild -# has finished, it writes to a pipe that’s included in -# the parent’s select() for this purpose. -# </rant> - -class ExternalCommand - attr_accessor :out, :err - attr_reader :status - - def initialize(cmd, *args) - @cmd = cmd - @args = args - - # Strings to collect stdout and stderr from the child process - # These may be replaced by the caller, to append to existing strings. - @out = "" - @err = "" - @fin = "" - end - - def run() - # Pipes for parent-child communication - @out_read, @out_write = IO::pipe - @err_read, @err_write = IO::pipe - @fin_read, @fin_write = IO::pipe - - @pid = fork do - # Here we’re in the child process. - child_process - end - - # Here we’re in the parent process. - parent_process - - return self - end - - private - - def child_process() - # Reopen stdout and stderr to point at the pipes - STDOUT.reopen(@out_write) - STDERR.reopen(@err_write) - - # Close all the filehandles other than the ones we intend to use. - ObjectSpace.each_object(IO) do |fh| - fh.close unless ( - [STDOUT, STDERR, @fin_write].include?(fh) || fh.closed?) - end - - Process::waitpid(fork { grandchild_process }) - @fin_write.puts($?.exitstatus.to_s) - - exit! 0 - end - - def grandchild_process() - exec(@cmd, *@args) - - # This is only reached if the exec fails - @err_write.print("Failed to exec: #{[@cmd, *@args].join(' ')}") - exit! 99 - end - - def parent_process() - # Close the writing ends of the pipes - @out_write.close - @err_write.close - @fin_write.close - - @fhs = {@out_read => @out, @err_read => @err, @fin_read => @fin} - - while @fin.empty? - ok = read_data - if !ok - raise "select() timed out even with a nil (infinite) timeout" - end - end - - while read_data(0) - # Pull out any data that’s left in the pipes - end - - Process::waitpid(@pid) - @status = @fin.to_i - @out_read.close - @err_read.close - end - - def read_data(timeout=nil) - ready_array = IO.select(@fhs.keys, [], [], timeout) - return false if ready_array.nil? - ready_array[0].each do |fh| - begin - @fhs[fh] << fh.readpartial(8192) - rescue EOFError - @fhs.delete fh - end - end - return true - end -end diff --git a/locale/app.pot b/locale/app.pot index f41cd238f..414c65514 100644 --- a/locale/app.pot +++ b/locale/app.pot @@ -2,13 +2,13 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# +# #, fuzzy msgid "" msgstr "" -"Project-Id-Version: alaveteli\n" +"Project-Id-Version: version 0.0.1\n" "Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n" -"POT-Creation-Date: 2011-09-05 11:30+0200\n" +"POT-Creation-Date: 2011-09-07 12:17+0200\n" "PO-Revision-Date: 2011-08-22 11:15+0100\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -21,7 +21,8 @@ msgstr "" msgid "" "\n" "\n" -"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]" +"[ {{site_name}} note: The above text was badly encoded, and has had strange " +"characters removed. ]" msgstr "" #: app/views/user/set_profile_about_me.rhtml:14 @@ -73,8 +74,10 @@ msgstr "" #: app/views/public_body/view_email.rhtml:30 msgid "" -" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n" -" You may be able to find the address on their website, or by phoning them up and asking." +" If you know the address to use, then please <a href=\"%s\">send it to us</" +"a>.\n" +" You may be able to find the address on their website, or by phoning " +"them up and asking." msgstr "" #: app/views/user/set_profile_about_me.rhtml:26 @@ -86,8 +89,8 @@ msgstr "" #: app/views/comment/new.rhtml:27 msgid "" -" Link to the information requested, if it is <strong>already " -"available</strong> on the Internet. " +" Link to the information requested, if it is <strong>already available</" +"strong> on the Internet. " msgstr "" #: app/views/comment/new.rhtml:29 @@ -136,9 +139,9 @@ msgstr "" msgid " when you send this message." msgstr "" -#: app/views/public_body/show.rhtml:82 -msgid "%d Freedom of Information request made using this site" -msgid_plural "%d Freedom of Information requests made using this site" +#: app/views/public_body/show.rhtml:88 +msgid "%d Freedom of Information request to %s" +msgid_plural "%d Freedom of Information requests to %s" msgstr[0] "" msgstr[1] "" @@ -154,11 +157,11 @@ msgid_plural "%d requests made." msgstr[0] "" msgstr[1] "" -#: app/views/request/new.rhtml:83 +#: app/views/request/new.rhtml:91 msgid "'Crime statistics by ward level for Wales'" msgstr "" -#: app/views/request/new.rhtml:81 +#: app/views/request/new.rhtml:89 msgid "'Pollution levels over time for the River Tyne'" msgstr "" @@ -189,7 +192,7 @@ msgstr "" msgid "1. Select an authority" msgstr "" -#: app/views/request/new.rhtml:26 +#: app/views/request/new.rhtml:34 msgid "2. Ask for Information" msgstr "" @@ -197,7 +200,7 @@ msgstr "" msgid "3. Now check your request" msgstr "" -#: app/views/public_body/show.rhtml:53 +#: app/views/public_body/show.rhtml:57 msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>" msgstr "" @@ -209,7 +212,7 @@ msgstr "" msgid "<a href=\"%s\">Are we missing a public authority?</a>." msgstr "" -#: app/views/request/_sidebar.rhtml:36 +#: app/views/request/_sidebar.rhtml:39 msgid "" "<a href=\"%s\">Are you the owner of\n" " any commercial copyright on this page?</a>" @@ -240,17 +243,19 @@ msgstr "" #: app/controllers/request_game_controller.rb:23 msgid "" -"<p>All done! Thank you very much for your help.</p><p>There are <a " -"href=\"{{helpus_url}}\">more things you can do</a> to help " -"{{site_name}}.</p>" +"<p>All done! Thank you very much for your help.</p><p>There are <a href=" +"\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>" msgstr "" #: app/controllers/request_controller.rb:398 msgid "" "<p>Thank you! Here are some ideas on what to do next:</p>\n" " <ul>\n" -" <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\n" -" <li>If you would like to contest the authority's claim that they do not hold the information, here is \n" +" <li>To send your request to another authority, first copy the " +"text of your request below, then <a href=\"{{find_authority_url}}\">find the " +"other authority</a>.</li>\n" +" <li>If you would like to contest the authority's claim that they " +"do not hold the information, here is \n" " <a href=\"{{complain_url}}\">how to complain</a>.\n" " </li>\n" " <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\n" @@ -262,13 +267,14 @@ msgstr "" #: app/controllers/request_controller.rb:392 msgid "" "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you " -"should have got a response promptly, and normally before the end of " -"<strong>{{date_response_required_by}}</strong>.</p>" +"should have got a response promptly, and normally before the end of <strong>" +"{{date_response_required_by}}</strong>.</p>" msgstr "" #: app/controllers/request_controller.rb:388 msgid "" -"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n" +"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should " +"get a response promptly, and normally before the end of <strong>\n" "{{date_response_required_by}}</strong>.</p>" msgstr "" @@ -297,28 +303,30 @@ msgstr "" #: app/controllers/user_controller.rb:513 msgid "" "<p>Thanks for changing the text about you on your profile.</p>\n" -" <p><strong>Next...</strong> You can upload a profile photograph too.</p>" +" <p><strong>Next...</strong> You can upload a profile photograph " +"too.</p>" msgstr "" #: app/controllers/user_controller.rb:435 msgid "" "<p>Thanks for updating your profile photo.</p>\n" -" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>" +" <p><strong>Next...</strong> You can put some text about you " +"and your research on your profile.</p>" msgstr "" #: app/controllers/request_controller.rb:283 msgid "" "<p>We recommend that you edit your request and remove the email address.\n" -" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>" +" If you leave it, the email address will be sent to the " +"authority, but will not be displayed on the site.</p>" msgstr "" #: app/controllers/request_controller.rb:416 msgid "" "<p>We're glad you got all the information that you wanted. If you write " -"about or make use of the information, please come back and add an annotation" -" below saying what you did.</p><p>If you found {{site_name}} useful, <a " -"href=\"{{donation_url}}\">make a donation</a> to the charity which runs " -"it.</p>" +"about or make use of the information, please come back and add an annotation " +"below saying what you did.</p><p>If you found {{site_name}} useful, <a href=" +"\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>" msgstr "" #: app/controllers/request_controller.rb:419 @@ -338,23 +346,26 @@ msgstr "" #: app/controllers/request_controller.rb:279 msgid "" "<p>You do not need to include your email in the request in order to get a " -"reply, as we will ask for it on the next screen (<a " -"href=\"%s\">details</a>).</p>" +"reply, as we will ask for it on the next screen (<a href=\"%s\">details</a>)." +"</p>" msgstr "" #: app/controllers/request_controller.rb:287 msgid "" "<p>Your request contains a <strong>postcode</strong>. Unless it directly " -"relates to the subject of your request, please remove any address as it will" -" <strong>appear publicly on the Internet</strong>.</p>" +"relates to the subject of your request, please remove any address as it will " +"<strong>appear publicly on the Internet</strong>.</p>" msgstr "" #: app/controllers/request_controller.rb:310 msgid "" -"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n" -" <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n" +"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!" +"</p>\n" +" <p><strong>We will email you</strong> when there is a response, " +"or after 20 working days if the authority still hasn't\n" " replied by then.</p>\n" -" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n" +" <p>If you write about this request (for example in a forum or a " +"blog) please link to this page, and add an \n" " annotation below telling people about your writing.</p>" msgstr "" @@ -367,12 +378,14 @@ msgstr "" #: app/views/user/confirm.rhtml:11 msgid "" -"<small>If you use web-based email or have \"junk mail\" filters, also check your\n" -"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n" +"<small>If you use web-based email or have \"junk mail\" filters, also check " +"your\n" +"bulk/spam mail folders. Sometimes, our messages are marked that way.</" +"small>\n" "</p>" msgstr "" -#: app/views/request/new.rhtml:124 +#: app/views/request/new.rhtml:133 msgid "" "<strong> Can I request information about myself?</strong>\n" "\t\t\t<a href=\"%s\">No! (Click here for details)</a>" @@ -380,8 +393,8 @@ msgstr "" #: app/views/general/search.rhtml:226 msgid "" -"<strong><code>commented_by:tony_bowden</code></strong> to search annotations" -" made by Tony Bowden, typing the name as in the URL." +"<strong><code>commented_by:tony_bowden</code></strong> to search annotations " +"made by Tony Bowden, typing the name as in the URL." msgstr "" #: app/views/general/search.rhtml:228 @@ -411,15 +424,18 @@ msgstr "" #: app/views/general/search.rhtml:222 msgid "" "<strong><code>status:</code></strong> to select based on the status or " -"historical status of the request, see the <a href=\"{{statuses_url}}\">table" -" of statuses</a> below." +"historical status of the request, see the <a href=\"{{statuses_url}}\">table " +"of statuses</a> below." msgstr "" #: app/views/general/search.rhtml:230 msgid "" -"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n" -" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n" -" can be present, you have to put <code>AND</code> explicitly if you only want results them all present." +"<strong><code>tag:charity</code></strong> to find all public bodies or " +"requests with a given tag. You can include multiple tags, \n" +" and tag values, e.g. <code>tag:openlylocal AND tag:" +"financial_transaction:335633</code>. Note that by default any of the tags\n" +" can be present, you have to put <code>AND</code> explicitly if you only " +"want results them all present." msgstr "" #: app/views/general/search.rhtml:223 @@ -439,17 +455,20 @@ msgid "<strong>All the information</strong> has been sent" msgstr "" #: app/views/request/_followup.rhtml:79 -msgid "" -"<strong>Anything else</strong>, such as clarifying, prompting, thanking" +msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking" msgstr "" #: app/views/request/details.rhtml:12 msgid "" -"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n" +"<strong>Caveat emptor!</strong> To use this data in an honourable way, you " +"will need \n" "a good internal knowledge of user behaviour on {{site_name}}. How, \n" -"why and by whom requests are categorised is not straightforward, and there will\n" -"be user error and ambiguity. You will also need to understand FOI law, and the\n" -"way authorities use it. Plus you'll need to be an elite statistician. Please\n" +"why and by whom requests are categorised is not straightforward, and there " +"will\n" +"be user error and ambiguity. You will also need to understand FOI law, and " +"the\n" +"way authorities use it. Plus you'll need to be an elite statistician. " +"Please\n" "<a href=\"{{contact_path}}\">contact us</a> with questions." msgstr "" @@ -478,13 +497,15 @@ msgstr "" #: app/views/request/preview.rhtml:31 msgid "" -"<strong>Privacy note:</strong> If you want to request private information about\n" +"<strong>Privacy note:</strong> If you want to request private information " +"about\n" " yourself then <a href=\"%s\">click here</a>." msgstr "" #: app/views/user/set_crop_profile_photo.rhtml:35 msgid "" -"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n" +"<strong>Privacy note:</strong> Your photo will be shown in public on the " +"Internet, \n" " wherever you do something on {{site_name}}." msgstr "" @@ -531,7 +552,7 @@ msgstr "" msgid "About you:" msgstr "" -#: app/views/request/_sidebar.rhtml:5 +#: app/views/request/_sidebar.rhtml:8 msgid "Act on what you've learnt" msgstr "" @@ -567,11 +588,11 @@ msgstr "" #: app/views/comment/new.rhtml:52 msgid "" -"Advise on whether the <strong>refusal is legal</strong>, and how to complain" -" about it if not." +"Advise on whether the <strong>refusal is legal</strong>, and how to complain " +"about it if not." msgstr "" -#: app/views/request/new.rhtml:59 +#: app/views/request/new.rhtml:67 msgid "" "Air, water, soil, land, flora and fauna (including how these effect\n" " human beings)" @@ -623,15 +644,16 @@ msgstr "" msgid "Anyone:" msgstr "" -#: app/views/request/new.rhtml:94 +#: app/views/request/new.rhtml:103 msgid "" -"Ask for <strong>specific</strong> documents or information, this site is not" -" suitable for general enquiries." +"Ask for <strong>specific</strong> documents or information, this site is not " +"suitable for general enquiries." msgstr "" #: app/views/request/show_response.rhtml:29 msgid "" -"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n" +"At the bottom of this page, write a reply to them trying to persuade them to " +"scan it in\n" " (<a href=\"%s\">more details</a>)." msgstr "" @@ -655,13 +677,13 @@ msgstr "" msgid "Beginning with" msgstr "" -#: app/views/request/new.rhtml:38 +#: app/views/request/new.rhtml:46 msgid "" -"Browse <a href='{{url}}'>other requests</a> for examples of how to word your" -" request." +"Browse <a href='{{url}}'>other requests</a> for examples of how to word your " +"request." msgstr "" -#: app/views/request/new.rhtml:36 +#: app/views/request/new.rhtml:44 msgid "" "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for " "examples of how to word your request." @@ -707,6 +729,10 @@ msgstr "" msgid "CensorRule|Text" msgstr "" +#: lib/public_body_categories_en.rb:14 +msgid "Central government" +msgstr "" + #: app/views/user/signchangeemail.rhtml:37 msgid "Change email on {{site_name}}" msgstr "" @@ -715,7 +741,7 @@ msgstr "" msgid "Change password on {{site_name}}" msgstr "" -#: app/views/user/show.rhtml:104 app/views/user/set_crop_profile_photo.rhtml:1 +#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104 msgid "Change profile photo" msgstr "" @@ -737,10 +763,10 @@ msgstr "" msgid "Change your password" msgstr "" -#: app/views/user/signchangepassword_send_confirm.rhtml:1 -#: app/views/user/signchangepassword_send_confirm.rhtml:9 #: app/views/user/signchangepassword.rhtml:1 #: app/views/user/signchangepassword.rhtml:11 +#: app/views/user/signchangepassword_send_confirm.rhtml:1 +#: app/views/user/signchangepassword_send_confirm.rhtml:9 msgid "Change your password on {{site_name}}" msgstr "" @@ -748,7 +774,7 @@ msgstr "" msgid "Change your password {{site_name}}" msgstr "" -#: app/views/public_body/show.rhtml:17 app/views/public_body/show.rhtml:19 +#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22 msgid "Charity registration" msgstr "" @@ -756,11 +782,15 @@ msgstr "" msgid "Check for mistakes if you typed or copied the address." msgstr "" -#: app/views/request/preview.rhtml:7 #: app/views/request/followup_preview.rhtml:14 +#: app/views/request/preview.rhtml:7 msgid "Check you haven't included any <strong>personal information</strong>." msgstr "" +#: lib/world_foi_websites.rb:29 +msgid "Chile" +msgstr "" + #: app/models/info_request_event.rb:316 msgid "Clarification" msgstr "" @@ -771,7 +801,8 @@ msgstr "" #: app/views/request_mailer/very_overdue_alert.rhtml:6 msgid "" -"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n" +"Click on the link below to send a message to {{public_body_name}} telling " +"them to reply to your request. You might like to ask for an internal\n" "review, asking them to find out why response to the request has been so slow." msgstr "" @@ -803,8 +834,8 @@ msgstr "" #: app/models/track_thing.rb:287 msgid "" -"Confirm you want to be emailed about new requests or responses matching your" -" search" +"Confirm you want to be emailed about new requests or responses matching your " +"search" msgstr "" #: app/models/track_thing.rb:271 @@ -812,8 +843,7 @@ msgid "Confirm you want to be emailed about requests by '{{user_name}}'" msgstr "" #: app/models/track_thing.rb:255 -msgid "" -"Confirm you want to be emailed about requests to '{{public_body_name}}'" +msgid "Confirm you want to be emailed about requests to '{{public_body_name}}'" msgstr "" #: app/models/track_thing.rb:236 @@ -849,7 +879,7 @@ msgstr "" msgid "Contact {{site_name}}" msgstr "" -#: app/models/request_mailer.rb:210 +#: app/models/request_mailer.rb:218 msgid "Could not identify the request from the email address" msgstr "" @@ -863,7 +893,7 @@ msgstr "" msgid "Crop your profile photo" msgstr "" -#: app/views/request/new.rhtml:64 +#: app/views/request/new.rhtml:72 msgid "" "Cultural sites and built structures (as they may be affected by the\n" " environmental factors listed above)" @@ -871,8 +901,8 @@ msgstr "" #: app/views/request/show.rhtml:68 msgid "" -"Currently <strong>waiting for a response</strong> from {{public_body_link}}," -" they must respond promptly and" +"Currently <strong>waiting for a response</strong> from {{public_body_link}}, " +"they must respond promptly and" msgstr "" #: app/models/outgoing_message.rb:63 @@ -933,8 +963,8 @@ msgstr "" #: app/models/user.rb:146 msgid "" -"Either the email or password was not recognised, please try again. Or create" -" a new account using the form on the right." +"Either the email or password was not recognised, please try again. Or create " +"a new account using the form on the right." msgstr "" #: app/models/contact_validator.rb:34 @@ -959,8 +989,8 @@ msgstr "" #: app/views/general/search.rhtml:219 msgid "" -"Enter words that you want to find separated by spaces, e.g. <strong>climbing" -" lane</strong>" +"Enter words that you want to find separated by spaces, e.g. <strong>climbing " +"lane</strong>" msgstr "" #: app/views/request/upload_response.rhtml:23 @@ -969,32 +999,37 @@ msgid "" "<a href=\"%s\">contact us</a> if you need more)." msgstr "" -#: app/views/public_body/show.rhtml:104 +#: app/views/public_body/show.rhtml:116 msgid "Environmental Information Regulations requests made" msgstr "" -#: app/views/public_body/show.rhtml:71 +#: app/views/public_body/show.rhtml:73 msgid "Environmental Information Regulations requests made using this site" msgstr "" +#: lib/world_foi_websites.rb:13 +msgid "European Union" +msgstr "" + #: app/views/request/details.rhtml:4 msgid "Event history" msgstr "" -#: app/views/request/_sidebar.rhtml:32 +#: app/views/request/_sidebar.rhtml:35 msgid "Event history details" msgstr "" -#: app/views/request/new.rhtml:117 +#: app/views/request/new.rhtml:126 msgid "" "Everything that you enter on this page \n" " will be <strong>displayed publicly</strong> on\n" " this website forever (<a href=\"%s\">why?</a>)." msgstr "" -#: app/views/request/new.rhtml:109 +#: app/views/request/new.rhtml:118 msgid "" -"Everything that you enter on this page, including <strong>your name</strong>, \n" +"Everything that you enter on this page, including <strong>your name</" +"strong>, \n" " will be <strong>displayed publicly</strong> on\n" " this website forever (<a href=\"%s\">why?</a>)." msgstr "" @@ -1037,21 +1072,38 @@ msgstr "" #: app/models/profile_photo.rb:105 msgid "" -"Failed to convert image to the correct size: at %{cols}x%{rows}, need " -"%{width}x%{height}" +"Failed to convert image to the correct size: at %{cols}x%{rows}, need %" +"{width}x%{height}" msgstr "" #: app/views/request/select_authority.rhtml:35 msgid "" "First, type in the <strong>name of the UK public authority</strong> you'd \n" -" <br>like information from. <strong>By law, they have to respond</strong>\n" +" <br>like information from. <strong>By law, they have to respond</" +"strong>\n" " (<a href=\"%s\">why?</a>)." msgstr "" +#: app/views/track/_tracking_links.rhtml:21 +msgid "Follow by email" +msgstr "" + +#: app/views/request/list.rhtml:8 +msgid "Follow these requests" +msgstr "" + +#: app/views/public_body/show.rhtml:4 +msgid "Follow this authority" +msgstr "" + #: app/views/request_mailer/old_unclassified_updated.rhtml:4 msgid "Follow this link to see the request:" msgstr "" +#: app/views/request/_sidebar.rhtml:2 +msgid "Follow this request" +msgstr "" + #: app/models/info_request_event.rb:320 msgid "Follow up" msgstr "" @@ -1067,15 +1119,15 @@ msgstr "" #: app/views/request/_followup.rhtml:16 msgid "" "Follow ups and new responses to this request have been stopped to prevent " -"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and" -" need to send a follow up." +"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and " +"need to send a follow up." msgstr "" #: app/views/layouts/default.rhtml:153 msgid "Follow us on twitter" msgstr "" -#: app/views/public_body/show.rhtml:62 +#: app/views/public_body/show.rhtml:66 msgid "" "For an unknown reason, it is not possible to make a request to this " "authority." @@ -1089,9 +1141,10 @@ msgstr "" msgid "Found {{count}} public bodies {{description}}" msgstr "" -#: app/views/public_body/show.rhtml:57 +#: app/views/public_body/show.rhtml:61 msgid "" -"Freedom of Information law does not apply to this authority, so you cannot make\n" +"Freedom of Information law does not apply to this authority, so you cannot " +"make\n" " a request to it." msgstr "" @@ -1105,7 +1158,7 @@ msgid "" "messages to existing requests are sent to " msgstr "" -#: app/views/public_body/show.rhtml:106 +#: app/views/public_body/show.rhtml:118 msgid "Freedom of Information requests made" msgstr "" @@ -1117,39 +1170,54 @@ msgstr "" msgid "Freedom of Information requests made by you" msgstr "" -#: app/views/public_body/show.rhtml:74 +#: app/views/public_body/show.rhtml:76 msgid "Freedom of Information requests made using this site" msgstr "" #: app/views/request/followup_bad.rhtml:12 msgid "" -"From the request page, try replying to a particular message, rather than sending\n" +"From the request page, try replying to a particular message, rather than " +"sending\n" " a general followup. If you need to make a general followup, and know\n" -" an email which will go to the right place, please <a href=\"%s\">send it to us</a>." +" an email which will go to the right place, please <a href=\"%s\">send it " +"to us</a>." msgstr "" #: app/models/outgoing_message.rb:74 msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE" msgstr "" +#: lib/world_foi_websites.rb:25 +msgid "Germany" +msgstr "" + #: app/models/info_request.rb:803 msgid "Handled by post." msgstr "" -#: app/views/layouts/default.rhtml:97 +#: app/controllers/services_controller.rb:21 +msgid "" +"Hello! You can make Freedom of Information requests within {{country_name}} " +"at {{link_to_website}}" +msgstr "" + +#: app/views/layouts/default.rhtml:98 msgid "Hello, {{username}}!" msgstr "" -#: app/views/layouts/default.rhtml:129 +#: app/views/layouts/default.rhtml:130 msgid "Help" msgstr "" #: app/views/request/details.rhtml:50 msgid "" -"Here <strong>described</strong> means when a user selected a status for the request, and\n" -"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n" +"Here <strong>described</strong> means when a user selected a status for the " +"request, and\n" +"the most recent event had its status updated to that value. " +"<strong>calculated</strong> is then inferred by\n" "{{site_name}} for intermediate events, which weren't given an explicit\n" -"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states." +"description by a user. See the <a href=\"{{search_path}}\">search tips</a> " +"for description of the states." msgstr "" #: app/views/request/_other_describe_state.rhtml:4 @@ -1168,21 +1236,21 @@ msgstr "" msgid "Holiday|Description" msgstr "" -#: app/views/layouts/default.rhtml:124 +#: app/views/layouts/default.rhtml:125 msgid "Home" msgstr "" -#: app/views/public_body/show.rhtml:9 +#: app/views/public_body/show.rhtml:12 msgid "Home page of authority" msgstr "" -#: app/views/request/new.rhtml:53 +#: app/views/request/new.rhtml:61 msgid "" "However, you have the right to request environmental\n" " information under a different law" msgstr "" -#: app/views/request/new.rhtml:63 +#: app/views/request/new.rhtml:71 msgid "Human health and safety" msgstr "" @@ -1238,13 +1306,14 @@ msgstr "" #: app/views/public_body/view_email.rhtml:28 msgid "" -"If the address is wrong, or you know a better address, please <a " -"href=\"%s\">contact us</a>." +"If the address is wrong, or you know a better address, please <a href=\"%s" +"\">contact us</a>." msgstr "" #: app/views/request_mailer/stopped_responses.rhtml:10 msgid "" -"If this is incorrect, or you would like to send a late response to the request\n" +"If this is incorrect, or you would like to send a late response to the " +"request\n" "or an email on another subject to {{user}}, then please\n" "email {{contact_email}} for help." msgstr "" @@ -1266,7 +1335,7 @@ msgid "" "the request." msgstr "" -#: app/views/request/new.rhtml:112 +#: app/views/request/new.rhtml:121 msgid "" "If you are thinking of using a pseudonym,\n" " please <a href=\"%s\">read this first</a>." @@ -1278,8 +1347,10 @@ msgstr "" #: app/views/user/bad_token.rhtml:7 msgid "" -"If you can't click on it in the email, you'll have to <strong>select and copy\n" -"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n" +"If you can't click on it in the email, you'll have to <strong>select and " +"copy\n" +"it</strong> from the email. Then <strong>paste it into your browser</" +"strong>, into the place\n" "you would type the address of any other webpage." msgstr "" @@ -1297,19 +1368,20 @@ msgstr "" #: app/views/user/bad_token.rhtml:13 msgid "" -"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n" +"If you got the email <strong>more than six months ago</strong>, then this " +"login link won't work any\n" "more. Please try doing what you were doing from the beginning." msgstr "" #: app/controllers/request_controller.rb:436 msgid "" "If you have not done so already, please write a message below telling the " -"authority that you have withdrawn your request. Otherwise they will not know" -" it has been withdrawn." +"authority that you have withdrawn your request. Otherwise they will not know " +"it has been withdrawn." msgstr "" -#: app/views/user/signchangepassword_confirm.rhtml:10 #: app/views/user/signchangeemail_confirm.rhtml:11 +#: app/views/user/signchangepassword_confirm.rhtml:10 msgid "" "If you use web-based email or have \"junk mail\" filters, also check your\n" "bulk/spam mail folders. Sometimes, our messages are marked that way." @@ -1411,7 +1483,7 @@ msgstr "" msgid "Information not held." msgstr "" -#: app/views/request/new.rhtml:61 +#: app/views/request/new.rhtml:69 msgid "" "Information on emissions and discharges (e.g. noise, energy,\n" " radiation, waste materials)" @@ -1429,8 +1501,10 @@ msgstr "" #: app/views/user/no_cookies.rhtml:8 msgid "" -"It may be that your browser is not set to accept a thing called \"cookies\",\n" -"or cannot do so. If you can, please enable cookies, or try using a different\n" +"It may be that your browser is not set to accept a thing called \"cookies" +"\",\n" +"or cannot do so. If you can, please enable cookies, or try using a " +"different\n" "browser. Then press refresh to have another go." msgstr "" @@ -1442,16 +1516,20 @@ msgstr "" msgid "Joined {{site_name}} in" msgstr "" -#: app/views/request/new.rhtml:95 +#: app/views/request/new.rhtml:104 msgid "" -"Keep it <strong>focused</strong>, you'll be more likely to get what you want" -" (<a href=\"%s\">why?</a>)." +"Keep it <strong>focused</strong>, you'll be more likely to get what you want " +"(<a href=\"%s\">why?</a>)." msgstr "" -#: app/views/request/_request_filter_form.rhtml:25 +#: app/views/request/_request_filter_form.rhtml:6 msgid "Keywords" msgstr "" +#: lib/world_foi_websites.rb:9 +msgid "Kosovo" +msgstr "" + #: app/views/contact_mailer/message.rhtml:10 msgid "Last authority viewed: " msgstr "" @@ -1475,20 +1553,25 @@ msgstr "" msgid "List of all authorities (CSV)" msgstr "" +#: lib/public_body_categories_en.rb:23 +msgid "Local and regional" +msgstr "" + #: app/models/info_request.rb:791 msgid "Long overdue." msgstr "" -#: app/views/request/_request_filter_form.rhtml:42 +#: app/views/request/_request_filter_form.rhtml:23 msgid "Made between" msgstr "" -#: app/views/public_body/show.rhtml:49 +#: app/views/public_body/show.rhtml:53 msgid "Make a new <strong>Environmental Information</strong> request" msgstr "" -#: app/views/public_body/show.rhtml:51 -msgid "Make a new <strong>Freedom of Information</strong> request" +#: app/views/public_body/show.rhtml:55 +msgid "" +"Make a new <strong>Freedom of Information</strong> request to {{public_body}}" msgstr "" #: app/views/general/frontpage.rhtml:5 @@ -1499,11 +1582,11 @@ msgid "" " request</strong>" msgstr "" -#: app/views/layouts/default.rhtml:125 +#: app/views/layouts/default.rhtml:126 msgid "Make a request" msgstr "" -#: app/views/request/new.rhtml:12 +#: app/views/request/new.rhtml:20 msgid "Make an {{law_used_short}} request to '{{public_body_name}}'" msgstr "" @@ -1523,7 +1606,7 @@ msgstr "" msgid "Missing contact details for '" msgstr "" -#: app/views/public_body/show.rhtml:7 +#: app/views/public_body/show.rhtml:10 msgid "More about this authority" msgstr "" @@ -1531,7 +1614,7 @@ msgstr "" msgid "More successful requests..." msgstr "" -#: app/views/layouts/default.rhtml:100 +#: app/views/layouts/default.rhtml:101 msgid "My profile" msgstr "" @@ -1551,6 +1634,10 @@ msgstr "" msgid "New Freedom of Information requests" msgstr "" +#: lib/world_foi_websites.rb:21 +msgid "New Zealand" +msgstr "" + #: app/views/user/signchangeemail.rhtml:20 msgid "New e-mail:" msgstr "" @@ -1607,14 +1694,14 @@ msgstr "" msgid "No similar requests found." msgstr "" -#: app/views/public_body/show.rhtml:75 +#: app/views/public_body/show.rhtml:77 msgid "" "Nobody has made any Freedom of Information requests to {{public_body_name}} " "using this site yet." msgstr "" -#: app/views/request/_request_listing.rhtml:2 #: app/views/public_body/_body_listing.rhtml:3 +#: app/views/request/_request_listing.rhtml:2 msgid "None found." msgstr "" @@ -1622,9 +1709,9 @@ msgstr "" msgid "None made." msgstr "" +#: app/views/user/signchangeemail_confirm.rhtml:3 #: app/views/user/signchangepassword_confirm.rhtml:1 #: app/views/user/signchangepassword_confirm.rhtml:3 -#: app/views/user/signchangeemail_confirm.rhtml:3 msgid "Now check your email!" msgstr "" @@ -1679,7 +1766,7 @@ msgstr "" msgid "One public authority found" msgstr "" -#: app/views/public_body/show.rhtml:98 +#: app/views/public_body/show.rhtml:111 msgid "Only requests made using {{site_name}} are shown." msgstr "" @@ -1695,6 +1782,10 @@ msgid "" "address to check against" msgstr "" +#: app/views/request/_search_ahead.rhtml:10 +msgid "Or search in their website for this information." +msgstr "" + #: app/views/general/search.rhtml:254 msgid "Original request sent" msgstr "" @@ -1731,7 +1822,7 @@ msgstr "" msgid "Password is not correct" msgstr "" -#: app/views/user/_signup.rhtml:30 app/views/user/_signin.rhtml:16 +#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30 msgid "Password:" msgstr "" @@ -1747,7 +1838,7 @@ msgstr "" msgid "Photo of you:" msgstr "" -#: app/views/request/new.rhtml:66 +#: app/views/request/new.rhtml:74 msgid "Plans and administrative measures that affect these matters" msgstr "" @@ -1786,7 +1877,7 @@ msgid "" "new request</a>." msgstr "" -#: app/views/request/new.rhtml:50 +#: app/views/request/new.rhtml:58 msgid "Please ask for environmental information only" msgstr "" @@ -1806,8 +1897,7 @@ msgstr "" #: app/controllers/request_controller.rb:345 msgid "" -"Please choose whether or not you got some of the information that you " -"wanted." +"Please choose whether or not you got some of the information that you wanted." msgstr "" #: app/views/track_mailer/event_digest.rhtml:63 @@ -1869,7 +1959,7 @@ msgstr "" msgid "Please enter your annotation" msgstr "" -#: app/models/user.rb:34 app/models/contact_validator.rb:29 +#: app/models/contact_validator.rb:29 app/models/user.rb:34 msgid "Please enter your email address" msgstr "" @@ -1881,7 +1971,7 @@ msgstr "" msgid "Please enter your letter requesting information" msgstr "" -#: app/models/user.rb:36 app/models/contact_validator.rb:28 +#: app/models/contact_validator.rb:28 app/models/user.rb:36 msgid "Please enter your name" msgstr "" @@ -1915,15 +2005,18 @@ msgid "" "a phrase, rather than a full sentence." msgstr "" -#: app/views/request/new.rhtml:69 +#: app/views/request/new.rhtml:77 msgid "" -"Please only request information that comes under those categories, <strong>do not waste your\n" -" time</strong> or the time of the public authority by requesting unrelated information." +"Please only request information that comes under those categories, " +"<strong>do not waste your\n" +" time</strong> or the time of the public authority by requesting " +"unrelated information." msgstr "" #: app/views/request/new_please_describe.rhtml:5 msgid "" -"Please select each of these requests in turn, and <strong>let everyone know</strong>\n" +"Please select each of these requests in turn, and <strong>let everyone know</" +"strong>\n" "if they are successful yet or not." msgstr "" @@ -1974,17 +2067,17 @@ msgstr "" #: app/models/outgoing_message.rb:160 msgid "" -"Please write your message using a mixture of capital and lower case letters." -" This makes it easier for others to read." +"Please write your message using a mixture of capital and lower case letters. " +"This makes it easier for others to read." msgstr "" #: app/views/comment/new.rhtml:41 msgid "" -"Point to <strong>related information</strong>, campaigns or forums which may" -" be useful." +"Point to <strong>related information</strong>, campaigns or forums which may " +"be useful." msgstr "" -#: app/views/request/_search_ahead.rhtml:4 +#: app/views/request/_search_ahead.rhtml:3 msgid "Possibly related requests:" msgstr "" @@ -2040,7 +2133,7 @@ msgstr "" msgid "Preview your message" msgstr "" -#: app/views/request/new.rhtml:132 +#: app/views/request/new.rhtml:141 msgid "Preview your public request" msgstr "" @@ -2108,15 +2201,15 @@ msgstr "" msgid "PublicBody|Version" msgstr "" -#: app/views/public_body/show.rhtml:12 +#: app/views/public_body/show.rhtml:15 msgid "Publication scheme" msgstr "" -#: app/views/track/_tracking_links.rhtml:27 +#: app/views/track/_tracking_links.rhtml:26 msgid "RSS feed" msgstr "" -#: app/views/track/_tracking_links.rhtml:27 +#: app/views/track/_tracking_links.rhtml:26 msgid "RSS feed of updates" msgstr "" @@ -2130,11 +2223,11 @@ msgstr "" #: app/views/general/search.rhtml:233 msgid "" -"Read about <a href=\"{{advanced_search_url}}\">advanced search " -"operators</a>, such as proximity and wildcards." +"Read about <a href=\"{{advanced_search_url}}\">advanced search operators</" +"a>, such as proximity and wildcards." msgstr "" -#: app/views/layouts/default.rhtml:128 +#: app/views/layouts/default.rhtml:129 msgid "Read blog" msgstr "" @@ -2252,12 +2345,11 @@ msgstr "" msgid "Save" msgstr "" -#: app/views/request/_request_filter_form.rhtml:49 -#: app/views/request/select_authority.rhtml:41 -#: app/views/public_body/list.rhtml:42 #: app/views/general/exception_caught.rhtml:12 #: app/views/general/frontpage.rhtml:24 app/views/general/search.rhtml:32 -#: app/views/general/search.rhtml:45 +#: app/views/general/search.rhtml:45 app/views/public_body/list.rhtml:42 +#: app/views/request/_request_filter_form.rhtml:49 +#: app/views/request/select_authority.rhtml:41 msgid "Search" msgstr "" @@ -2269,7 +2361,7 @@ msgstr "" msgid "Search contributions by this person" msgstr "" -#: app/views/request/_request_filter_form.rhtml:30 +#: app/views/request/_request_filter_form.rhtml:11 msgid "Search for words in:" msgstr "" @@ -2280,7 +2372,8 @@ msgstr "" #: app/views/general/frontpage.rhtml:15 msgid "" "Search over<br/>\n" -" <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n" +" <strong>{{number_of_requests}} requests</strong> <span>and</" +"span><br/>\n" " <strong>{{number_of_authorities}} authorities</strong>" msgstr "" @@ -2288,6 +2381,12 @@ msgstr "" msgid "Search the site to find what you were looking for." msgstr "" +#: app/views/public_body/show.rhtml:86 +msgid "Search within the %d Freedom of Information requests to %s" +msgid_plural "Search within the %d Freedom of Information requests made to %s" +msgstr[0] "" +msgstr[1] "" + #: app/views/user/show.rhtml:123 msgid "Search your contributions" msgstr "" @@ -2344,7 +2443,6 @@ msgstr "" msgid "Show only..." msgstr "" -#: app/views/request/_request_filter_form.rhtml:5 #: app/views/general/search.rhtml:52 msgid "Showing" msgstr "" @@ -2357,11 +2455,11 @@ msgstr "" msgid "Sign in or make a new account" msgstr "" -#: app/views/layouts/default.rhtml:106 +#: app/views/layouts/default.rhtml:107 msgid "Sign in or sign up" msgstr "" -#: app/views/layouts/default.rhtml:104 +#: app/views/layouts/default.rhtml:105 msgid "Sign out" msgstr "" @@ -2369,7 +2467,7 @@ msgstr "" msgid "Sign up" msgstr "" -#: app/views/request/_sidebar.rhtml:21 +#: app/views/request/_sidebar.rhtml:24 msgid "Similar requests" msgstr "" @@ -2385,7 +2483,8 @@ msgstr "" msgid "" "Some people who've made requests haven't let us know whether they were\n" "successful or not. We need <strong>your</strong> help –\n" -"choose one of these requests, read it, and let everyone know whether or not the\n" +"choose one of these requests, read it, and let everyone know whether or not " +"the\n" "information has been provided. Everyone'll be exceedingly grateful." msgstr "" @@ -2395,6 +2494,10 @@ msgid "" "{{site_name}} from {{old_email}} to {{new_email}}." msgstr "" +#: app/views/user/wrong_user.rhtml:2 +msgid "Sorry, but only {{user_name}} is allowed to do that." +msgstr "" + #: app/views/general/exception_caught.rhtml:17 msgid "Sorry, there was a problem processing this page" msgstr "" @@ -2403,11 +2506,11 @@ msgstr "" msgid "Sorry, we couldn't find that page" msgstr "" -#: app/views/request/new.rhtml:45 +#: app/views/request/new.rhtml:53 msgid "Special note for this authority!" msgstr "" -#: app/views/public_body/show.rhtml:53 +#: app/views/public_body/show.rhtml:57 msgid "Start" msgstr "" @@ -2415,7 +2518,7 @@ msgstr "" msgid "Start now »" msgstr "" -#: app/views/request/_sidebar.rhtml:14 +#: app/views/request/_sidebar.rhtml:17 msgid "Start your own blog" msgstr "" @@ -2423,8 +2526,8 @@ msgstr "" msgid "Still awaiting an <strong>internal review</strong>" msgstr "" -#: app/views/request/preview.rhtml:18 #: app/views/request/followup_preview.rhtml:23 +#: app/views/request/preview.rhtml:18 msgid "Subject:" msgstr "" @@ -2446,11 +2549,11 @@ msgstr "" #: app/views/comment/new.rhtml:38 msgid "" -"Suggest how the requester can find the <strong>rest of the " -"information</strong>." +"Suggest how the requester can find the <strong>rest of the information</" +"strong>." msgstr "" -#: app/views/request/new.rhtml:75 +#: app/views/request/new.rhtml:83 msgid "Summary:" msgstr "" @@ -2490,9 +2593,9 @@ msgstr "" #: app/controllers/request_controller.rb:377 msgid "" -"Thank you for updating the status of the request '<a " -"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests " -"below for you to classify." +"Thank you for updating the status of the request '<a href=\"{{url}}\">" +"{{info_request_title}}</a>'. There are some more requests below for you to " +"classify." msgstr "" #: app/controllers/request_controller.rb:380 @@ -2506,7 +2609,8 @@ msgstr "" #: app/views/request_game/play.rhtml:42 msgid "" -"Thanks for helping - your work will make it easier for everyone to find successful\n" +"Thanks for helping - your work will make it easier for everyone to find " +"successful\n" "responses, and maybe even let us make league tables..." msgstr "" @@ -2519,23 +2623,25 @@ msgstr "" #: app/views/request/new_please_describe.rhtml:20 msgid "" -"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n" -" We'll also, if you need it, give you advice on what to do next about each of your\n" +"Thanks very much for helping keep everything <strong>neat and organised</" +"strong>.\n" +" We'll also, if you need it, give you advice on what to do next about " +"each of your\n" " requests." msgstr "" #: app/controllers/user_controller.rb:207 msgid "" -"That doesn't look like a valid email address. Please check you have typed it" -" correctly." +"That doesn't look like a valid email address. Please check you have typed it " +"correctly." msgstr "" -#: app/views/request/_other_describe_state.rhtml:43 #: app/views/request/_describe_state.rhtml:47 +#: app/views/request/_other_describe_state.rhtml:43 msgid "The <strong>review has finished</strong> and overall:" msgstr "" -#: app/views/request/new.rhtml:52 +#: app/views/request/new.rhtml:60 msgid "The Freedom of Information Act <strong>does not apply</strong> to" msgstr "" @@ -2557,13 +2663,14 @@ msgstr "" #: app/views/request/show_response.rhtml:18 msgid "" "The authority say that they <strong>need a postal\n" -" address</strong>, not just an email, for it to be a valid FOI request" +" address</strong>, not just an email, for it to be a valid FOI " +"request" msgstr "" #: app/views/request/show.rhtml:109 msgid "" -"The authority would like to / has <strong>responded by post</strong> to this" -" request." +"The authority would like to / has <strong>responded by post</strong> to this " +"request." msgstr "" #: app/views/request_mailer/stopped_responses.rhtml:1 @@ -2622,7 +2729,8 @@ msgstr "" #: app/views/request/hidden.rhtml:9 msgid "" "The request you have tried to view has been removed. There are\n" -"various reasons why we might have done this, sorry we can't be more specific here. Please <a\n" +"various reasons why we might have done this, sorry we can't be more specific " +"here. Please <a\n" " href=\"%s\">contact us</a> if you have any questions." msgstr "" @@ -2632,19 +2740,22 @@ msgstr "" #: app/views/request/_followup.rhtml:32 msgid "" -"The response to your request has been <strong>delayed</strong>. You can say that, \n" +"The response to your request has been <strong>delayed</strong>. You can say " +"that, \n" " by law, the authority should normally have responded\n" " <strong>promptly</strong> and" msgstr "" #: app/views/request/_followup.rhtml:44 msgid "" -"The response to your request is <strong>long overdue</strong>. You can say that, by \n" -" law, under all circumstances, the authority should have responded\n" +"The response to your request is <strong>long overdue</strong>. You can say " +"that, by \n" +" law, under all circumstances, the authority should have " +"responded\n" " by now" msgstr "" -#: app/views/public_body/show.rhtml:108 +#: app/views/public_body/show.rhtml:120 msgid "" "The search index is currently offline, so we can't show the Freedom of " "Information requests that have been made to this authority." @@ -2706,8 +2817,8 @@ msgstr "" #: app/models/track_thing.rb:270 msgid "" -"Then you will be emailed whenever '{{user_name}}' requests something or gets" -" a response." +"Then you will be emailed whenever '{{user_name}}' requests something or gets " +"a response." msgstr "" #: app/models/track_thing.rb:286 @@ -2732,8 +2843,7 @@ msgstr "" #: app/models/track_thing.rb:203 msgid "" -"Then you will be emailed whenever the request '{{request_title}}' is " -"updated." +"Then you will be emailed whenever the request '{{request_title}}' is updated." msgstr "" #: app/controllers/request_controller.rb:30 @@ -2750,13 +2860,26 @@ msgstr "" #: app/views/request_mailer/comment_on_alert_plural.rhtml:1 msgid "" -"There are {{count}} new annotations on your {{info_request}} request. Follow" -" this link to see what they wrote." +"There are {{count}} new annotations on your {{info_request}} request. Follow " +"this link to see what they wrote." msgstr "" +#: app/views/public_body/show.rhtml:7 +msgid "There is %d person following this authority" +msgid_plural "There are %d people following this authority" +msgstr[0] "" +msgstr[1] "" + +#: app/views/request/_sidebar.rhtml:5 +msgid "There is %d person following this request" +msgid_plural "There are %d people following this request" +msgstr[0] "" +msgstr[1] "" + #: app/views/user/show.rhtml:4 msgid "" -"There is <strong>more than one person</strong> who uses this site and has this name. \n" +"There is <strong>more than one person</strong> who uses this site and has " +"this name. \n" " One of them is shown below, you may mean a different one:" msgstr "" @@ -2766,12 +2889,12 @@ msgid "" "by the {{site_name}} team." msgstr "" -#: app/controllers/user_controller.rb:140 #: app/controllers/public_body_controller.rb:81 +#: app/controllers/user_controller.rb:140 msgid "There was an error with the words you entered, please try again." msgstr "" -#: app/views/public_body/show.rhtml:96 app/views/general/search.rhtml:10 +#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109 msgid "There were no requests matching your query." msgstr "" @@ -2781,8 +2904,8 @@ msgstr "" #: app/views/request/_describe_state.rhtml:52 msgid "" -"They do <strong>not have</strong> the information <small>(maybe they say who" -" does)</small>" +"They do <strong>not have</strong> the information <small>(maybe they say who " +"does)</small>" msgstr "" #: app/views/user/show.rhtml:83 @@ -2791,8 +2914,8 @@ msgstr "" #: app/views/request_mailer/overdue_alert.rhtml:3 msgid "" -"They have not replied to your {{law_used_short}} request {{title}} promptly," -" as normally required by law" +"They have not replied to your {{law_used_short}} request {{title}} promptly, " +"as normally required by law" msgstr "" #: app/views/request_mailer/very_overdue_alert.rhtml:3 @@ -2805,17 +2928,18 @@ msgstr "" msgid "Things to do with this request" msgstr "" -#: app/views/public_body/show.rhtml:60 +#: app/views/public_body/show.rhtml:64 msgid "This authority no longer exists, so you cannot make a request to it." msgstr "" #: app/views/request/_hidden_correspondence.rhtml:23 msgid "" "This comment has been hidden. See annotations to\n" -" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response." +" find out why. If you are the requester, then you may <a href=\"%" +"s\">sign in</a> to view the response." msgstr "" -#: app/views/request/new.rhtml:55 +#: app/views/request/new.rhtml:63 msgid "" "This covers a very wide spectrum of information about the state of\n" " the <strong>natural and built environment</strong>, such as:" @@ -2833,7 +2957,7 @@ msgid "" "marked to no longer receive responses." msgstr "" -#: app/views/track/_tracking_links.rhtml:9 +#: app/views/track/_tracking_links.rhtml:8 msgid "" "This is your own request, so you will be automatically emailed when new " "responses arrive." @@ -2842,11 +2966,12 @@ msgstr "" #: app/views/request/_hidden_correspondence.rhtml:17 msgid "" "This outgoing message has been hidden. See annotations to\n" -"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response." +"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%" +"s\">sign in</a> to view the response." msgstr "" -#: app/views/request/_other_describe_state.rhtml:40 #: app/views/request/_describe_state.rhtml:44 +#: app/views/request/_other_describe_state.rhtml:40 msgid "This particular request is finished:" msgstr "" @@ -2881,7 +3006,8 @@ msgstr "" #: app/views/request/show.rhtml:117 msgid "" -"This request has been <strong>withdrawn</strong> by the person who made it. \n" +"This request has been <strong>withdrawn</strong> by the person who made " +"it. \n" " \t There may be an explanation in the correspondence below." msgstr "" @@ -2893,13 +3019,14 @@ msgstr "" #: app/views/request/show.rhtml:115 msgid "" -"This request has had an unusual response, and <strong>requires " -"attention</strong> from the {{site_name}} team." +"This request has had an unusual response, and <strong>requires attention</" +"strong> from the {{site_name}} team." msgstr "" #: app/views/request/show.rhtml:5 msgid "" -"This request has prominence 'hidden'. You can only see it because you are logged\n" +"This request has prominence 'hidden'. You can only see it because you are " +"logged\n" " in as a super user." msgstr "" @@ -2909,22 +3036,25 @@ msgid "" " <a href=\"%s\">contact us</a> if you are not sure why." msgstr "" -#: app/views/request/_other_describe_state.rhtml:10 #: app/views/request/_describe_state.rhtml:7 +#: app/views/request/_other_describe_state.rhtml:10 msgid "This request is still in progress:" msgstr "" #: app/views/request/_hidden_correspondence.rhtml:10 msgid "" "This response has been hidden. See annotations to find out why.\n" -" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response." +" If you are the requester, then you may <a href=\"%s\">sign in</" +"a> to view the response." msgstr "" #: app/views/request/details.rhtml:6 msgid "" "This table shows the technical details of the internal events that happened\n" -"to this request on {{site_name}}. This could be used to generate information about\n" -"the speed with which authorities respond to requests, the number of requests\n" +"to this request on {{site_name}}. This could be used to generate information " +"about\n" +"the speed with which authorities respond to requests, the number of " +"requests\n" "which require a postal response and much more." msgstr "" @@ -2997,7 +3127,9 @@ msgstr "" #: app/views/request_mailer/old_unclassified_updated.rhtml:1 msgid "" "To help us keep the site tidy, someone else has updated the status of the \n" -"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate." +"{{law_used_full}} request {{title}} that you made to {{public_body}}, to " +"\"{{display_status}}\" If you disagree with their categorisation, please " +"update the status again yourself to what you believe to be more accurate." msgstr "" #: app/views/request_mailer/new_response_reminder_alert.rhtml:1 @@ -3058,8 +3190,8 @@ msgstr "" msgid "To {{public_body_link_absolute}}" msgstr "" -#: app/views/request/preview.rhtml:17 app/views/request/new.rhtml:32 -#: app/views/request/followup_preview.rhtml:22 +#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40 +#: app/views/request/preview.rhtml:17 msgid "To:" msgstr "" @@ -3071,26 +3203,14 @@ msgstr "" msgid "Top search results:" msgstr "" -#: app/views/track/_tracking_links.rhtml:22 -msgid "Track by email" -msgstr "" - #: app/models/track_thing.rb:247 msgid "Track requests to {{public_body_name}} by email" msgstr "" -#: app/views/request/list.rhtml:8 -msgid "Track these requests" -msgstr "" - #: app/models/track_thing.rb:279 msgid "Track things matching this search by email" msgstr "" -#: app/views/public_body/show.rhtml:5 -msgid "Track this authority" -msgstr "" - #: app/views/user/show.rhtml:29 msgid "Track this person" msgstr "" @@ -3099,10 +3219,6 @@ msgstr "" msgid "Track this person by email" msgstr "" -#: app/views/request/_sidebar.rhtml:2 -msgid "Track this request" -msgstr "" - #: app/models/track_thing.rb:196 msgid "Track this request by email" msgstr "" @@ -3119,7 +3235,7 @@ msgstr "" msgid "TrackThing|Track type" msgstr "" -#: app/views/request/_sidebar.rhtml:10 +#: app/views/request/_sidebar.rhtml:13 msgid "Tweet this request" msgstr "" @@ -3166,6 +3282,14 @@ msgid "" "address for" msgstr "" +#: lib/world_foi_websites.rb:5 +msgid "United Kingdom" +msgstr "" + +#: lib/world_foi_websites.rb:17 +msgid "United States of America" +msgstr "" + #: app/views/general/exception_caught.rhtml:22 msgid "Unknown" msgstr "" @@ -3191,8 +3315,8 @@ msgstr "" #: app/views/general/search.rhtml:221 msgid "" -"Use quotes when you want to find an exact phrase, e.g. " -"<strong><code>\"Liverpool City Council\"</code></strong>" +"Use quotes when you want to find an exact phrase, e.g. <strong><code>" +"\"Liverpool City Council\"</code></strong>" msgstr "" #: locale/model_attributes.rb:65 @@ -3243,7 +3367,7 @@ msgstr "" msgid "User|Url name" msgstr "" -#: app/views/public_body/show.rhtml:23 +#: app/views/public_body/show.rhtml:26 msgid "View FOI email address" msgstr "" @@ -3263,7 +3387,7 @@ msgstr "" msgid "View and search requests" msgstr "" -#: app/views/layouts/default.rhtml:127 +#: app/views/layouts/default.rhtml:128 msgid "View authorities" msgstr "" @@ -3271,7 +3395,7 @@ msgstr "" msgid "View email" msgstr "" -#: app/views/layouts/default.rhtml:126 +#: app/views/layouts/default.rhtml:127 msgid "View requests" msgstr "" @@ -3309,7 +3433,8 @@ msgid "" "We don't know whether the most recent response to this request contains\n" " information or not\n" " –\n" -"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know." +"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let " +"everyone know." msgstr "" #: app/views/user_mailer/confirm_login.rhtml:8 @@ -3340,13 +3465,15 @@ msgstr "" #: app/views/user/signchangeemail_confirm.rhtml:6 msgid "" -"We've sent an email to your new email address. You'll need to click the link in\n" +"We've sent an email to your new email address. You'll need to click the link " +"in\n" "it before your email address will be changed." msgstr "" #: app/views/user/confirm.rhtml:6 msgid "" -"We've sent you an email, and you'll need to click the link in it before you can\n" +"We've sent you an email, and you'll need to click the link in it before you " +"can\n" "continue." msgstr "" @@ -3402,6 +3529,10 @@ msgstr "" msgid "Wk" msgstr "" +#: app/views/help/alaveteli.rhtml:6 +msgid "Would you like to see a website like this in your country?" +msgstr "" + #: app/controllers/request_controller.rb:548 msgid "Write a reply to " msgstr "" @@ -3410,7 +3541,7 @@ msgstr "" msgid "Write your FOI follow up message to " msgstr "" -#: app/views/request/new.rhtml:93 +#: app/views/request/new.rhtml:102 msgid "Write your request in <strong>simple, precise language</strong>." msgstr "" @@ -3453,10 +3584,11 @@ msgstr "" #: app/views/request/details.rhtml:58 msgid "" "You can get this page in computer-readable format as part of the main JSON\n" -"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>." +"page for the request. See the <a href=\"{{api_path}}\">API documentation</" +"a>." msgstr "" -#: app/views/public_body/show.rhtml:43 +#: app/views/public_body/show.rhtml:47 msgid "" "You can only request information about the environment from this authority." msgstr "" @@ -3494,8 +3626,8 @@ msgstr "" #: app/views/comment/new.rhtml:59 msgid "" -"You know what caused the error, and can <strong>suggest a solution</strong>," -" such as a working email address." +"You know what caused the error, and can <strong>suggest a solution</strong>, " +"such as a working email address." msgstr "" #: app/views/request/upload_response.rhtml:16 @@ -3531,14 +3663,15 @@ msgid "You need to be logged in to clear your profile photo." msgstr "" #: app/controllers/request_controller.rb:558 -msgid "" -"You previously submitted that exact follow up message for this request." +msgid "You previously submitted that exact follow up message for this request." msgstr "" #: app/views/request/upload_response.rhtml:13 msgid "" -"You should have received a copy of the request by email, and you can respond\n" -"by <strong>simply replying</strong> to that email. For your convenience, here is the address:" +"You should have received a copy of the request by email, and you can " +"respond\n" +"by <strong>simply replying</strong> to that email. For your convenience, " +"here is the address:" msgstr "" #: app/views/request/show_response.rhtml:34 @@ -3549,8 +3682,10 @@ msgstr "" #: app/views/user/banned.rhtml:9 msgid "" -"You will be unable to make new requests, send follow ups, add annotations or\n" -"send messages to other users. You may continue to view other requests, and set\n" +"You will be unable to make new requests, send follow ups, add annotations " +"or\n" +"send messages to other users. You may continue to view other requests, and " +"set\n" "up\n" "email alerts." msgstr "" @@ -3604,12 +3739,13 @@ msgstr "" #: app/views/contact_mailer/user_message.rhtml:3 msgid "" -"Your details have not been given to anyone, unless you choose to reply to this\n" +"Your details have not been given to anyone, unless you choose to reply to " +"this\n" "message, which will then go directly to the person who wrote the message." msgstr "" +#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9 #: app/views/user/signchangepassword_send_confirm.rhtml:13 -#: app/views/user/_signup.rhtml:9 app/views/user/_signin.rhtml:11 msgid "Your e-mail:" msgstr "" @@ -3653,7 +3789,8 @@ msgstr "" #: app/views/request/preview.rhtml:8 msgid "" -"Your name, request and any responses will appear in <strong>search engines</strong>\n" +"Your name, request and any responses will appear in <strong>search engines</" +"strong>\n" " (<a href=\"%s\">details</a>)." msgstr "" @@ -3685,14 +3822,14 @@ msgid "" "got the information will help us keep tabs on" msgstr "" -#: app/views/request/new.rhtml:102 +#: app/views/request/new.rhtml:111 msgid "Your request:" msgstr "" #: app/views/request/upload_response.rhtml:8 msgid "" -"Your response will <strong>appear on the Internet</strong>, <a " -"href=\"%s\">read why</a> and answers to other questions." +"Your response will <strong>appear on the Internet</strong>, <a href=\"%s" +"\">read why</a> and answers to other questions." msgstr "" #: app/views/comment/new.rhtml:62 @@ -3713,32 +3850,28 @@ msgstr "" msgid "Yours sincerely," msgstr "" -#: app/views/request/new.rhtml:79 +#: app/views/request/new.rhtml:87 msgid "" "a one line summary of the information you are requesting, \n" "\t\t\te.g." msgstr "" -#: app/views/public_body/show.rhtml:34 +#: app/views/public_body/show.rhtml:38 msgid "admin" msgstr "" -#: app/views/request/_request_filter_form.rhtml:6 +#: app/views/request/_request_filter_form.rhtml:30 msgid "all requests" msgstr "" -#: app/views/public_body/show.rhtml:32 +#: app/views/public_body/show.rhtml:36 msgid "also called {{public_body_short_name}}" msgstr "" -#: app/views/request/_request_filter_form.rhtml:44 +#: app/views/request/_request_filter_form.rhtml:25 msgid "and" msgstr "" -#: app/views/user/wrong_user.rhtml:5 -msgid "and sign in as " -msgstr "" - #: app/views/request/show.rhtml:59 msgid "" "and update the status accordingly. Perhaps <strong>you</strong> might like " @@ -3753,6 +3886,10 @@ msgstr "" msgid "and we'll suggest <strong>what to do next</strong>" msgstr "" +#: app/views/general/frontpage.rhtml:61 +msgid "answered a request about" +msgstr "" + #: app/models/track_thing.rb:211 msgid "any <a href=\"/list\">new requests</a>" msgstr "" @@ -3809,9 +3946,8 @@ msgstr "" msgid "comment" msgstr "" -#: app/models/track_thing.rb:86 -#: app/views/request/_request_filter_form.rhtml:33 -#: app/views/general/search.rhtml:103 +#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103 +#: app/views/request/_request_filter_form.rhtml:14 msgid "comments" msgstr "" @@ -3882,8 +4018,8 @@ msgstr "" msgid "info request event" msgstr "" -#: app/views/user/signchangeemail.rhtml:3 #: app/views/user/set_profile_about_me.rhtml:3 +#: app/views/user/signchangeemail.rhtml:3 msgid "internal error" msgstr "" @@ -3908,13 +4044,13 @@ msgstr "" msgid "made." msgstr "" -#: app/views/request/_request_filter_form.rhtml:32 #: app/views/general/search.rhtml:102 +#: app/views/request/_request_filter_form.rhtml:13 msgid "messages from authorities" msgstr "" -#: app/views/request/_request_filter_form.rhtml:31 #: app/views/general/search.rhtml:101 +#: app/views/request/_request_filter_form.rhtml:12 msgid "messages from users" msgstr "" @@ -3925,9 +4061,11 @@ msgstr "" #: app/views/request/followup_bad.rhtml:18 msgid "" "no longer exists. If you are trying to make\n" -" From the request page, try replying to a particular message, rather than sending\n" +" From the request page, try replying to a particular message, rather than " +"sending\n" " a general followup. If you need to make a general followup, and know\n" -" an email which will go to the right place, please <a href=\"%s\">send it to us</a>." +" an email which will go to the right place, please <a href=\"%s\">send it " +"to us</a>." msgstr "" #: app/views/request/show.rhtml:72 @@ -3993,16 +4131,12 @@ msgstr "" msgid "sign in" msgstr "" -#: app/views/user/wrong_user.rhtml:4 -msgid "sign out" -msgstr "" - #: app/models/track_thing.rb:101 msgid "successful" msgstr "" -#: app/views/request/_request_filter_form.rhtml:7 #: app/views/general/search.rhtml:89 +#: app/views/request/_request_filter_form.rhtml:31 msgid "successful requests" msgstr "" @@ -4010,20 +4144,20 @@ msgstr "" msgid "that you made to" msgstr "" +#: app/views/request_mailer/comment_on_alert.rhtml:6 #: app/views/request_mailer/comment_on_alert_plural.rhtml:5 -#: app/views/request_mailer/old_unclassified_updated.rhtml:8 +#: app/views/request_mailer/new_response.rhtml:15 #: app/views/request_mailer/new_response_reminder_alert.rhtml:8 -#: app/views/request_mailer/very_overdue_alert.rhtml:11 +#: app/views/request_mailer/not_clarified_alert.rhtml:9 +#: app/views/request_mailer/old_unclassified_updated.rhtml:8 #: app/views/request_mailer/overdue_alert.rhtml:9 #: app/views/request_mailer/stopped_responses.rhtml:16 -#: app/views/request_mailer/new_response.rhtml:15 -#: app/views/request_mailer/not_clarified_alert.rhtml:9 -#: app/views/request_mailer/comment_on_alert.rhtml:6 +#: app/views/request_mailer/very_overdue_alert.rhtml:11 +#: app/views/track_mailer/event_digest.rhtml:66 #: app/views/user_mailer/already_registered.rhtml:11 -#: app/views/user_mailer/confirm_login.rhtml:11 -#: app/views/user_mailer/changeemail_confirm.rhtml:13 #: app/views/user_mailer/changeemail_already_used.rhtml:10 -#: app/views/track_mailer/event_digest.rhtml:66 +#: app/views/user_mailer/changeemail_confirm.rhtml:13 +#: app/views/user_mailer/confirm_login.rhtml:11 msgid "the {{site_name}} team" msgstr "" @@ -4055,12 +4189,12 @@ msgstr "" msgid "unknown reason " msgstr "" -#: app/models/info_request_event.rb:318 app/models/info_request.rb:816 +#: app/models/info_request.rb:816 app/models/info_request_event.rb:318 msgid "unknown status " msgstr "" -#: app/views/request/_request_filter_form.rhtml:9 #: app/views/general/search.rhtml:91 +#: app/views/request/_request_filter_form.rhtml:33 msgid "unresolved requests" msgstr "" @@ -4076,8 +4210,8 @@ msgstr "" msgid "unsuccessful" msgstr "" -#: app/views/request/_request_filter_form.rhtml:8 #: app/views/general/search.rhtml:90 +#: app/views/request/_request_filter_form.rhtml:32 msgid "unsuccessful requests" msgstr "" @@ -4101,10 +4235,11 @@ msgstr "" msgid "{{count}} FOI requests found" msgstr "" -#: app/views/request/new.rhtml:17 +#: app/views/request/new.rhtml:25 msgid "" "{{existing_request_user}} already\n" -" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n" +" created the same request on {{date}}. You can either view the <a href=" +"\"{{existing_request}}\">existing request</a>,\n" " or edit the details below to make a new but similar request." msgstr "" @@ -4185,4 +4320,3 @@ msgstr "" #: app/views/request/show.rhtml:44 msgid "{{user}} made this {{law_used_full}} request" msgstr "" - diff --git a/locale/es/app.po b/locale/es/app.po index 8db3b7d8d..269360596 100644 --- a/locale/es/app.po +++ b/locale/es/app.po @@ -2,15 +2,16 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # -# <victoria@access-info.org>, 2011. +# Translators: # David Cabo <david.cabo@gmail.com>, 2011. # skenaja <alex@alexskene.com>, 2011. +# <victoria@access-info.org>, 2011. msgid "" msgstr "" "Project-Id-Version: alaveteli\n" "Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n" -"POT-Creation-Date: 2011-09-05 11:30+0200\n" -"PO-Revision-Date: 2011-09-05 10:42+0000\n" +"POT-Creation-Date: 2011-09-07 12:17+0200\n" +"PO-Revision-Date: 2011-09-07 10:37+0000\n" "Last-Translator: dcabo <david.cabo@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" @@ -168,11 +169,11 @@ msgstr " o " msgid " when you send this message." msgstr " cuando envió este mensaje." -#: app/views/public_body/show.rhtml:82 -msgid "%d Freedom of Information request made using this site" -msgid_plural "%d Freedom of Information requests made using this site" -msgstr[0] "%d petición de información realizada en esta web" -msgstr[1] "%d peticiones de información realizadas en esta web" +#: app/views/public_body/show.rhtml:88 +msgid "%d Freedom of Information request to %s" +msgid_plural "%d Freedom of Information requests to %s" +msgstr[0] "%d solicitud de información a %s" +msgstr[1] "%d solicitudes de información a %s" #: app/views/general/frontpage.rhtml:44 msgid "%d request" @@ -186,11 +187,11 @@ msgid_plural "%d requests made." msgstr[0] "%d petición enviada." msgstr[1] "%d peticiones enviadas." -#: app/views/request/new.rhtml:83 +#: app/views/request/new.rhtml:91 msgid "'Crime statistics by ward level for Wales'" msgstr "'Estadísticas de crímenes por región en España'" -#: app/views/request/new.rhtml:81 +#: app/views/request/new.rhtml:89 msgid "'Pollution levels over time for the River Tyne'" msgstr "'Niveles históricos de contaminación en el río Ebro'" @@ -228,7 +229,7 @@ msgstr "" msgid "1. Select an authority" msgstr "1. Elija un organismo público" -#: app/views/request/new.rhtml:26 +#: app/views/request/new.rhtml:34 msgid "2. Ask for Information" msgstr "2. Solicite información" @@ -236,7 +237,7 @@ msgstr "2. Solicite información" msgid "3. Now check your request" msgstr "3. Revise su solicitud" -#: app/views/public_body/show.rhtml:53 +#: app/views/public_body/show.rhtml:57 msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>" msgstr "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>" @@ -250,7 +251,7 @@ msgstr "" msgid "<a href=\"%s\">Are we missing a public authority?</a>." msgstr "<a href=\"%s\">¿Nos falta algún organismo público?</a>." -#: app/views/request/_sidebar.rhtml:36 +#: app/views/request/_sidebar.rhtml:39 msgid "" "<a href=\"%s\">Are you the owner of\n" " any commercial copyright on this page?</a>" @@ -483,7 +484,7 @@ msgstr "" "sus carpetas de spam. A veces, nuestros mensajes se marcan así por error.</small>\n" "</p>" -#: app/views/request/new.rhtml:124 +#: app/views/request/new.rhtml:133 msgid "" "<strong> Can I request information about myself?</strong>\n" "\t\t\t<a href=\"%s\">No! (Click here for details)</a>" @@ -691,7 +692,7 @@ msgstr "Un usuario de {{site_name}}" msgid "About you:" msgstr "Sobre mí:" -#: app/views/request/_sidebar.rhtml:5 +#: app/views/request/_sidebar.rhtml:8 msgid "Act on what you've learnt" msgstr "Utilice esta información" @@ -735,7 +736,7 @@ msgstr "" "Consejo sobre <strong>si el rechazo es legal</strong>, y como apelar si no " "lo es." -#: app/views/request/new.rhtml:59 +#: app/views/request/new.rhtml:67 msgid "" "Air, water, soil, land, flora and fauna (including how these effect\n" " human beings)" @@ -795,7 +796,7 @@ msgstr "" msgid "Anyone:" msgstr "Cualquiera:" -#: app/views/request/new.rhtml:94 +#: app/views/request/new.rhtml:103 msgid "" "Ask for <strong>specific</strong> documents or information, this site is not" " suitable for general enquiries." @@ -831,7 +832,7 @@ msgstr "Esperando respuesta." msgid "Beginning with" msgstr "Comenzando por" -#: app/views/request/new.rhtml:38 +#: app/views/request/new.rhtml:46 msgid "" "Browse <a href='{{url}}'>other requests</a> for examples of how to word your" " request." @@ -839,7 +840,7 @@ msgstr "" "Consulte <a href='{{url}}'>otras solicitudes</a> para ver cómo puede " "redactar su solicitud." -#: app/views/request/new.rhtml:36 +#: app/views/request/new.rhtml:44 msgid "" "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for " "examples of how to word your request." @@ -891,6 +892,10 @@ msgstr "CensorRule|Replacement" msgid "CensorRule|Text" msgstr "CensorRule|Text" +#: lib/public_body_categories_en.rb:14 +msgid "Central government" +msgstr "Gobierno central" + #: app/views/user/signchangeemail.rhtml:37 msgid "Change email on {{site_name}}" msgstr "Cambiar correo en {{site_name}}" @@ -899,7 +904,7 @@ msgstr "Cambiar correo en {{site_name}}" msgid "Change password on {{site_name}}" msgstr "Cambiar la contraseña en {{site_name}}" -#: app/views/user/show.rhtml:104 app/views/user/set_crop_profile_photo.rhtml:1 +#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104 msgid "Change profile photo" msgstr "Cambie la foto de perfil" @@ -921,10 +926,10 @@ msgstr "Cambie su dirección de correo en {{site_name}}" msgid "Change your password" msgstr "Cambie su contraseña" -#: app/views/user/signchangepassword_send_confirm.rhtml:1 -#: app/views/user/signchangepassword_send_confirm.rhtml:9 #: app/views/user/signchangepassword.rhtml:1 #: app/views/user/signchangepassword.rhtml:11 +#: app/views/user/signchangepassword_send_confirm.rhtml:1 +#: app/views/user/signchangepassword_send_confirm.rhtml:9 msgid "Change your password on {{site_name}}" msgstr "Cambie su contraseña en {{site_name}}" @@ -932,7 +937,7 @@ msgstr "Cambie su contraseña en {{site_name}}" msgid "Change your password {{site_name}}" msgstr "Cambie su contraseña en {{site_name}}" -#: app/views/public_body/show.rhtml:17 app/views/public_body/show.rhtml:19 +#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22 msgid "Charity registration" msgstr "Registro de la ONG" @@ -940,12 +945,16 @@ msgstr "Registro de la ONG" msgid "Check for mistakes if you typed or copied the address." msgstr "Busque erratas si ha copiado la dirección." -#: app/views/request/preview.rhtml:7 #: app/views/request/followup_preview.rhtml:14 +#: app/views/request/preview.rhtml:7 msgid "Check you haven't included any <strong>personal information</strong>." msgstr "" "Compruebe que no ha incluído <strong>ninguna información personal</strong>." +#: lib/world_foi_websites.rb:29 +msgid "Chile" +msgstr "Chile" + #: app/models/info_request_event.rb:316 msgid "Clarification" msgstr "Aclaración" @@ -1045,7 +1054,7 @@ msgstr "Confirme su nueva dirección de correo en {{site_name}}" msgid "Contact {{site_name}}" msgstr "Contacte con {{site_name}}" -#: app/models/request_mailer.rb:210 +#: app/models/request_mailer.rb:218 msgid "Could not identify the request from the email address" msgstr "" "No hemos podido identificar la petición a partir de la dirección de correo" @@ -1062,7 +1071,7 @@ msgstr "" msgid "Crop your profile photo" msgstr "Recorte su foto de perfil" -#: app/views/request/new.rhtml:64 +#: app/views/request/new.rhtml:72 msgid "" "Cultural sites and built structures (as they may be affected by the\n" " environmental factors listed above)" @@ -1182,23 +1191,27 @@ msgstr "" "Escriba su petición a continuación. Puede adjuntar un fichero (mande un correo,\n" " o <a href=\"%s\">contáctenos</a>, si necesita más)." -#: app/views/public_body/show.rhtml:104 +#: app/views/public_body/show.rhtml:116 msgid "Environmental Information Regulations requests made" msgstr "Peticiones medio-ambientales realizadas" -#: app/views/public_body/show.rhtml:71 +#: app/views/public_body/show.rhtml:73 msgid "Environmental Information Regulations requests made using this site" msgstr "Peticiones medio-ambientales realizadas en esta web" +#: lib/world_foi_websites.rb:13 +msgid "European Union" +msgstr "Unión Europea" + #: app/views/request/details.rhtml:4 msgid "Event history" msgstr "Historial de eventos" -#: app/views/request/_sidebar.rhtml:32 +#: app/views/request/_sidebar.rhtml:35 msgid "Event history details" msgstr "Historial de eventos" -#: app/views/request/new.rhtml:117 +#: app/views/request/new.rhtml:126 msgid "" "Everything that you enter on this page \n" " will be <strong>displayed publicly</strong> on\n" @@ -1208,7 +1221,7 @@ msgstr "" " estará <strong>disponible públicamente</strong> en\n" " está web para siempre (<a href=\"%s\">¿por qué?</a>)." -#: app/views/request/new.rhtml:109 +#: app/views/request/new.rhtml:118 msgid "" "Everything that you enter on this page, including <strong>your name</strong>, \n" " will be <strong>displayed publicly</strong> on\n" @@ -1272,10 +1285,26 @@ msgstr "" " <br>que quiera solicitar información. <strong>Por ley, tienen que responder</strong>\n" " (<a href=\"%s\">¿por qué?</a>)." +#: app/views/track/_tracking_links.rhtml:21 +msgid "Follow by email" +msgstr "Seguir por correo" + +#: app/views/request/list.rhtml:8 +msgid "Follow these requests" +msgstr "Seguir estas solicitudes" + +#: app/views/public_body/show.rhtml:4 +msgid "Follow this authority" +msgstr "Seguir a este organismo" + #: app/views/request_mailer/old_unclassified_updated.rhtml:4 msgid "Follow this link to see the request:" msgstr "Siga este enlace para ver la petición:" +#: app/views/request/_sidebar.rhtml:2 +msgid "Follow this request" +msgstr "Seguir esta solicitud" + #: app/models/info_request_event.rb:320 msgid "Follow up" msgstr "Seguimiento" @@ -1302,7 +1331,7 @@ msgstr "" msgid "Follow us on twitter" msgstr "Síguenos en Twitter" -#: app/views/public_body/show.rhtml:62 +#: app/views/public_body/show.rhtml:66 msgid "" "For an unknown reason, it is not possible to make a request to this " "authority." @@ -1317,7 +1346,7 @@ msgstr "¿Ha olvidado su contraseña?" msgid "Found {{count}} public bodies {{description}}" msgstr "Encontrados {{count}} organismos públicos {{description}}" -#: app/views/public_body/show.rhtml:57 +#: app/views/public_body/show.rhtml:61 msgid "" "Freedom of Information law does not apply to this authority, so you cannot make\n" " a request to it." @@ -1337,7 +1366,7 @@ msgstr "" "La ley de acceso a la información ya no es aplicable a este organismo. Los " "mensajes de seguimiento de peticiones existentes se envían a " -#: app/views/public_body/show.rhtml:106 +#: app/views/public_body/show.rhtml:118 msgid "Freedom of Information requests made" msgstr "Peticiones de acceso a información realizadas" @@ -1349,7 +1378,7 @@ msgstr "Solicitudes de información realizadas por esta persona" msgid "Freedom of Information requests made by you" msgstr "Solicitudes de información realizadas por usted" -#: app/views/public_body/show.rhtml:74 +#: app/views/public_body/show.rhtml:76 msgid "Freedom of Information requests made using this site" msgstr "Peticiones de acceso a información realizadas por esta web" @@ -1367,15 +1396,27 @@ msgstr "" msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE" msgstr "DETALLE SU QUEJA AQUÍ" +#: lib/world_foi_websites.rb:25 +msgid "Germany" +msgstr "Alemania" + #: app/models/info_request.rb:803 msgid "Handled by post." msgstr "Resuelta por correo ordinario" -#: app/views/layouts/default.rhtml:97 +#: app/controllers/services_controller.rb:21 +msgid "" +"Hello! You can make Freedom of Information requests within {{country_name}} " +"at {{link_to_website}}" +msgstr "" +"¡Hola! Puede hacer solicitudes de información en {{country_name}} usando " +"{{link_to_website}}" + +#: app/views/layouts/default.rhtml:98 msgid "Hello, {{username}}!" msgstr "¡Hola, {{username}}!" -#: app/views/layouts/default.rhtml:129 +#: app/views/layouts/default.rhtml:130 msgid "Help" msgstr "Ayuda" @@ -1410,15 +1451,15 @@ msgstr "Holiday|Day" msgid "Holiday|Description" msgstr "Holiday|Description" -#: app/views/layouts/default.rhtml:124 +#: app/views/layouts/default.rhtml:125 msgid "Home" msgstr "Inicio" -#: app/views/public_body/show.rhtml:9 +#: app/views/public_body/show.rhtml:12 msgid "Home page of authority" msgstr "Sitio web del organismo" -#: app/views/request/new.rhtml:53 +#: app/views/request/new.rhtml:61 msgid "" "However, you have the right to request environmental\n" " information under a different law" @@ -1426,7 +1467,7 @@ msgstr "" "En cambio, tiene derecho a solicitar información\n" " medioambiental bajo otra ley" -#: app/views/request/new.rhtml:63 +#: app/views/request/new.rhtml:71 msgid "Human health and safety" msgstr "Salud y seguridad" @@ -1523,7 +1564,7 @@ msgstr "" "Si la petición es suya, puede <a href=\"%s\">abrir una sesión</a> para " "verla." -#: app/views/request/new.rhtml:112 +#: app/views/request/new.rhtml:121 msgid "" "If you are thinking of using a pseudonym,\n" " please <a href=\"%s\">read this first</a>." @@ -1579,8 +1620,8 @@ msgstr "" " al organismo público de que ha retirado su petición. De lo contrario no " "sabrá que lo ha hecho." -#: app/views/user/signchangepassword_confirm.rhtml:10 #: app/views/user/signchangeemail_confirm.rhtml:11 +#: app/views/user/signchangepassword_confirm.rhtml:10 msgid "" "If you use web-based email or have \"junk mail\" filters, also check your\n" "bulk/spam mail folders. Sometimes, our messages are marked that way." @@ -1688,7 +1729,7 @@ msgstr "InfoRequest|Url title" msgid "Information not held." msgstr "Información no disponible." -#: app/views/request/new.rhtml:61 +#: app/views/request/new.rhtml:69 msgid "" "Information on emissions and discharges (e.g. noise, energy,\n" " radiation, waste materials)" @@ -1727,7 +1768,7 @@ msgstr "Registrado el" msgid "Joined {{site_name}} in" msgstr "Registrado en {{site_name}} el" -#: app/views/request/new.rhtml:95 +#: app/views/request/new.rhtml:104 msgid "" "Keep it <strong>focused</strong>, you'll be more likely to get what you want" " (<a href=\"%s\">why?</a>)." @@ -1735,10 +1776,14 @@ msgstr "" "Sea <strong>específico</strong>, tendrá más probabilidades de conseguir lo " "que quiere (<a href=\"%s\">¿por qué?</a>)." -#: app/views/request/_request_filter_form.rhtml:25 +#: app/views/request/_request_filter_form.rhtml:6 msgid "Keywords" msgstr "Términos" +#: lib/world_foi_websites.rb:9 +msgid "Kosovo" +msgstr "Kosovo" + #: app/views/contact_mailer/message.rhtml:10 msgid "Last authority viewed: " msgstr "Ultimo organismo visitado: " @@ -1765,22 +1810,29 @@ msgstr "Enlace" msgid "List of all authorities (CSV)" msgstr "Lista de todos los organismos (CSV)" +#: lib/public_body_categories_en.rb:23 +msgid "Local and regional" +msgstr "Local y regional" + #: app/models/info_request.rb:791 msgid "Long overdue." msgstr "Muy retrasada." -#: app/views/request/_request_filter_form.rhtml:42 +#: app/views/request/_request_filter_form.rhtml:23 msgid "Made between" msgstr "Realizadas entre" -#: app/views/public_body/show.rhtml:49 +#: app/views/public_body/show.rhtml:53 msgid "Make a new <strong>Environmental Information</strong> request" msgstr "" "Envíe una nueva <strong>solicitud de información medioambiental</strong>" -#: app/views/public_body/show.rhtml:51 -msgid "Make a new <strong>Freedom of Information</strong> request" -msgstr "Envíe una nueva <strong>solicitud de información</strong>" +#: app/views/public_body/show.rhtml:55 +msgid "" +"Make a new <strong>Freedom of Information</strong> request to " +"{{public_body}}" +msgstr "" +"Hacer una nueva <strong>solicitud de información</strong> a {{public_body}}" #: app/views/general/frontpage.rhtml:5 msgid "" @@ -1793,11 +1845,11 @@ msgstr "" " <strong>Solicitud <span>de</span><br/>\n" " información</strong>" -#: app/views/layouts/default.rhtml:125 +#: app/views/layouts/default.rhtml:126 msgid "Make a request" msgstr "Enviar solicitud" -#: app/views/request/new.rhtml:12 +#: app/views/request/new.rhtml:20 msgid "Make an {{law_used_short}} request to '{{public_body_name}}'" msgstr "Hacer una petición {{law_used_short}} a '{{public_body_name}}'" @@ -1817,7 +1869,7 @@ msgstr "Mensaje enviado usando {{site_name}}, " msgid "Missing contact details for '" msgstr "Faltan datos de contacto para '" -#: app/views/public_body/show.rhtml:7 +#: app/views/public_body/show.rhtml:10 msgid "More about this authority" msgstr "Más información sobre este organismo" @@ -1825,7 +1877,7 @@ msgstr "Más información sobre este organismo" msgid "More successful requests..." msgstr "Más peticiones realizadas con éxito..." -#: app/views/layouts/default.rhtml:100 +#: app/views/layouts/default.rhtml:101 msgid "My profile" msgstr "Mi perfil" @@ -1845,6 +1897,10 @@ msgstr "El nombre ya está siendo utilizado" msgid "New Freedom of Information requests" msgstr "Nuevas peticiones de acceso a información" +#: lib/world_foi_websites.rb:21 +msgid "New Zealand" +msgstr "Nueva Zelanda" + #: app/views/user/signchangeemail.rhtml:20 msgid "New e-mail:" msgstr "Nueva dirección:" @@ -1901,7 +1957,7 @@ msgstr "No se han encontrado resultados." msgid "No similar requests found." msgstr "No se han encontrado peticiones similares." -#: app/views/public_body/show.rhtml:75 +#: app/views/public_body/show.rhtml:77 msgid "" "Nobody has made any Freedom of Information requests to {{public_body_name}} " "using this site yet." @@ -1909,8 +1965,8 @@ msgstr "" "Nadie ha realizado todavía una petición de información a " "{{public_body_name}} usando esta web." -#: app/views/request/_request_listing.rhtml:2 #: app/views/public_body/_body_listing.rhtml:3 +#: app/views/request/_request_listing.rhtml:2 msgid "None found." msgstr "No se han encontrado resultados." @@ -1918,9 +1974,9 @@ msgstr "No se han encontrado resultados." msgid "None made." msgstr "Ninguno/a." +#: app/views/user/signchangeemail_confirm.rhtml:3 #: app/views/user/signchangepassword_confirm.rhtml:1 #: app/views/user/signchangepassword_confirm.rhtml:3 -#: app/views/user/signchangeemail_confirm.rhtml:3 msgid "Now check your email!" msgstr "¡Ahora compruebe su correo!" @@ -1978,7 +2034,7 @@ msgstr "Una persona encontrada" msgid "One public authority found" msgstr "Un organismo público encontrado" -#: app/views/public_body/show.rhtml:98 +#: app/views/public_body/show.rhtml:111 msgid "Only requests made using {{site_name}} are shown." msgstr "Sólo se muestran las peticiones realizadas con {{site_name}}." @@ -1998,6 +2054,10 @@ msgstr "" "Sólo el organismo puede responder a esta petición, pero no hay un campo " "\"From\" contra el que comparar" +#: app/views/request/_search_ahead.rhtml:10 +msgid "Or search in their website for this information." +msgstr "O busque esta información en su web." + #: app/views/general/search.rhtml:254 msgid "Original request sent" msgstr "Petición original enviada" @@ -2034,7 +2094,7 @@ msgstr "Éxito parcial." msgid "Password is not correct" msgstr "La contraseña no es correcta" -#: app/views/user/_signup.rhtml:30 app/views/user/_signin.rhtml:16 +#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30 msgid "Password:" msgstr "Contraseña:" @@ -2050,7 +2110,7 @@ msgstr "Personas {{start_count}} a {{end_count}} de {{total_count}}" msgid "Photo of you:" msgstr "Foto:" -#: app/views/request/new.rhtml:66 +#: app/views/request/new.rhtml:74 msgid "Plans and administrative measures that affect these matters" msgstr "Planes y medidas administrativas que afecten a estos temas" @@ -2099,7 +2159,7 @@ msgstr "" "en su petición original, entonces <a href=\"{{new_request_link}}\">envíe una" " nueva petición</a>." -#: app/views/request/new.rhtml:50 +#: app/views/request/new.rhtml:58 msgid "Please ask for environmental information only" msgstr "Por favor pida información medio-ambiental solamente" @@ -2194,7 +2254,7 @@ msgstr "Por favor, introduzca la misma contraseña dos veces" msgid "Please enter your annotation" msgstr "Por favor, introduzca su comentario" -#: app/models/user.rb:34 app/models/contact_validator.rb:29 +#: app/models/contact_validator.rb:29 app/models/user.rb:34 msgid "Please enter your email address" msgstr "Por favor, introduzca su dirección de correo" @@ -2206,7 +2266,7 @@ msgstr "Por favor, introduzca su mensaje" msgid "Please enter your letter requesting information" msgstr "Por favor, introduzca su petición de información" -#: app/models/user.rb:36 app/models/contact_validator.rb:28 +#: app/models/contact_validator.rb:28 app/models/user.rb:36 msgid "Please enter your name" msgstr "Por favor, introduzca su nombre" @@ -2244,7 +2304,7 @@ msgstr "" "Por favor, mantenga el resumen corto, como en el asunto de un correo " "electrónico" -#: app/views/request/new.rhtml:69 +#: app/views/request/new.rhtml:77 msgid "" "Please only request information that comes under those categories, <strong>do not waste your\n" " time</strong> or the time of the public authority by requesting unrelated information." @@ -2333,7 +2393,7 @@ msgstr "" "Haga referencia a <strong>información relacionada</strong>, campañas o foros" " que puedan ser útiles." -#: app/views/request/_search_ahead.rhtml:4 +#: app/views/request/_search_ahead.rhtml:3 msgid "Possibly related requests:" msgstr "Posibles solicitudes relacionadas:" @@ -2389,7 +2449,7 @@ msgstr "Revise su comentario" msgid "Preview your message" msgstr "Revise su mensaje" -#: app/views/request/new.rhtml:132 +#: app/views/request/new.rhtml:141 msgid "Preview your public request" msgstr "Revise su petición pública" @@ -2458,15 +2518,15 @@ msgstr "Dirección web" msgid "PublicBody|Version" msgstr "Versión" -#: app/views/public_body/show.rhtml:12 +#: app/views/public_body/show.rhtml:15 msgid "Publication scheme" msgstr "Esquema de publicación" -#: app/views/track/_tracking_links.rhtml:27 +#: app/views/track/_tracking_links.rhtml:26 msgid "RSS feed" msgstr "RSS" -#: app/views/track/_tracking_links.rhtml:27 +#: app/views/track/_tracking_links.rhtml:26 msgid "RSS feed of updates" msgstr "Actualizaciones RSS" @@ -2486,7 +2546,7 @@ msgstr "" "Lea más sobre <a href=\"{{advanced_search_url}}\">operadores avanzados de " "búsqueda</a>, como indicadores de proximidad y comodines." -#: app/views/layouts/default.rhtml:128 +#: app/views/layouts/default.rhtml:129 msgid "Read blog" msgstr "Leer el blog" @@ -2611,12 +2671,11 @@ msgstr "Página de resultados {{page_number}}" msgid "Save" msgstr "Guardar" -#: app/views/request/_request_filter_form.rhtml:49 -#: app/views/request/select_authority.rhtml:41 -#: app/views/public_body/list.rhtml:42 #: app/views/general/exception_caught.rhtml:12 #: app/views/general/frontpage.rhtml:24 app/views/general/search.rhtml:32 -#: app/views/general/search.rhtml:45 +#: app/views/general/search.rhtml:45 app/views/public_body/list.rhtml:42 +#: app/views/request/_request_filter_form.rhtml:49 +#: app/views/request/select_authority.rhtml:41 msgid "Search" msgstr "Buscar" @@ -2628,7 +2687,7 @@ msgstr "Buscar peticiones de información, organismos públicos y usuarios" msgid "Search contributions by this person" msgstr "Buscar aportaciones de esta persona" -#: app/views/request/_request_filter_form.rhtml:30 +#: app/views/request/_request_filter_form.rhtml:11 msgid "Search for words in:" msgstr "Buscar palabras en:" @@ -2650,6 +2709,12 @@ msgstr "" msgid "Search the site to find what you were looking for." msgstr "Buscar en esta web para encontrar lo que busca." +#: app/views/public_body/show.rhtml:86 +msgid "Search within the %d Freedom of Information requests to %s" +msgid_plural "Search within the %d Freedom of Information requests made to %s" +msgstr[0] "Busque en la %d solicitud de información hecha a %s" +msgstr[1] "Busque entre las %d solicitudes de información hechas a %s" + #: app/views/user/show.rhtml:123 msgid "Search your contributions" msgstr "Busque sus aportaciones" @@ -2706,7 +2771,6 @@ msgstr "Muestra resultados más relevantes primero" msgid "Show only..." msgstr "Mostrar sólo..." -#: app/views/request/_request_filter_form.rhtml:5 #: app/views/general/search.rhtml:52 msgid "Showing" msgstr "Mostrando" @@ -2719,11 +2783,11 @@ msgstr "Abrir sesión" msgid "Sign in or make a new account" msgstr "Abrir sesión o crear nueva cuenta" -#: app/views/layouts/default.rhtml:106 +#: app/views/layouts/default.rhtml:107 msgid "Sign in or sign up" msgstr "Iniciar sesión o registro" -#: app/views/layouts/default.rhtml:104 +#: app/views/layouts/default.rhtml:105 msgid "Sign out" msgstr "Cerrar sesión" @@ -2731,7 +2795,7 @@ msgstr "Cerrar sesión" msgid "Sign up" msgstr "Registrarse" -#: app/views/request/_sidebar.rhtml:21 +#: app/views/request/_sidebar.rhtml:24 msgid "Similar requests" msgstr "Peticiones similares" @@ -2763,6 +2827,10 @@ msgstr "" "Alguien, tal vez usted, acaba de intentar cambiar su dirección de correo en\n" "{{site_name}} de {{old_email}} a {{new_email}}." +#: app/views/user/wrong_user.rhtml:2 +msgid "Sorry, but only {{user_name}} is allowed to do that." +msgstr "Lo sentimos, pero sólo {{user_name}} puede hacer eso." + #: app/views/general/exception_caught.rhtml:17 msgid "Sorry, there was a problem processing this page" msgstr "Lo sentimos, hubo un problema procesando esta página" @@ -2771,11 +2839,11 @@ msgstr "Lo sentimos, hubo un problema procesando esta página" msgid "Sorry, we couldn't find that page" msgstr "Lo sentimos, no hemos podido encontrar esa página" -#: app/views/request/new.rhtml:45 +#: app/views/request/new.rhtml:53 msgid "Special note for this authority!" msgstr "¡Notas especiales sobre este organismo!" -#: app/views/public_body/show.rhtml:53 +#: app/views/public_body/show.rhtml:57 msgid "Start" msgstr "Comenzar" @@ -2783,7 +2851,7 @@ msgstr "Comenzar" msgid "Start now »" msgstr "Comience ahora »" -#: app/views/request/_sidebar.rhtml:14 +#: app/views/request/_sidebar.rhtml:17 msgid "Start your own blog" msgstr "Comience su propio blog" @@ -2791,8 +2859,8 @@ msgstr "Comience su propio blog" msgid "Still awaiting an <strong>internal review</strong>" msgstr "Todavía esperando por una <strong>revisión interna</strong>" -#: app/views/request/preview.rhtml:18 #: app/views/request/followup_preview.rhtml:23 +#: app/views/request/preview.rhtml:18 msgid "Subject:" msgstr "Tema:" @@ -2820,7 +2888,7 @@ msgstr "" "Sugerir al creador de la petición cómo puede encontrar el <strong>resto de " "la información</strong>." -#: app/views/request/new.rhtml:75 +#: app/views/request/new.rhtml:83 msgid "Summary:" msgstr "Resumen:" @@ -2915,12 +2983,12 @@ msgstr "" "No parece ser una dirección de correo válida. Por favor comprueba que la ha " "escrito correctamente." -#: app/views/request/_other_describe_state.rhtml:43 #: app/views/request/_describe_state.rhtml:47 +#: app/views/request/_other_describe_state.rhtml:43 msgid "The <strong>review has finished</strong> and overall:" msgstr "La <strong>revisión ha finalizado</strong> y en resumen:" -#: app/views/request/new.rhtml:52 +#: app/views/request/new.rhtml:60 msgid "The Freedom of Information Act <strong>does not apply</strong> to" msgstr "La ley de acceso a la información <strong>no es aplicable</strong> a" @@ -3052,7 +3120,7 @@ msgstr "" " Por ley, bajo cualquier circunstancia, el organismo ya debería\n" " haber respondido" -#: app/views/public_body/show.rhtml:108 +#: app/views/public_body/show.rhtml:120 msgid "" "The search index is currently offline, so we can't show the Freedom of " "Information requests that have been made to this authority." @@ -3178,6 +3246,18 @@ msgstr "" "Hay {{count}} comentarios en su petición {{info_request}}. Siga este enlace " "para leer lo que dicen." +#: app/views/public_body/show.rhtml:7 +msgid "There is %d person following this authority" +msgid_plural "There are %d people following this authority" +msgstr[0] "Hay %d persona siguiendo a este organismo." +msgstr[1] "Hay %d personas siguiendo a este organismo." + +#: app/views/request/_sidebar.rhtml:5 +msgid "There is %d person following this request" +msgid_plural "There are %d people following this request" +msgstr[0] "Hay %d persona siguiendo esta solicitud." +msgstr[1] "Hay %d personas siguiendo esta solicitud." + #: app/views/user/show.rhtml:4 msgid "" "There is <strong>more than one person</strong> who uses this site and has this name. \n" @@ -3194,13 +3274,13 @@ msgstr "" "Se ha producido un <strong>error en la entrega</strong> o similar, y " "necesita ser arreglado por el equipo de {{site_name}}." -#: app/controllers/user_controller.rb:140 #: app/controllers/public_body_controller.rb:81 +#: app/controllers/user_controller.rb:140 msgid "There was an error with the words you entered, please try again." msgstr "" "Ha habido un error con las palabras introducidas, por favor pruebe otra vez." -#: app/views/public_body/show.rhtml:96 app/views/general/search.rhtml:10 +#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109 msgid "There were no requests matching your query." msgstr "No se encontraron solicitudes para su búsqueda." @@ -3240,7 +3320,7 @@ msgstr "" msgid "Things to do with this request" msgstr "Cosas que hacer con esta petición" -#: app/views/public_body/show.rhtml:60 +#: app/views/public_body/show.rhtml:64 msgid "This authority no longer exists, so you cannot make a request to it." msgstr "" "Este organismo ya no existe, no pueden realizarse peticiones de información." @@ -3253,7 +3333,7 @@ msgstr "" "Este respuesta está oculta. Revise los comentarios\n" " para descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta." -#: app/views/request/new.rhtml:55 +#: app/views/request/new.rhtml:63 msgid "" "This covers a very wide spectrum of information about the state of\n" " the <strong>natural and built environment</strong>, such as:" @@ -3277,7 +3357,7 @@ msgstr "" "Esto es porque {{title}} es una petición antigua\n" "marcada para ya no recibir más respuestas." -#: app/views/track/_tracking_links.rhtml:9 +#: app/views/track/_tracking_links.rhtml:8 msgid "" "This is your own request, so you will be automatically emailed when new " "responses arrive." @@ -3293,8 +3373,8 @@ msgstr "" "Este mensaje está oculto. Lea los comentarios\n" "\t\t\t\t\t\tpara descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta." -#: app/views/request/_other_describe_state.rhtml:40 #: app/views/request/_describe_state.rhtml:44 +#: app/views/request/_other_describe_state.rhtml:40 msgid "This particular request is finished:" msgstr "Esta petición está cerrada:" @@ -3369,8 +3449,8 @@ msgstr "" "Esta petición está oculta, por lo que sólo usted como creador puede verla. Por favor\n" " <a href=\"%s\">contáctenos</a> si no está seguro de por qué." -#: app/views/request/_other_describe_state.rhtml:10 #: app/views/request/_describe_state.rhtml:7 +#: app/views/request/_other_describe_state.rhtml:10 msgid "This request is still in progress:" msgstr "Esta petición está todavía en proceso:" @@ -3538,8 +3618,8 @@ msgstr "Para ver la respuesta, use el siguiente enlace." msgid "To {{public_body_link_absolute}}" msgstr "Para {{public_body_link_absolute}}" -#: app/views/request/preview.rhtml:17 app/views/request/new.rhtml:32 -#: app/views/request/followup_preview.rhtml:22 +#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40 +#: app/views/request/preview.rhtml:17 msgid "To:" msgstr "Para:" @@ -3551,26 +3631,14 @@ msgstr "Hoy" msgid "Top search results:" msgstr "Mejores resultados:" -#: app/views/track/_tracking_links.rhtml:22 -msgid "Track by email" -msgstr "Seguir por correo" - #: app/models/track_thing.rb:247 msgid "Track requests to {{public_body_name}} by email" msgstr "Seguir peticiones a {{public_body_name}} por correo" -#: app/views/request/list.rhtml:8 -msgid "Track these requests" -msgstr "Seguir estas solicitudes" - #: app/models/track_thing.rb:279 msgid "Track things matching this search by email" msgstr "Seguir esta búsqueda por correo" -#: app/views/public_body/show.rhtml:5 -msgid "Track this authority" -msgstr "Seguir a este organismo" - #: app/views/user/show.rhtml:29 msgid "Track this person" msgstr "Seguir a esta persona" @@ -3579,10 +3647,6 @@ msgstr "Seguir a esta persona" msgid "Track this person by email" msgstr "Seguir a esta persona por correo" -#: app/views/request/_sidebar.rhtml:2 -msgid "Track this request" -msgstr "Seguir esta petición" - #: app/models/track_thing.rb:196 msgid "Track this request by email" msgstr "Seguir esta petición por correo" @@ -3599,7 +3663,7 @@ msgstr "TrackThing|Track query" msgid "TrackThing|Track type" msgstr "TrackThing|Track type" -#: app/views/request/_sidebar.rhtml:10 +#: app/views/request/_sidebar.rhtml:13 msgid "Tweet this request" msgstr "Tuitear esta solicitud" @@ -3651,6 +3715,14 @@ msgid "" "address for" msgstr "Desgraciadamente, no tenemos una dirección de correo válida para" +#: lib/world_foi_websites.rb:5 +msgid "United Kingdom" +msgstr "Reino Unido" + +#: lib/world_foi_websites.rb:17 +msgid "United States of America" +msgstr "Estados Unidos de América" + #: app/views/general/exception_caught.rhtml:22 msgid "Unknown" msgstr "Desconocido" @@ -3732,7 +3804,7 @@ msgstr "User|Salt" msgid "User|Url name" msgstr "User|Url name" -#: app/views/public_body/show.rhtml:23 +#: app/views/public_body/show.rhtml:26 msgid "View FOI email address" msgstr "Ver dirección de correo" @@ -3752,7 +3824,7 @@ msgstr "Ver peticiones de acceso a información hechas por {{user_name}}:" msgid "View and search requests" msgstr "Ver y buscar solicitudes" -#: app/views/layouts/default.rhtml:127 +#: app/views/layouts/default.rhtml:128 msgid "View authorities" msgstr "Ver organismos públicos" @@ -3760,7 +3832,7 @@ msgstr "Ver organismos públicos" msgid "View email" msgstr "Ver correo" -#: app/views/layouts/default.rhtml:126 +#: app/views/layouts/default.rhtml:127 msgid "View requests" msgstr "Ver solicitudes" @@ -3918,6 +3990,10 @@ msgstr "Retirada por el autor." msgid "Wk" msgstr "Wk" +#: app/views/help/alaveteli.rhtml:6 +msgid "Would you like to see a website like this in your country?" +msgstr "¿Le gustaría ver una web como esta en su país?" + #: app/controllers/request_controller.rb:548 msgid "Write a reply to " msgstr "Escribir una respuesta a " @@ -3926,7 +4002,7 @@ msgstr "Escribir una respuesta a " msgid "Write your FOI follow up message to " msgstr "Escriba su respuesta a " -#: app/views/request/new.rhtml:93 +#: app/views/request/new.rhtml:102 msgid "Write your request in <strong>simple, precise language</strong>." msgstr "" "Escriba su petición en un <strong>lenguaje sencillo y preciso</strong>." @@ -3975,7 +4051,7 @@ msgstr "" "Puede obtener esta página en un formato procesable como parte de la página JSON\n" "de la petición. Consulte <a href=\"{{api_path}}\">la documentación de nuestro API</a>." -#: app/views/public_body/show.rhtml:43 +#: app/views/public_body/show.rhtml:47 msgid "" "You can only request information about the environment from this authority." msgstr "Solo puede solicitar información medioambiental a esta institución" @@ -4159,8 +4235,8 @@ msgstr "" "Sus detalles no han sido compartidos con nadie, salve que elija contestar a este\n" "mensaje, que irá directamente a la persona que escribió el mensaje." +#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9 #: app/views/user/signchangepassword_send_confirm.rhtml:13 -#: app/views/user/_signup.rhtml:9 app/views/user/_signin.rhtml:11 msgid "Your e-mail:" msgstr "Su correo:" @@ -4249,7 +4325,7 @@ msgstr "" "Su petición se llamaba {{info_request}}. Háganos saber si ha recibido la " "información para ayudarnos a controlar a" -#: app/views/request/new.rhtml:102 +#: app/views/request/new.rhtml:111 msgid "Your request:" msgstr "Su petición:" @@ -4281,7 +4357,7 @@ msgstr "Un saludo," msgid "Yours sincerely," msgstr "Un saludo," -#: app/views/request/new.rhtml:79 +#: app/views/request/new.rhtml:87 msgid "" "a one line summary of the information you are requesting, \n" "\t\t\te.g." @@ -4289,26 +4365,22 @@ msgstr "" "un resumen de una línea de la información que solicita, \n" "\t\t\tpor ejemplo" -#: app/views/public_body/show.rhtml:34 +#: app/views/public_body/show.rhtml:38 msgid "admin" msgstr "admin" -#: app/views/request/_request_filter_form.rhtml:6 +#: app/views/request/_request_filter_form.rhtml:30 msgid "all requests" msgstr "todas las solicitudes" -#: app/views/public_body/show.rhtml:32 +#: app/views/public_body/show.rhtml:36 msgid "also called {{public_body_short_name}}" msgstr "también conocido como {{public_body_short_name}}" -#: app/views/request/_request_filter_form.rhtml:44 +#: app/views/request/_request_filter_form.rhtml:25 msgid "and" msgstr "y" -#: app/views/user/wrong_user.rhtml:5 -msgid "and sign in as " -msgstr "y abra una sesión como " - #: app/views/request/show.rhtml:59 msgid "" "and update the status accordingly. Perhaps <strong>you</strong> might like " @@ -4325,6 +4397,10 @@ msgstr "y actualizar su estado." msgid "and we'll suggest <strong>what to do next</strong>" msgstr "y le sugeriremos <strong>qué hacer a continuación</strong>" +#: app/views/general/frontpage.rhtml:61 +msgid "answered a request about" +msgstr "contestó la solicitud" + #: app/models/track_thing.rb:211 msgid "any <a href=\"/list\">new requests</a>" msgstr "cualquier <a href=\"/list\">petición nueva</a>" @@ -4381,9 +4457,8 @@ msgstr "regla de censura" msgid "comment" msgstr "comentario" -#: app/models/track_thing.rb:86 -#: app/views/request/_request_filter_form.rhtml:33 -#: app/views/general/search.rhtml:103 +#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103 +#: app/views/request/_request_filter_form.rhtml:14 msgid "comments" msgstr "comentarios" @@ -4457,8 +4532,8 @@ msgstr "info request" msgid "info request event" msgstr "info request event" -#: app/views/user/signchangeemail.rhtml:3 #: app/views/user/set_profile_about_me.rhtml:3 +#: app/views/user/signchangeemail.rhtml:3 msgid "internal error" msgstr "error interno" @@ -4483,13 +4558,13 @@ msgstr "dejó un comentario" msgid "made." msgstr "hecho." -#: app/views/request/_request_filter_form.rhtml:32 #: app/views/general/search.rhtml:102 +#: app/views/request/_request_filter_form.rhtml:13 msgid "messages from authorities" msgstr "mensajes de organismos" -#: app/views/request/_request_filter_form.rhtml:31 #: app/views/general/search.rhtml:101 +#: app/views/request/_request_filter_form.rhtml:12 msgid "messages from users" msgstr "mensajes de usuarios" @@ -4574,16 +4649,12 @@ msgstr "enviada a {{public_body_name}} por {{info_request_user}} el {{date}}." msgid "sign in" msgstr "abrir sesión" -#: app/views/user/wrong_user.rhtml:4 -msgid "sign out" -msgstr "cerrar sesión" - #: app/models/track_thing.rb:101 msgid "successful" msgstr "exitosas" -#: app/views/request/_request_filter_form.rhtml:7 #: app/views/general/search.rhtml:89 +#: app/views/request/_request_filter_form.rhtml:31 msgid "successful requests" msgstr "solicitudes exitosas" @@ -4591,20 +4662,20 @@ msgstr "solicitudes exitosas" msgid "that you made to" msgstr "que hizo a" +#: app/views/request_mailer/comment_on_alert.rhtml:6 #: app/views/request_mailer/comment_on_alert_plural.rhtml:5 -#: app/views/request_mailer/old_unclassified_updated.rhtml:8 +#: app/views/request_mailer/new_response.rhtml:15 #: app/views/request_mailer/new_response_reminder_alert.rhtml:8 -#: app/views/request_mailer/very_overdue_alert.rhtml:11 +#: app/views/request_mailer/not_clarified_alert.rhtml:9 +#: app/views/request_mailer/old_unclassified_updated.rhtml:8 #: app/views/request_mailer/overdue_alert.rhtml:9 #: app/views/request_mailer/stopped_responses.rhtml:16 -#: app/views/request_mailer/new_response.rhtml:15 -#: app/views/request_mailer/not_clarified_alert.rhtml:9 -#: app/views/request_mailer/comment_on_alert.rhtml:6 +#: app/views/request_mailer/very_overdue_alert.rhtml:11 +#: app/views/track_mailer/event_digest.rhtml:66 #: app/views/user_mailer/already_registered.rhtml:11 -#: app/views/user_mailer/confirm_login.rhtml:11 -#: app/views/user_mailer/changeemail_confirm.rhtml:13 #: app/views/user_mailer/changeemail_already_used.rhtml:10 -#: app/views/track_mailer/event_digest.rhtml:66 +#: app/views/user_mailer/changeemail_confirm.rhtml:13 +#: app/views/user_mailer/confirm_login.rhtml:11 msgid "the {{site_name}} team" msgstr "el equipo de {{site_name}}" @@ -4636,12 +4707,12 @@ msgstr "indexado tipo de evento desconocido " msgid "unknown reason " msgstr "motivo desconocido " -#: app/models/info_request_event.rb:318 app/models/info_request.rb:816 +#: app/models/info_request.rb:816 app/models/info_request_event.rb:318 msgid "unknown status " msgstr "estado desconocido " -#: app/views/request/_request_filter_form.rhtml:9 #: app/views/general/search.rhtml:91 +#: app/views/request/_request_filter_form.rhtml:33 msgid "unresolved requests" msgstr "solicitudes no resueltas" @@ -4657,8 +4728,8 @@ msgstr "cancelar todas las suscripciones" msgid "unsuccessful" msgstr "fallidas" -#: app/views/request/_request_filter_form.rhtml:8 #: app/views/general/search.rhtml:90 +#: app/views/request/_request_filter_form.rhtml:32 msgid "unsuccessful requests" msgstr "solicitudes fallidas" @@ -4682,7 +4753,7 @@ msgstr "usuarios" msgid "{{count}} FOI requests found" msgstr "{{count}} solicitudes de información encontradas" -#: app/views/request/new.rhtml:17 +#: app/views/request/new.rhtml:25 msgid "" "{{existing_request_user}} already\n" " created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n" diff --git a/script/handle-mail-replies b/script/handle-mail-replies new file mode 100755 index 000000000..93cdc8cfd --- /dev/null +++ b/script/handle-mail-replies @@ -0,0 +1,128 @@ +#!/usr/bin/ruby + +# Handle email responses sent to us. +# +# This script is invoked as a pipe command, i.e. with the raw email message on stdin. +# - If a message is identified as a permanent bounce, the user is marked as having a +# bounced address, and will not be sent any more messages. +# - If a message is identified as an out-of-office autoreply, it is discarded. +# - Any other messages are forwarded to config.get("FORWARD_NONBOUNCE_RESPONSES_TO") + + +# We want to avoid loading rails unless we need it, so we start by just loading the +# config file ourselves. +$alaveteli_dir = File.join(File.dirname(__FILE__), '..') +$:.push(File.join($alaveteli_dir, "commonlib", "rblib")) +load "config.rb" +MySociety::Config.set_file(File.join($alaveteli_dir, 'config', 'general'), true) +MySociety::Config.load_default + +def main(in_test_mode) + Dir.chdir($alaveteli_dir) do + load_rails + + raw_message = $stdin.read + message = TMail::Mail.parse(raw_message) + + pfas = permanently_failed_addresses(message) + if !pfas.empty? + if in_test_mode + puts pfas + else + pfas.each do |pfa| + record_bounce(pfa, raw_message) + end + end + return 1 + end + + if is_oof? message + # Discard out-of-office messages + return 2 + end + + # Otherwise forward the message on + forward_on(raw_message) unless in_test_mode + return 0 + end +end + +def permanently_failed_addresses(message) + if message.header_string("Return-Path") == "<>" + # Some sort of auto-response + + # Check for Exim’s X-Failed-Recipients header + failed_recipients = message.header_string("X-Failed-Recipients") + if !failed_recipients.nil? + # The X-Failed-Recipients header contains the email address that failed + # Check for the words "This is a permanent error." in the body, to indicate + # a permanent failure + if message.body =~ /This is a permanent error./ + return failed_recipients.split(/,\s*/) + end + end + + # Next, look for multipart/report + if message.content_type == "multipart/report" + permanently_failed_recipients = [] + message.parts.each do |part| + if part.content_type == "message/delivery-status" + sections = part.body.split(/\r?\n\r?\n/) + # The first section is a generic header; subsequent sections + # represent a particular recipient. Since we + sections[1..-1].each do |section| + if section !~ /^Status: (\d)/ || $1 != '5' + # Either we couldn’t find the Status field, or it was a transient failure + break + end + if section =~ /^Final-Recipient: rfc822;(.+)/ + permanently_failed_recipients.push($1) + end + end + end + end + if !permanently_failed_recipients.empty? + return permanently_failed_recipients + end + end + end + + return [] +end + +def is_oof?(message) + # Check for out-of-office + + if message.header_string("Return-Path") == "<>" + subject = message.header_string("Subject") + if subject.start_with? "Out of Office: " + return true + end + if subject.start_with? "Automatic reply: " + return true + end + end + + return false +end + +def forward_on(raw_message) + forward_non_bounces_to = MySociety::Config.get("FORWARD_NONBOUNCE_RESPONSES_TO", "user-support@localhost") + IO.popen("/usr/sbin/sendmail -i #{forward_non_bounces_to}", "w") do |f| + f.write(raw_message); + f.close; + end +end + +def load_rails + require File.join('config', 'boot') + require RAILS_ROOT + '/config/environment' +end + +def record_bounce(email_address, bounce_message) + User.record_bounce_for_email(email_address, bounce_message) +end + +in_test_mode = (ARGV[0] == "--test") +status = main(in_test_mode) +exit(status) if in_test_mode diff --git a/script/mailin b/script/mailin index 733eaff3d..b4d77f7a4 100755 --- a/script/mailin +++ b/script/mailin @@ -2,18 +2,18 @@ # Wire this script to receive incoming email for request responses. -INPUT=/tmp/foi-mailin-mail-$RANDOM$RANDOM$RANDOM$RANDOM.txt -OUTPUT=/tmp/foi-mailin-output-$RANDOM$RANDOM$RANDOM$RANDOM.txt +INPUT=$(mktemp -t foi-mailin-mail-XXXXXXXX) +OUTPUT=$(mktemp -t foi-mailin-output-XXXXXXXX) -cat >$INPUT +# Read the email message from stdin, and write it to the file $INPUT +cat >"$INPUT" -cd `dirname $0` -cd ../ +cd "$(dirname "$0")"/.. source commonlib/shlib/deployfns read_conf config/general -(cat $INPUT | ./script/runner 'RequestMailer.receive(STDIN.read)') >$OUTPUT 2>&1 +script/runner 'RequestMailer.receive(STDIN.read)' <"$INPUT" >"$OUTPUT" 2>&1 ERROR_CODE=$? if [ ! "$ERROR_CODE" = "0" ] then @@ -21,17 +21,15 @@ then # send error to administators (use mutt for MIME encoding) SUBJ="Mail import error for $OPTION_DOMAIN" - BODY="There was an error code $ERROR_CODE returned by the RequestMailer.receive command in script/mailin. See attached for details. This might be quite serious, such as the database was down, or might be an email with corrupt headers that Rails is choking on. The email was returned with an exit code 75, which for Exim at least means the MTA will try again later. A well configured installation of this code will separately have had Exim make a backup copy of the email in a separate mailbox, just in case." - echo "$BODY" | /usr/bin/mutt -s "$SUBJ" -a $OUTPUT $INPUT -- $OPTION_CONTACT_EMAIL + BODY="There was an error code $ERROR_CODE returned by the RequestMailer.receive command in script/mailin. See attached for details. This might be quite serious, such as the database was down, or might be an email with corrupt headers that Rails is choking on. We returned the email with an exit code 75, which for Exim at least instructs the MTA to try again later. A well configured installation of this code will separately have had Exim make a backup copy of the email in a separate mailbox, just in case." + /usr/bin/mutt -s "$SUBJ" -a "$OUTPUT" "$INPUT" -- "$OPTION_CONTACT_EMAIL" <<<"$BODY" # tell exim error was temporary, so try again later (no point bouncing message to authority) - rm -f $OUTPUT - rm -f $INPUT + rm -f "$INPUT" "$OUTPUT" exit 75 fi -cat $OUTPUT -rm -f $OUTPUT -rm -f $INPUT +cat "$OUTPUT" +rm -f "$INPUT" "$OUTPUT" exit 0 diff --git a/spec/controllers/admin_request_controller_spec.rb b/spec/controllers/admin_request_controller_spec.rb index 423c2fb49..6f9af0525 100644 --- a/spec/controllers/admin_request_controller_spec.rb +++ b/spec/controllers/admin_request_controller_spec.rb @@ -71,7 +71,7 @@ describe AdminRequestController, "when administering the holding pen" do post :redeliver_incoming, :redeliver_incoming_message_id => new_im.id, :url_title => ir.url_title ir = InfoRequest.find_by_url_title(ir.url_title) ir.incoming_messages.length.should == 2 - response.should redirect_to('http://test.host/admin/request/show/101') + response.should redirect_to(:controller=>'admin_request', :action=>'show', :id=>101) InfoRequest.holding_pen_request.incoming_messages.length.should == 0 end diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb index 8c2e19c58..435d9a0d3 100644 --- a/spec/controllers/track_controller_spec.rb +++ b/spec/controllers/track_controller_spec.rb @@ -36,7 +36,7 @@ end describe TrackController, "when sending alerts for a track" do integrate_views - fixtures :info_requests, :outgoing_messages, :incoming_messages, :raw_emails, :info_request_events, :users, :track_things, :track_things_sent_emails, :public_bodies, :public_body_translations + fixtures :comments, :info_requests, :outgoing_messages, :incoming_messages, :raw_emails, :info_request_events, :users, :track_things, :track_things_sent_emails, :public_bodies, :public_body_translations include LinkToHelper # for main_url before(:each) do diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb index 0ba542630..b4cc0d6e3 100644 --- a/spec/controllers/user_controller_spec.rb +++ b/spec/controllers/user_controller_spec.rb @@ -111,7 +111,7 @@ describe UserController, "when signing in" do get :signin, :r => "/list" response.should render_template('sign') post_redirect = get_last_postredirect - post :signin, { :user_signin => { :email => 'silly@localhost', :password => 'jonespassword' }, + post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' }, :token => post_redirect.token } response.should render_template('confirm') @@ -123,7 +123,7 @@ describe UserController, "when signing in" do get :signin, :r => "/list" post_redirect = get_last_postredirect - post :signin, { :user_signin => { :email => 'silly@localhost', :password => 'jonespassword' }, + post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' }, :token => post_redirect.token } response.should send_email @@ -143,7 +143,7 @@ describe UserController, "when signing in" do # check confirmation URL works session[:user_id].should be_nil get :confirm, :email_token => post_redirect.email_token - session[:user_id].should == users(:silly_name_user).id + session[:user_id].should == users(:unconfirmed_user).id response.should redirect_to(:controller => 'request', :action => 'list', :post_redirect => 1) end diff --git a/spec/fixtures/files/track-response-exim-bounce.email b/spec/fixtures/files/track-response-exim-bounce.email new file mode 100644 index 000000000..8d40380b1 --- /dev/null +++ b/spec/fixtures/files/track-response-exim-bounce.email @@ -0,0 +1,67 @@ +Delivered-To: mysociety.robin@gmail.com +Received: by 10.216.187.197 with SMTP id y47cs98510wem; + Tue, 6 Sep 2011 14:22:44 -0700 (PDT) +Received: by 10.216.203.79 with SMTP id e57mr78207weo.42.1315344164092; + Tue, 06 Sep 2011 14:22:44 -0700 (PDT) +Return-Path: <> +Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74]) + by mx.google.com with ESMTPS id n64si9483505weq.102.2011.09.06.14.22.42 + (version=TLSv1/SSLv3 cipher=OTHER); + Tue, 06 Sep 2011 14:22:43 -0700 (PDT) +Received-SPF: pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) client-ip=89.238.145.74; +Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) smtp.mail= +Received: from Debian-exim by wildfire.ukcod.org.uk with local (Exim 4.69) + id 1R136L-0003xr-1Q + for team@whatdotheyknow.com; Tue, 06 Sep 2011 22:22:37 +0100 +X-Failed-Recipients: user@example.com +Auto-Submitted: auto-replied +From: Mail Delivery System <Mailer-Daemon@wildfire.ukcod.org.uk> +To: team@whatdotheyknow.com +Subject: Mail delivery failed: returning message to sender +Message-Id: <E1R136L-0003xr-1Q@wildfire.ukcod.org.uk> +Date: Tue, 06 Sep 2011 22:22:37 +0100 +List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com> + +This message was created automatically by mail delivery software. + +A message that you sent could not be delivered to one or more of its +recipients. This is a permanent error. The following address(es) failed: + + user@example.com + Unrouteable address + +------ This is a copy of the message, including all the headers. ------ + +Return-path: <team@whatdotheyknow.com> +Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69) + (envelope-from <team@whatdotheyknow.com>) + id 1R136J-0003xp-Td + for user@example.com; Tue, 06 Sep 2011 22:22:36 +0100 +Date: Tue, 6 Sep 2011 22:22:35 +0100 +From: WhatDoTheyKnow <team@whatdotheyknow.com> +To: Nonexistent User <user@example.com> +Subject: Your WhatDoTheyKnow email alert +Mime-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Precedence: bulk +Auto-Submitted: auto-generated +Message-Id: <E1R136J-0003xp-Td@wildfire.ukcod.org.uk> + +FOI requests to 'Maritime and Coastguard Agency' +================================================ + +-- MCA & HM Coastguard Official Vehicles -- +Maritime and Coastguard Agency sent a response to Peter Smith (12 August 2011) + "Peter In response (reference F0000881) to your FOI questions the + MCA answer is:- 1. All MCA vehicles are purchased outright. 2. Yes + there is a volu..." +http://www.whatdotheyknow.com/request/mca_hm_coastguard_official_vehic#incoming-201529 + + +Alter your subscription +======================= + +Please click on the link below to cancel or alter these emails. +http://www.whatdotheyknow.com/c/ie4pkpy70dl4b8flsig + +-- the WhatDoTheyKnow team diff --git a/spec/fixtures/files/track-response-multipart-report.email b/spec/fixtures/files/track-response-multipart-report.email new file mode 100644 index 000000000..4f8e6d86b --- /dev/null +++ b/spec/fixtures/files/track-response-multipart-report.email @@ -0,0 +1,113 @@ +Delivered-To: mysociety.robin@gmail.com +Received: by 10.216.187.197 with SMTP id y47cs96752wem; + Tue, 6 Sep 2011 13:37:26 -0700 (PDT) +Received: by 10.216.212.37 with SMTP id x37mr3361871weo.35.1315341445852; + Tue, 06 Sep 2011 13:37:25 -0700 (PDT) +Return-Path: <> +Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74]) + by mx.google.com with ESMTPS id h49si1800318wed.40.2011.09.06.13.37.25 + (version=TLSv1/SSLv3 cipher=OTHER); + Tue, 06 Sep 2011 13:37:25 -0700 (PDT) +Received-SPF: pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) client-ip=89.238.145.74; +Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) smtp.mail= +Received: from cluster-a.mailcontrol.com ([85.115.52.190]:43258) + by wildfire.ukcod.org.uk with esmtp (Exim 4.69) + id 1R12OV-0003KQ-9c + for team@whatdotheyknow.com; Tue, 06 Sep 2011 21:37:19 +0100 +Received: from mail.example.com ([62.6.240.178]) + by rly22a.srv.mailcontrol.com (MailControl) with ESMTP id p86KbIZV025877 + (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO) + for <team@whatdotheyknow.com>; Tue, 6 Sep 2011 21:37:18 +0100 +Received: from MX05.example.com (10.100.14.57) by GCEX534.PHSGROUP.local + (10.100.21.78) with Microsoft SMTP Server id 14.1.270.1; Tue, 6 Sep 2011 + 21:38:52 +0100 +From: <postmaster@xyz.local> +To: <team@whatdotheyknow.com> +Date: Tue, 6 Sep 2011 21:37:13 +0100 +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com" +X-DSNContext: 7ce717b1 - 1148 - 00000002 - 00000000 +Message-ID: <DEU8FnRwh00000d1b@MX05.example.com> +Subject: Delivery Status Notification (Failure) +X-Scanned-By: MailControl A-12-01-02 (www.mailcontrol.com) on 10.65.0.132 +List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com> + +--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com +Content-Type: text/plain; charset="unicode-1-1-utf-7" + +This is an automatically generated Delivery Status Notification. + +Delivery to the following recipients failed. + + FailedUser@example.com + + + + +--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com +Content-Type: message/delivery-status + +Reporting-MTA: dns;MX05.example.com +Received-From-MTA: dns;MX04.example.com +Arrival-Date: Tue, 6 Sep 2011 21:37:13 +0100 + +Final-Recipient: rfc822;FailedUser@example.com +Action: failed +Status: 5.2.2 +X-Display-Name: Failed User + + +--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com +Content-Type: message/rfc822 + +Received: from MX04.example.com ([10.100.14.56]) by MX05.example.com with + Microsoft SMTPSVC(5.0.2195.6713); Tue, 6 Sep 2011 21:37:13 +0100 +Received: from DCEX553.example.com ([10.211.10.27]) by MX04.example.com with + Microsoft SMTPSVC(5.0.2195.6713); Tue, 6 Sep 2011 21:37:13 +0100 +Received: from cluster-a.mailcontrol.com (85.115.52.190) by mail.example.com + (10.211.10.27) with Microsoft SMTP Server id 14.1.270.1; Tue, 6 Sep 2011 + 20:36:49 +0100 +Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74]) + by rly01a.srv.mailcontrol.com (MailControl) with ESMTP id p86KbAZN016792 + (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO) for + <faileduser@example.com>; Tue, 6 Sep 2011 21:37:11 +0100 +Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69) + (envelope-from <team@whatdotheyknow.com>) id 1R12OL-0003K9-UE for + faileduser@example.com; Tue, 06 Sep 2011 21:37:10 +0100 +Date: Tue, 6 Sep 2011 21:37:09 +0100 +From: WhatDoTheyKnow <team@whatdotheyknow.com> +To: Failed <faileduser@example.com> +Subject: Your WhatDoTheyKnow email alert +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Precedence: bulk +Auto-Submitted: auto-generated +Message-ID: <E1R12OL-0003K9-UE@wildfire.ukcod.org.uk> +X-Mailcontrol-Inbound: 7DN0MnCsYCrl5jj2!rZ4BuxxWQ2q0l7t3Lrex4V7ScCE2eoC2RNzHw== +X-Spam-Score: -0.857 +X-Scanned-By: MailControl A-12-01-02 (www.mailcontrol.com) on 10.65.0.111 +Return-Path: team@whatdotheyknow.com +X-OriginalArrivalTime: 06 Sep 2011 20:37:13.0070 (UTC) FILETIME=[C20250E0:01CC6CD4] + +Requests or responses matching 'bottled water cooler' +===================================================== + +-- HS2 meetings - Agendas and Minutes -- +Warwickshire County Council sent a response to Richard Jones (21 July 2011) + "Dear Mr Jones FREEDOM OF INFORMATION ACT 2000 - INFORMATION + REQUEST Your request for information has now been considered. The + information you have..." +http://www.whatdotheyknow.com/request/hs2_meetings_agendas_and_minutes_2#incoming-195748 + + +Alter your subscription +======================= + +Please click on the link below to cancel or alter these emails. +http://www.whatdotheyknow.com/c/f76ffwifzlo5sk4egr3 + +-- the WhatDoTheyKnow team + + +--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com--
\ No newline at end of file diff --git a/spec/fixtures/users.yml b/spec/fixtures/users.yml index c54ac0985..16ffec034 100644 --- a/spec/fixtures/users.yml +++ b/spec/fixtures/users.yml @@ -21,7 +21,7 @@ silly_name_user: hashed_password: 6b7cd45a5f35fd83febc0452a799530398bfb6e8 # jonespassword updated_at: 2007-11-01 10:39:15.491593 created_at: 2007-11-01 10:39:15.491593 - email_confirmed: false + email_confirmed: true admin_level: 'none' ban_text: '' locale: 'en' @@ -40,3 +40,16 @@ admin_user: ban_text: '' locale: '' about_me: '' +unconfirmed_user: + id: "4" + name: "Unconfirmed" + url_name: unconfirmed + email: unconfirmed@localhost + salt: "-6116981980.392287733335677" + hashed_password: 6b7cd45a5f35fd83febc0452a799530398bfb6e8 # jonespassword + updated_at: 2007-11-01 10:39:15.491593 + created_at: 2007-11-01 10:39:15.491593 + email_confirmed: false + admin_level: 'none' + ban_text: '' + about_me: '' diff --git a/spec/lib/external_command_scripts/output.sh b/spec/lib/external_command_scripts/output.sh deleted file mode 100755 index 0472c89a3..000000000 --- a/spec/lib/external_command_scripts/output.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -out_msg=${1:-out} -err_msg=${2:-} -repeats=${3:-10} -exit_status=${4:-0} - -n=0 -while [ "$n" -lt "$repeats" ] -do - if [ -n "$out_msg" ] - then - echo "$out_msg $n" - fi - if [ -n "$err_msg" ] - then - echo >&2 "$err_msg $n" - fi - n=$[$n + 1] -done - -exit "$exit_status" diff --git a/spec/lib/external_command_spec.rb b/spec/lib/external_command_spec.rb deleted file mode 100644 index 0ff1a9c0a..000000000 --- a/spec/lib/external_command_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -# This is a test of the external_command library - -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') -script_dir = File.join(File.dirname(__FILE__), 'external_command_scripts') -output_script = File.join(script_dir, "output.sh") - -require 'external_command' - -describe "when running ExternalCommand" do - - it "should get correct status code for /bin/true" do - t = ExternalCommand.new("/bin/true").run() - t.status.should == 0 - t.out.should == "" - t.err.should == "" - end - - it "should get correct status code for /bin/false" do - f = ExternalCommand.new("/bin/false").run() - f.status.should == 1 - f.out.should == "" - f.err.should == "" - end - - it "should get stdout and stderr" do - f = ExternalCommand.new(output_script, "out", "err", "10", "23").run() - f.status.should == 23 - f.out.should == (0..9).map {|i| "out #{i}\n"}.join("") - f.err.should == (0..9).map {|i| "err #{i}\n"}.join("") - end - - it "should work with large amounts of data" do - f = ExternalCommand.new(output_script, "a longer output line", "a longer error line", "10000", "5").run() - f.status.should == 5 - f.out.should == (0..9999).map {|i| "a longer output line #{i}\n"}.join("") - f.err.should == (0..9999).map {|i| "a longer error line #{i}\n"}.join("") - end - -end - diff --git a/spec/models/outgoing_mailer_spec.rb b/spec/models/outgoing_mailer_spec.rb index d7587cb41..c96a3fb74 100644 --- a/spec/models/outgoing_mailer_spec.rb +++ b/spec/models/outgoing_mailer_spec.rb @@ -112,7 +112,6 @@ describe OutgoingMailer, "when working out follow up subjects" do it "should not add Re: prefix if there already is a lower case re: prefix" do ir = info_requests(:fancy_dog_request) im = ir.incoming_messages[0] - puts im.raw_email.data om = outgoing_messages(:useless_outgoing_message) om.incoming_message_followup = im diff --git a/spec/models/track_mailer_spec.rb b/spec/models/track_mailer_spec.rb index b90ca7e52..6612641c1 100644 --- a/spec/models/track_mailer_spec.rb +++ b/spec/models/track_mailer_spec.rb @@ -22,7 +22,8 @@ describe TrackMailer do :last_daily_track_email= => true, :save! => true, :url_name => 'test-name', - :get_locale => 'en') + :get_locale => 'en', + :should_be_emailed? => true) User.stub!(:find).and_return([@user]) @user.stub!(:no_xapian_reindex=) end @@ -110,6 +111,36 @@ describe TrackMailer do end + describe 'when a user should not be emailed' do + before do + @user = mock_model(User, :no_xapian_reindex= => false, + :last_daily_track_email= => true, + :save! => true, + :url_name => 'test-name', + :should_be_emailed? => false) + User.stub!(:find).and_return([@user]) + @user.stub!(:no_xapian_reindex=) + end + + it 'should not ask for any daily track things for the user' do + expected_conditions = [ "tracking_user_id = ? and track_medium = ?", @user.id, 'email_daily' ] + TrackThing.should_not_receive(:find).with(:all, :conditions => expected_conditions).and_return([]) + TrackMailer.alert_tracks + end + + + it 'should not set the no_xapian_reindex flag on the user' do + @user.should_not_receive(:no_xapian_reindex=).with(true) + TrackMailer.alert_tracks + end + + it 'should not update the time of the user\'s last daily tracking email' do + @user.should_not_receive(:last_daily_track_email=).with(Time.now) + @user.should_not_receive(:save!) + TrackMailer.alert_tracks + end + end + end describe 'delivering the email' do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index ee6916ffc..751a61060 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -282,3 +282,26 @@ describe User, "when setting a profile photo" do # end end +describe User, "when unconfirmed" do + fixtures :users + + before do + @user = users(:unconfirmed_user) + end + + it "should not be emailed" do + @user.should_be_emailed?.should be_false + end +end + +describe User, "when emails have bounced" do + fixtures :users + + it "should record bounces" do + User.record_bounce_for_email("bob@localhost", "The reason we think the email bounced (e.g. a bounce message)") + + user = User.find_user_by_email("bob@localhost") + user.email_bounced_at.should_not be_nil + user.email_bounce_message.should == "The reason we think the email bounced (e.g. a bounce message)" + end +end diff --git a/spec/script/handle-mail-replies_spec.rb b/spec/script/handle-mail-replies_spec.rb new file mode 100644 index 000000000..856476c3f --- /dev/null +++ b/spec/script/handle-mail-replies_spec.rb @@ -0,0 +1,33 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') +require "external_command" + +def mail_reply_test(email_filename) + Dir.chdir RAILS_ROOT do + xc = ExternalCommand.new("script/handle-mail-replies", "--test") + xc.run(load_file_fixture(email_filename)) + + xc.err.should == "" + return xc + end +end + +describe "When filtering" do + it "should detect an Exim bounce" do + r = mail_reply_test("track-response-exim-bounce.email") + r.status.should == 1 + r.out.should == "user@example.com\n" + end + + it "should pass on a non-bounce message" do + r = mail_reply_test("incoming-request-bad-uuencoding.email") + r.status.should == 0 + r.out.should == "" + end + + it "should detect a multipart bounce" do + r = mail_reply_test("track-response-multipart-report.email") + r.status.should == 1 + r.out.should == "FailedUser@example.com\n" + end +end + diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 42c5ff6bf..2ddf839da 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -148,7 +148,7 @@ if $tempfilecount.nil? end def load_raw_emails_data(raw_emails) - raw_email = raw_emails(:useless_raw_email) + raw_email = raw_emails(:useless_raw_email) begin raw_email.destroy_file_representation! rescue Errno::ENOENT |