]> git.openstreetmap.org Git - rails.git/commitdiff
Merge 16743:16811 from trunk.
authorTom Hughes <tom@compton.nu>
Mon, 3 Aug 2009 23:50:47 +0000 (23:50 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 3 Aug 2009 23:50:47 +0000 (23:50 +0000)
15 files changed:
app/controllers/user_controller.rb
app/models/notifier.rb
app/models/user.rb
app/views/notifier/reset_password.text.html.erb [deleted file]
app/views/notifier/reset_password.text.plain.erb [deleted file]
app/views/site/edit.html.erb
app/views/user/reset_password.html.erb [new file with mode: 0644]
config/locales/de.yml
config/locales/en.yml
config/locales/is.yml
config/locales/pt-BR.yml
db/migrate/038_add_message_sender_index.rb [new file with mode: 0644]
db/migrate/039_create_oauth_tables.rb [moved from db/migrate/038_create_oauth_tables.rb with 100% similarity]
db/migrate/040_add_fine_o_auth_permissions.rb [moved from db/migrate/039_add_fine_o_auth_permissions.rb with 100% similarity]
db/migrate/041_add_foreign_keys_to_oauth_tables.rb [moved from db/migrate/040_add_foreign_keys_to_oauth_tables.rb with 100% similarity]

index 1e70fe08f0b1e8f679395cd50f5d2d51040125e7..6f57f4f4abc3fef272128ce8c084555a9eff12a7 100644 (file)
@@ -98,9 +98,9 @@ class UserController < ApplicationController
       if user
         token = user.tokens.create
         Notifier.deliver_lost_password(user, token)
-        flash[:notice] = t 'user.lost_password.notice email on way'
+        @notice = t 'user.lost_password.notice email on way'
       else
-        flash[:notice] = t 'user.lost_password.notice email cannot find'
+        @notice = t 'user.lost_password.notice email cannot find'
       end
     end
   end
@@ -108,25 +108,28 @@ class UserController < ApplicationController
   def reset_password
     @title = t 'user.reset_password.title'
 
-    if params['token']
+    if params[:token]
       token = UserToken.find_by_token(params[:token])
+
       if token
-        pass = OSM::make_token(8)
-        user = token.user
-        user.pass_crypt = pass
-        user.pass_crypt_confirmation = pass
-        user.active = true
-        user.email_valid = true
-        user.save!
-        token.destroy
-        Notifier.deliver_reset_password(user, pass)
-        flash[:notice] = t 'user.reset_password.flash changed check mail'
+        if params[:user]
+          @user = token.user
+          @user.pass_crypt = params[:user][:pass_crypt]
+          @user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation]
+          @user.active = true
+          @user.email_valid = true
+
+          if @user.save
+            token.destroy
+            flash[:notice] = t 'user.reset_password.flash changed'
+            redirect_to :action => 'login'
+          end
+        end
       else
         flash[:notice] = t 'user.reset_password.flash token bad'
+        redirect_to :action => 'lost_password'
       end
     end
-
-    redirect_to :action => 'login'
   end
 
   def new
index ba4530e9927165c6f0cf352e41ae70fbb1bfd437..35b521e1fdfdd4918f82f3aa604a97a4f7b331d4 100644 (file)
@@ -22,13 +22,7 @@ class Notifier < ActionMailer::Base
     subject I18n.t('notifier.lost_password.subject')
     body :url => url_for(:host => SERVER_URL,
                          :controller => "user", :action => "reset_password",
-                         :email => user.email, :token => token.token)
-  end
-
-  def reset_password(user, pass)
-    common_headers user
-    subject I18n.t('notifier.reset_password.subject')
-    body :pass => pass
+                         :token => token.token)
   end
 
   def gpx_success(trace, possible_points)
index 5b6a97f39d884d53aecb8db4109bd49f6fa42f48..1e594479728bde84bdad8ae237b368c9820762a2 100644 (file)
@@ -4,7 +4,7 @@ class User < ActiveRecord::Base
   has_many :traces, :conditions => { :visible => true }
   has_many :diary_entries, :order => 'created_at DESC'
   has_many :messages, :foreign_key => :to_user_id, :conditions => { :to_user_visible => true }, :order => 'sent_on DESC'
-  has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => { :message_read => false }, :order => 'sent_on DESC'
+  has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => { :to_user_visible => true, :message_read => false }, :order => 'sent_on DESC'
   has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :conditions => { :from_user_visible => true }, :order => 'sent_on DESC'
   has_many :friends, :include => :befriendee, :conditions => ["users.visible = ?", true]
   has_many :tokens, :class_name => "UserToken"
diff --git a/app/views/notifier/reset_password.text.html.erb b/app/views/notifier/reset_password.text.html.erb
deleted file mode 100644 (file)
index 39ea35b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<p><%= t 'notifier.reset_password_html.greeting' %></p>
-
-<p><%= t 'notifier.reset_password_html.reset', :new_password => @pass %></p>
diff --git a/app/views/notifier/reset_password.text.plain.erb b/app/views/notifier/reset_password.text.plain.erb
deleted file mode 100644 (file)
index aab4d13..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= t 'notifier.reset_password_plain.greeting' %>
-
-<%= t 'notifier.reset_password_plain.reset', :new_password => @pass %>
index d7c47101a6c707369a1e2eff5e777be8c638e9b0..142d7a3f312f1678b2a890c49bd7ab4144a1658e 100644 (file)
@@ -8,7 +8,7 @@
 <p><%= t 'site.edit.not_public' %></p>
 <p><%= t 'site.edit.not_public_description', 
 :user_page => (link_to t('site.edit.user_page_link'), {:controller => 'user', :action => 'account', :display_name => @user.display_name, :anchor => 'public'}) %></p>
-<p><%= t 'site.edit.anon_edits', :link => link_to(t('site.edit.anon_edit_link_text'), t('site.edit.anon_edits_link')) %> (<a href=""></a>)</p>
+<p><%= t 'site.edit.anon_edits', :link => link_to(t('site.edit.anon_edits_link_text'), t('site.edit.anon_edits_link')) %></p>
 <% else %>
 <% content_for :greeting do %>
 <% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
diff --git a/app/views/user/reset_password.html.erb b/app/views/user/reset_password.html.erb
new file mode 100644 (file)
index 0000000..458a608
--- /dev/null
@@ -0,0 +1,14 @@
+<h1><%= t 'user.reset_password.heading' %></h1>
+
+<%= error_messages_for :user %>
+
+<% form_tag do %>
+<%= hidden_field_tag(:token, params[:token]) %>
+<table id="loginForm">
+  <tr><td class="fieldName"><%= t 'user.reset_password.password' %></td><td><%= password_field(:user, :pass_crypt,{:size => 30, :maxlength => 255, :tabindex => 4}) %></td></tr>
+  <tr><td class="fieldName"><%= t 'user.reset_password.confirm password' %></td><td><%= password_field(:user, :pass_crypt_confirmation,{:size => 30, :maxlength => 255, :tabindex => 5}) %></td></tr>
+  
+  <tr><td colspan=2>&nbsp;<!--vertical spacer--></td></tr>
+  <tr><td></td><td align=right><input type="submit" value="<%= t'user.reset_password.reset' %>" tabindex="6"></td></tr>
+</table>
+<% end %>
index d2effb80bc86f2656ff1aebd78fc1b28a8487567..514c8a4ade9a09ac6f10f68fff7eb5be2db6d95a 100644 (file)
@@ -239,6 +239,7 @@ de:
       showing_page: "Seite"
       of: "von"
     changeset:
+      id: "#{{id}}"
       still_editing: "(in Bearbeitung)"
       anonymous: "Anonym"
       no_comment: "(kein Kommentar)"
@@ -254,6 +255,15 @@ de:
       area: "Bereich"
     list:
       title: "Changesets"
+      title_user: "Changesets von {{user}}"
+      title_bbox: "Changesets in {{bbox}}"
+      title_user_bbox: "Changesets von {{user}} in {{bbox}}"
+
+      heading: "Changesets"
+      heading_user: "Changesets"
+      heading_bbox: "Changesets"
+      heading_user_bbox: "Changesets"
+
       description: "Letzte Änderungen"
       description_user: "Letzte Änderungen von {{user}}"
       description_bbox: "Letzte Änderungen in {{bbox}}"
index 8c685df651e4db4ea38005012c213ac48a4f6916..97fe3ab011d1721b5a6128ef02148e83f6a4879e 100644 (file)
@@ -260,9 +260,9 @@ en:
       title_user_bbox: "Changesets by {{user}} within {{bbox}}"
 
       heading: "Changesets"
-      heading_user: "Changesets by {{user}}"
-      heading_bbox: "Changesets within {{bbox}}"
-      heading_user_bbox: "Changesets by {{user}} within {{bbox}}"
+      heading_user: "Changesets"
+      heading_bbox: "Changesets"
+      heading_user_bbox: "Changesets"
 
       description: "Recent changes"
       description_user: "Changesets by {{user}}"
@@ -533,14 +533,6 @@ en:
       greeting: "Hi,"
       hopefully_you: "Someone (possibly you) has asked for the password to be reset on this email address's openstreetmap.org account."
       click_the_link: "If this is you, please click the link below to reset your password."
-    reset_password:
-      subject: "[OpenStreetMap] Password reset"
-    reset_password_plain:
-      greeting: "Hi,"
-      reset: "Your password has been reset to {{new_password}}"
-    reset_password_html:
-      greeting: "Hi,"
-      reset: "Your password has been reset to {{new_password}}"
   message:
     inbox:
       title: "Inbox"
@@ -852,15 +844,19 @@ en:
       account not active: "Sorry, your account is not active yet.<br>Please click on the link in the account confirmation email to activate your account."
       auth failure: "Sorry, couldn't log in with those details."
     lost_password:
-      title: "lost password"
+      title: "Lost password"
       heading: "Forgotten Password?"
       email address: "Email Address:"
       new password button: "Send me a new password"
       notice email on way: "Sorry you lost it :-( but an email is on its way so you can reset it soon."
       notice email cannot find: "Couldn't find that email address, sorry."
     reset_password:
-      title: "reset password"
-      flash changed check mail: "Your password has been changed and is on its way to your mailbox :-)"
+      title: "Reset password"
+      heading: "Reset Password"
+      password: "Password: "
+      confirm password: "Confirm Password: "
+      reset: "Reset Password"
+      flash changed: "Your password has been changed."
       flash token bad: "Didn't find that token, check the URL maybe?"
     new:
       title: "Create account"
index 86ae92ffa77b88c230e685c6bb2a7c53850ab289..2c25a7778c381ec400672fea03d94c069f497e1f 100644 (file)
@@ -258,9 +258,9 @@ is:
       title_user_bbox: "Breytingar eftir {{user}} innan {{bbox}}"
 
       heading: "Breytingarsett"
-      heading_user: "Breytingar eftir {{user}}"
-      heading_bbox: "Breytingar innan {{bbox}}"
-      heading_user_bbox: "Breytingar eftir {{user}} innan {{bbox}}"
+      heading_user: "Breytingarsett"
+      heading_bbox: "Breytingarsett"
+      heading_user_bbox: "Breytingarsett"
 
       description: "Nýlegar breytingar"
       description_user: "Breytingar eftir {{user}}"
index f61716dc3bf80b85f1eaf9e690bc88a8e637716d..1545b6e1e429a3592a6c88d2c8853b01e470d4ae 100644 (file)
@@ -72,6 +72,10 @@ pt-BR:
         description: "Descrição"
         languages: "Línguas"
         pass_crypt: "Senha"
+  printable_name:
+    with_id: "{{id}}"
+    with_version: "{{id}}, v{{version}}"
+    with_name: "{{name}} ({{id}})"
   map:
     view: "Ver"
     edit: "Editar"
@@ -83,6 +87,14 @@ pt-BR:
       download: "Baixar {{changeset_xml_link}} ou {{osmchange_xml_link}}"
       changesetxml: "XML do conjunto de alterações"
       osmchangexml: "osmChange XML"
+    changeset_navigation:
+      user:
+        name_tooltip: "Ver edições de {{user}}"
+        prev_tooltip: "Editado anteriormente por {{user}}"
+        next_tooltip: "Editado posteriormente por {{user}}"
+      all:
+        prev_tooltip: "Conjunto de alterações anterior"
+        next_tooltip: "Próximo conjunto de alteções"
     changeset_details:
       created_at: "Criado em:"
       closed_at: "Fechado em:"
@@ -91,9 +103,15 @@ pt-BR:
       no_bounding_box: "Nenhum limite de área foi armazenado para estas alterações."
       show_area_box: "Área de exibição"
       box: "Área"
-      has_nodes: "Tem os seguintes {{count}} pontos:"
-      has_ways: "Tem os seguintes {{count}} caminhos:"
-      has_relations: "tem as seguintes {{count}} relações:"
+      has_nodes:
+        one: "Tem o seguinte {{count}} ponto:"
+        other: "Tem os seguintes {{count}} pontos:"
+      has_ways:
+        one: "Tem o seguinte {{count}} caminho:"
+        other: "Tem os seguintes {{count}} caminhos:"
+      has_relations:
+        one: "Tem a seguinte {{count}} relação:"
+        other: "Tem as seguintes {{count}} relações:"
     common_details: 
       edited_at: "Editado em:"
       edited_by: "Editado por:"
@@ -105,20 +123,27 @@ pt-BR:
     map:
       loading: "Carregando..."
       deleted: "Apagado"
+      larger:
+        area: "Ver área em um mapa maior"
+        node: "Ver ponto em um mapa maior"
+        way: "Ver caminho em um mapa maior"
+        relation: "Ver relação em um mapa maior"
     node_details:
       coordinates: "Coordenadas: "
       part_of: "Parte de:"
     node_history:
       node_history: "Histórico do ponto"
+      node_history_title: "Histórico do ponto: {{node_name}}"
       download: "{{download_xml_link}} ou {{view_details_link}}"
       download_xml: "Baixar XML"
       view_details: "ver detalhes"
     node:
       node: "Ponto"
       node_title: "Ponto: {{node_name}}"
-      download: "{{download_xml_link}} ou {{view_history_link}}"
+      download: "{{download_xml_link}}, {{view_history_link}} ou {{edit_link}}"
       download_xml: "Baixar XML"
       view_history: "ver histórico"
+      edit: "editar"
     not_found:
       sorry: "Desculpe, o {{type}} com o ID {{id}}, não pode ser encontrado."
       type:
@@ -134,6 +159,16 @@ pt-BR:
     relation_history:
       relation_history: "Histórico de Relação"
       relation_history_title: "Histórico da Relação: {{relation_name}}"
+      download: "{{download_xml_link}} ou {{view_details_link}}"
+      download_xml: "Baixar XML"
+      view_details: "ver detalhes"
+    relation_member:
+      entry: "{{type}} {{name}}"
+      entry_role: "{{type}} {{name}} como {{role}}"
+      type:
+        node: "Ponto"
+        way: "Caminho"
+        relation: "Relação"
     relation:
       relation: "Relação"
       relation_title: "Relação: {{relation_name}}"
@@ -198,11 +233,13 @@ pt-BR:
       download: "{{download_xml_link}} ou {{view_history_link}}"
       download_xml: "Baixar XML"
       view_history: "ver histórico"
+      edit: "editar"
   changeset:
     changeset_paging_nav: 
       showing_page: "Exibindo página"
       of: "de"
     changeset:
+      id: "#{{id}}"
       still_editing: "(ainda editando)"
       anonymous: "Anônimo"
       no_comment: "(nenhum)"
@@ -216,27 +253,21 @@ pt-BR:
       user: "Usuário"
       comment: "Comentário"
       area: "Área"
-    list_bbox:
-      history: "Histórico"
-      changesets_within_the_area: "Alterações na área:"
-      show_area_box: "exibir limites da área"
-      no_changesets: "Sem alterações"
-      all_changes_everywhere: "Para todas as alterações, de qualquer localidade, ver {{recent_changes_link}}"
-      recent_changes: "Alterações Recentes"
-      no_area_specified: "Área não especificada"
-      first_use_view: "Primeiro use o {{view_tab_link}} para mover ou ampliar para uma área de interesse, e então clique na aba de histórico."
-      view_the_map: "ver o mapa"
-      view_tab: "ver aba"
-      alternatively_view: "Alternativamente, ver tudo {{recent_changes_link}}"
     list:
-      recent_changes: "Alterações Recentes"
-      recently_edited_changesets: "Conjunto de alterações recentes:"
-      for_more_changesets: "Para mais conjuntos de alterações, selecione um usuário e veja suas edições, ou veja o 'histórico' de edições de uma área específica."
-    list_user:
-      edits_by_username: "Edições de {{username_link}}"
-      no_visible_edits_by: "Sem edições visíveis de {{name}}."
-      for_all_changes: "Para alterações feitas por todos usuários veja {{recent_changes_link}}"
-      recent_changes: "Alterações Recentes"
+      title: "Conjuntos de alterações"
+      title_user: "Conjuntos de alterações de {{user}}"
+      title_bbox: "Conjuntos de alterações em {{bbox}}"
+      title_user_bbox: "Conjuntos de alterações de {{user}} em {{bbox}}"
+
+      heading: "Conjuntos de alterações"
+      heading_user: "Conjuntos de alterações"
+      heading_bbox: "Conjuntos de alterações"
+      heading_user_bbox: "Conjuntos de alterações"
+
+      description: "Alterações recentes"
+      description_user: "Conjuntos de alterações de {{user}}"
+      description_bbox: "Conjuntos de alterações em {{bbox}}"
+      description_user_bbox: "Conjuntos de alterações de {{user}} em {{bbox}}"
   diary_entry:
     new:
       title: "Nova Entrada de Diário"
@@ -269,6 +300,7 @@ pt-BR:
       login: "Entrar"
       save_button: "Salvar"
     no_such_entry:
+      title: "Entrada de diário inexistente"
       heading: "Não há entrada no diário com o id: {{id}}"
       body: "Desculpe, não há entrada no diário ou comentário com o id {{id}}. Por favor, verifique se digitou corretamente, ou talvez o link que clicou esteja errado."
     no_such_user:
@@ -319,14 +351,42 @@ pt-BR:
   geocoder:
     search:
       title:
-        latlon: 'Resultados de <a href="http://openstreetmap.org/">Internal</a>'
-        us_postcode: 'Resultados de <a href="http://geocoder.us/">Geocoder.us</a>'
-        uk_postcode: 'Resultados de <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>'
-        ca_postcode: 'Resultados de <a href="http://geocoder.ca/">Geocoder.CA</a>'
-        osm_namefinder: 'Resultados de <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
-        geonames: 'Resultados de <a href="http://www.geonames.org/">GeoNames</a>'
+        latlon: 'Resultados <a href="http://openstreetmap.org/">Internos</a>'
+        us_postcode: 'Resultados do <a href="http://geocoder.us/">Geocoder.us</a>'
+        uk_postcode: 'Resultados do <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>'
+        ca_postcode: 'Resultados do <a href="http://geocoder.ca/">Geocoder.CA</a>'
+        osm_namefinder: 'Resultados do <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
+        geonames: 'Resultados do <a href="http://www.geonames.org/">GeoNames</a>'
+    search_osm_namefinder:
+      prefix: "{{type}} "
+      suffix_place: ", {{distance}} {{direction}} de {{placename}}"
+      suffix_parent: "{{suffix}} ({{parentdistance}} {{parentdirection}} de {{parentname}})"
+      suffix_suburb: "{{suffix}}, {{parentname}}"
+    description:
+      title:
+        osm_namefinder: '{{types}} de <a href="http://gazetteer.openstreetmap.org/namefinder/">OpenStreetMap Namefinder</a>'
+        geonames: 'Localização do <a href="http://www.geonames.org/">GeoNames</a>'
+      types:
+        cities: Cidades
+        towns: Cidades
+        places: Lugares
+    description_osm_namefinder:
+      prefix: "{{distance}} {{direction}} de {{type}} "
     results:
-      no_results: "Não foram encontrados resultados"
+      no_results: "Nenhum resultado encontrado"
+    distance:
+      zero: "a menos de 1km"
+      one: "a cerca de 1km"
+      other: "a cerca de {{count}}km"
+    direction:
+      south_west: "sudoeste"
+      south: "sul"
+      south_east: "sudeste"
+      east: "leste"
+      north_east: "nordeste"
+      north: "norte"
+      north_west: "noroeste"
+      west: "oeste"
   layouts:
     project_name:
       # in <title>
@@ -362,7 +422,7 @@ pt-BR:
     gps_traces_tooltip: "Gerenciar trilhas"
     user_diaries: "Diários de Usuário"
     user_diaries_tooltip: "Ver os diários dos usuários"
-    tag_line: "O Wiki de Mapas Livres do Mundo"
+    tag_line: "O Wiki de Mapas Livres"
     intro_1: "OpenStreetMap é um mapa livre e editável do mundo. Ele é feito por pessoas como você."
     intro_2: "OpenStreetMap te permite ver, editar e usar dados geográficos de maneira colaborativa de qualquer lugar do mundo."
     intro_3: "A hospedagem dos dados do OpenStreetMap é cedida gentilmente por {{ucl}} e {{bytemark}}."
@@ -377,7 +437,7 @@ pt-BR:
     help_wiki_url: "http://wiki.openstreetmap.org"
     news_blog: "Blog de notícias"
     news_blog_tooltip: "Blog de notícias sobre o OpenStreetMap, dados geográficos livres, etc."
-    shop: "Compras"
+    shop: "Produtos"
     shop_tooltip: "Compre produtos com a marca OpenStreetMap" 
     shop_url: http://wiki.openstreetmap.org/wiki/Merchandise
     sotm: 'Venha para a OpenStreetMap Conference 2009 (The State of the Map) de 10 a 12 de julho em Amsterdam!'
@@ -430,10 +490,10 @@ pt-BR:
       introductory_video: "Você pode assistir um vídeo introdutório (em inglês) sobre o OpenStreetMap aqui:"
       more_videos: "Existem mais vídeos aqui:"
       the_wiki: "Continue lendo sobre o OpenStreetMap no wiki:"
-      opengeodata: "OpenGeoData.org é o blog do OpenStreetMap, que também dispõe
-de podcasts:"
-      wiki_signup: "Você também pode querer registrar-se no wiki do
-OpenStreetMap em:"
+      the_wiki_url: "http://wiki.openstreetmap.org/wiki/Beginners%27_Guide"
+      opengeodata: "OpenGeoData.org é o blog do OpenStreetMap, que também dispõe de podcasts:"
+      wiki_signup: "Você também pode querer registrar-se no wiki do OpenStreetMap em:"
+      wiki_signup_url: "http://wiki.openstreetmap.org/index.php?title=Special:Userlogin&type=signup&returnto=Main_Page"
       # next four translations are in pairs : please word wrap appropriately
       user_wiki_1: "É recomendável que você crie sua página no wiki, incluindo tags de "
       user_wiki_2: "categorias marcando onde você está, como [[Category:Users_in_Brazil]]."
@@ -496,6 +556,7 @@ OpenStreetMap em:"
       unread_button: "Marcar como não lida"
       read_button: "Marcar como lida"
       reply_button: "Responder"
+      delete_button: "Apagar"
     new:
       title: "Enviar mensagem"
       send_message_to: "Enviar uma nova mensagem para {{name}}"
@@ -531,20 +592,25 @@ OpenStreetMap em:"
       reading_your_sent_messages: "Lendo suas mensagens enviadas"
       to: "Para"
       back_to_outbox: "Voltar para a caixa de saída"
+    sent_message_summary:
+      delete_button: "Delete"
     mark:
       as_read: "Mensagem marcada como lida"
       as_unread: "Mensagem marcada como não lida"
+    delete:
+      deleted: "Mensagem apagada"
   site:
     index:
       js_1: "Você está usando um navegador sem suporte a javascript, ou está com o javascript desativado."
       js_2: "O OpenStreetMap usa javascript para a navegação dos mapas."
       js_3: 'Você pode tentar o <a href="http://tah.openstreetmap.org/Browse/">navegador estático Tiles@Home</a> se não for possível ativar o javascript.'
       permalink: "Link Permanente"
+      shortlink: "Link Curto"
       license:
         notice: "Licenciado sob a {{license_name}} para o {{project_name}} e seus contribuidores."
         license_name: "Creative Commons de Atribuição-Compartilhamento pela Mesma Licença 2.0"
         license_url: "http://creativecommons.org/licenses/by-sa/2.0/"
-        project_name: "projeto OpenStreetMap"
+        project_name: "Projeto OpenStreetMap"
         project_url: "http://openstreetmap.org"
     edit:
       not_public: "Você não configurou suas edições para serem públicas."
@@ -566,19 +632,89 @@ OpenStreetMap em:"
     key:
       map_key: "Map key"
       map_key_tooltip: "Map key para a renderização do mapnik neste nível de zoom"
+      table:
+        heading: "Legenda para z{{zoom_level}}"
+        entry:
+          motorway: "Motorway"
+          trunk: "Trunk road"
+          primary: "Primary road"
+          secondary: "Secondary road"
+          unclassified: "Unclassified road"
+          unsurfaced: "Unsurfaced road"
+          track: "Track"
+          byway: "Byway"
+          bridleway: "Bridleway"
+          cycleway: "Cycleway"
+          footway: "Footway"
+          rail: "Railway"
+          subway: "Subway"
+          tram:
+            - Light rail
+            - tram
+          cable:
+            - Cable car
+            - chair lift
+          runway:
+            - Airport Runway
+            - taxiway
+          apron:
+            - Airport apron
+            - terminal
+          admin: "Administrative boundary"
+          forest: "Forest"
+          wood: "Wood"
+          golf: "Golf course"
+          park: "Park"
+          resident: "Residential area"
+          tourist: "Tourist attraction"
+          common:
+            - Common
+            - meadow
+          retail: "Retail area"
+          industrial: "Industrial area"
+          commercial: "Commercial area"
+          heathland: "Heathland"
+          lake:
+            - Lake
+            - reservoir
+          farm: "Farm"
+          brownfield: "Brownfield site"
+          cemetery: "Cemetery"
+          allotments: "Allotments"
+          pitch: "Sports pitch"
+          centre: "Sports centre"
+          reserve: "Nature reserve"
+          military: "Military area"
+          school: "School; university"
+          building: "Significant building"
+          station: "Railway station"
+          summit:
+            - Summit
+            - peak
+          tunnel: "Dashed casing = tunnel"
+          bridge: "Black casing = bridge"
+          private: "Private access"
+          permissive: "Permissive access"
+          destination: "Destination access"
+          construction: "Roads under construction"
   trace:
     create:
       upload: "Enviar Trilha GPS"
       trace_uploaded: "Seu arquivo GPX foi enviado e está aguardando para ser inserido no banco de dados. Isso normalmente leva meia hora, e um e-mail será enviado para você quando ocorrer."
     edit:
+      title: "Editando trilha {{name}}"
+      heading: "Editando trilha {{name}}"
       filename: "Nome do arquivo:"
-      uploaded_at: "Subido em:"
+      download: "baixar"
+      uploaded_at: "Enviado em:"
       points: "Pontos:"
       start_coord: "Coordenada de início:"
+      map: "mapa"
       edit: "editar"
       owner: "Dono:"
       description: "Descrição:"
       tags: "Tags:"
+      tags_help: "separados por vírgulas"
       save_button: "Salvar Mudanças"
     no_such_user:
       title: "Usuário não encontrado"
@@ -588,7 +724,10 @@ OpenStreetMap em:"
       upload_gpx: "Enviar Arquivo GPX"
       description: "Descrição"
       tags: "Etiquetas"
+      tags_help: "separados por vírgulas"
       public: "Público?"
+      public_help: "o que significa isso?"
+      public_help_url: "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
       upload_button: "Enviar"
       help: "Ajuda"
       help_url: "http://wiki.openstreetmap.org/wiki/Upload"
@@ -600,6 +739,8 @@ OpenStreetMap em:"
     trace_optionals:
       tags: "Etiquetas"
     view:
+      title: "Visualizando trilha {{name}}"
+      heading: "Visualizando trilha {{name}}"
       pending: "PENDENTE"
       filename: "Nome do arquivo:"
       download: "baixar"
@@ -615,7 +756,6 @@ OpenStreetMap em:"
       make_public: "Torne esta trilha permanentemente pública"
       edit_track: "Edite esta trilha"
       delete_track: "Apague esta trilha"
-      heading: "Visualizando trilha {{name}}"
       trace_not_found: "Trilha não encontrada!"
     trace_paging_nav:
       showing: "Mostrando página"
@@ -642,14 +782,14 @@ OpenStreetMap em:"
     delete:
       scheduled_for_deletion: "Trilha marcada para ser apagada"
     make_public:
-      made_public: "Trilha foi feita pública"
+      made_public: "Trilha publicada"
   user:
     login:
       title: "Entrar"
       heading: "Entrar"
-      please login: "Por favor entre ou {{create_user_link}}."
+      please login: "Por favor entre as informações de sua conta para entrar, ou {{create_user_link}}."
       create_account: "crie uma nova conta"
-      email or username: "Endereço de Email ou Nome de Usuário: "
+      email or username: "Email ou Nome de Usuário: "
       password: "Senha: "
       lost password link: "Esqueceu sua senha?"
       login_button: "Entrar"
@@ -672,7 +812,7 @@ OpenStreetMap em:"
       no_auto_account_create: "Infelizmente não foi possível criar uma conta para você automaticamente."
       contact_webmaster: 'Por favor contate o <a href="mailto:webmaster@openstreetmap.org">webmaster</a> (em inglês) para que uma conta seja criada - nós a criaremos o mais rápido possível. '
       fill_form: "Preencha o formulário e lhe enviaremos um email rapidamente para ativar sua conta."
-      license_agreement: 'Ao criar uma conta, você aceita que todos os dados enviados para o openstreetmap.org serão licenciados (não-exclusivamente) sob a <a href="http://creativecommons.org/licenses/by-sa/2.0/">licença Creative Commons (Atribuição-Compartilhamento pela mesma Licença)</a>.'
+      license_agreement: 'Ao criar uma conta, você aceita que todos os dados enviados para o openstreetmap.org serão licenciados (não-exclusivamente) sob a <a href="http://creativecommons.org/licenses/by-sa/2.0/">licença Creative Commons de Atribuição e Compartilhamento pela mesma Licença</a>.'
       email address: "Endereço de Email: "
       confirm email address: "Confirme o Endereço de Email: "
       not displayed publicly: 'Não exibir publicamente (veja a <a href="http://wiki.openstreetmap.org/wiki/Privacy_Policy" title="política de privacidade no wiki incluindo seção sobre endereços de email">política de privacidade</a>)'
@@ -705,12 +845,13 @@ OpenStreetMap em:"
       add image: "Adicionar Imagem"
       description: "Descrição"
       user location: "Local do usuário"
-      no home location: "Nenhuma localização de casa foi definida."
+      no home location: "Nenhuma localização foi definida."
       if set location: "Se você definir a sua localização, um mapa bonito vai aparecer abaixo. Você pode definir sua localização na página de {{settings_link}}."
       settings_link_text: "configurações"
       your friends: "Seus amigos"
       no friends: "Você ainda não adicionou amigos."
-      km away: "{{count}} km de distância"
+      km away: "{{count}}km de distância"
+      m away: "{{count}}m de distância"
       nearby users: "Usuários próximos: "
       no nearby users: "Não existem usuários mapeando por perto."
       change your settings: "mudar suas configurações"
diff --git a/db/migrate/038_add_message_sender_index.rb b/db/migrate/038_add_message_sender_index.rb
new file mode 100644 (file)
index 0000000..2b9b134
--- /dev/null
@@ -0,0 +1,9 @@
+class AddMessageSenderIndex < ActiveRecord::Migration
+  def self.up
+    add_index :messages, [:from_user_id], :name=> "messages_from_user_id_idx"
+  end
+
+  def self.down
+    drop_index :messages, :name=> "messages_from_user_id_idx"
+  end
+end