From: Tom Hughes Date: Sun, 31 May 2009 17:26:41 +0000 (+0000) Subject: Merged I18N branch to head. X-Git-Tag: live~7372 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/d0b845fc6025f2fb84a4cf4fa10cbb71084843a7?hp=689dc6e451cb177a50d633af30ce27d5f637eb6d Merged I18N branch to head. --- diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 64eb2180f..c5624db14 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -100,6 +100,19 @@ class ApplicationController < ActionController::Base response.headers['Error'] = message render :text => message, :status => status end + + def set_locale + if @user + if !@user.languages.empty? + request.user_preferred_languages = @user.languages + elsif !request.user_preferred_languages.empty? + @user.languages = request.user_preferred_languages + @user.save + end + end + + I18n.locale = request.compatible_language_from(I18n.available_locales) + end def api_call_handle_error begin @@ -134,7 +147,6 @@ class ApplicationController < ActionController::Base end private - # extract authorisation credentials from headers, returns user = nil if none def get_auth_data if request.env.has_key? 'X-HTTP_AUTHORIZATION' # where mod_rewrite might have put it diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index d8399c19e..d3af27217 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -2,6 +2,7 @@ class BrowseController < ApplicationController layout 'site' before_filter :authorize_web + before_filter :set_locale before_filter { |c| c.check_database_readable(true) } def start @@ -63,7 +64,7 @@ class BrowseController < ApplicationController @way_pages, @ways = paginate(:old_ways, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'way_page') @relation_pages, @relations = paginate(:old_relations, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'relation_page') - @title = "Changeset | #{@changeset.id}" + @title = "#{I18n.t('browse.changeset.title')} | #{@changeset.id}" @next = Changeset.find(:first, :order => "id ASC", :conditions => [ "id > :id", { :id => @changeset.id }] ) @prev = Changeset.find(:first, :order => "id DESC", :conditions => [ "id < :id", { :id => @changeset.id }] ) rescue ActiveRecord::RecordNotFound diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 778bb73ae..704a2a0f6 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -6,6 +6,7 @@ class ChangesetController < ApplicationController session :off, :except => [:list, :list_user, :list_bbox] before_filter :authorize_web, :only => [:list, :list_user, :list_bbox] + before_filter :set_locale, :only => [:list, :list_user, :list_bbox] before_filter :authorize, :only => [:create, :update, :delete, :upload, :include, :close] before_filter :require_public_data, :only => [:create, :update, :delete, :upload, :include, :close] before_filter :check_api_writable, :only => [:create, :update, :delete, :upload, :include] diff --git a/app/controllers/changeset_tag_controller.rb b/app/controllers/changeset_tag_controller.rb index 3e8db3fc2..374e21ca1 100644 --- a/app/controllers/changeset_tag_controller.rb +++ b/app/controllers/changeset_tag_controller.rb @@ -5,5 +5,4 @@ class ChangesetTagController < ApplicationController @tags = ChangesetTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", params[:query][:query].to_s] ) end - end diff --git a/app/controllers/diary_entry_controller.rb b/app/controllers/diary_entry_controller.rb index 3ee36af21..d5f6f59fc 100644 --- a/app/controllers/diary_entry_controller.rb +++ b/app/controllers/diary_entry_controller.rb @@ -2,12 +2,13 @@ class DiaryEntryController < ApplicationController layout 'site', :except => :rss before_filter :authorize_web + before_filter :set_locale before_filter :require_user, :only => [:new, :edit] before_filter :check_database_readable before_filter :check_database_writable, :only => [:new, :edit] def new - @title = 'New diary entry' + @title = I18n.t('diary_entry.list.new') if params[:diary_entry] @diary_entry = DiaryEntry.new(params[:diary_entry]) @@ -19,23 +20,21 @@ class DiaryEntryController < ApplicationController render :action => 'edit' end else + @diary_entry = DiaryEntry.new(:language_code => @user.preferred_language) render :action => 'edit' end end def edit - @title= 'Edit diary entry' + @title= I18n.t('diary_entry.edit.title') @diary_entry = DiaryEntry.find(params[:id]) if @user != @diary_entry.user redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id] elsif params[:diary_entry] - @diary_entry.title = params[:diary_entry][:title] - @diary_entry.body = params[:diary_entry][:body] - @diary_entry.latitude = params[:diary_entry][:latitude] - @diary_entry.longitude = params[:diary_entry][:longitude] - - if @diary_entry.save + params[:diary_entry][:language] = Language.find_by_code(params[:diary_entry][:language]) + params[:diary_entry][:language] = Language.find_by_code("en") if params[:diary_entry][:language].nil? + if @diary_entry.update_attributes(params[:diary_entry]) redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id] end end @@ -71,7 +70,7 @@ class DiaryEntryController < ApplicationController render :action => 'no_such_user', :status => :not_found end else - @title = "Users' diaries" + @title = I18n.t('diary_entry.list.title') @entry_pages, @entries = paginate(:diary_entries, :include => :user, :conditions => ["users.visible = ?", true], :order => 'created_at DESC', @@ -93,6 +92,15 @@ class DiaryEntryController < ApplicationController else render :nothing => true, :status => :not_found end + elsif params[:language] + @entries = DiaryEntry.find(:all, :include => :user, + :conditions => ["users.visible = ? AND diary_entries.language = ?", true, params[:language]], + :order => 'created_at DESC', :limit => 20) + @title = "OpenStreetMap diary entries in #{params[:language]}" + @description = "Recent diary entries from users of OpenStreetMap" + @link = "http://#{SERVER_URL}/diary/#{params[:language]}" + + render :content_type => Mime::RSS else @entries = DiaryEntry.find(:all, :include => :user, :conditions => ["users.visible = ?", true], @@ -110,7 +118,11 @@ class DiaryEntryController < ApplicationController if user @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]]) - @title = "Users' diaries | #{params[:display_name]}" + if @entry + @title = "Users' diaries | #{params[:display_name]}" + else + render :action => 'no_such_entry', :status => :not_found + end else @not_found_user = params[:display_name] diff --git a/app/controllers/export_controller.rb b/app/controllers/export_controller.rb index ab25fcbc6..b75fb1bca 100644 --- a/app/controllers/export_controller.rb +++ b/app/controllers/export_controller.rb @@ -1,4 +1,8 @@ class ExportController < ApplicationController + + before_filter :authorize_web + before_filter :set_locale + def start end diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index 2f71107f4..183f8004a 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -2,6 +2,7 @@ class MessageController < ApplicationController layout 'site' before_filter :authorize_web + before_filter :set_locale before_filter :require_user before_filter :check_database_readable before_filter :check_database_writable, :only => [:new, :reply, :mark] diff --git a/app/controllers/site_controller.rb b/app/controllers/site_controller.rb index 4b22e46fd..daf8fead7 100644 --- a/app/controllers/site_controller.rb +++ b/app/controllers/site_controller.rb @@ -1,5 +1,6 @@ class SiteController < ApplicationController before_filter :authorize_web + before_filter :set_locale before_filter :require_user, :only => [:edit] def export diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 47bc62be8..1787bb196 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -2,6 +2,7 @@ class TraceController < ApplicationController layout 'site' before_filter :authorize_web + before_filter :set_locale before_filter :require_user, :only => [:mine, :create, :edit, :delete, :make_public] before_filter :authorize, :only => [:api_details, :api_data, :api_create] before_filter :check_database_readable, :except => [:api_details, :api_data, :api_create] diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index eb1471b00..9c2787cc8 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -3,6 +3,7 @@ class UserController < ApplicationController before_filter :authorize, :only => [:api_details, :api_gpx_files] before_filter :authorize_web, :except => [:api_details, :api_gpx_files] + before_filter :set_locale, :except => [:api_details, :api_gpx_files] before_filter :require_user, :only => [:set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image, :delete_image] before_filter :check_database_readable, :except => [:api_details, :api_gpx_files] before_filter :check_database_writable, :only => [:login, :new, :set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image, :delete_image] @@ -22,9 +23,10 @@ class UserController < ApplicationController @user.data_public = true @user.description = "" if @user.description.nil? @user.creation_ip = request.remote_ip + @user.languages = request.user_preferred_languages if @user.save - flash[:notice] = "User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)

Please note that you won't be able to login until you've received and confirmed your email address.

If you use an antispam system which sends confirmation requests then please make sure you whitelist webmaster@openstreetmap.org as we are unable to reply to any confirmation requests." + flash[:notice] = I18n.t('user.new.flash create success message') Notifier.deliver_signup_confirm(@user, @user.tokens.create) redirect_to :action => 'login' else @@ -48,15 +50,18 @@ class UserController < ApplicationController end @user.description = params[:user][:description] + @user.languages = params[:user][:languages].split(",") @user.home_lat = params[:user][:home_lat] @user.home_lon = params[:user][:home_lon] if @user.save + set_locale + if params[:user][:email] == @user.new_email - @notice = "User information updated successfully. Check your email for a note to confirm your new email address." + flash[:notice] = I18n.t('user.account.flash update success confirm needed') Notifier.deliver_email_confirm(@user, @user.tokens.create) else - @notice = "User information updated successfully." + flash[:notice] = I18n.t('user.account.flash update success') end end end @@ -67,7 +72,7 @@ class UserController < ApplicationController @user.home_lat = params[:user][:home_lat].to_f @user.home_lon = params[:user][:home_lon].to_f if @user.save - flash[:notice] = "Home location saved successfully." + flash[:notice] = I18n.t('user.set_home.flash success') redirect_to :controller => 'user', :action => 'account' end end @@ -76,27 +81,27 @@ class UserController < ApplicationController def go_public @user.data_public = true @user.save - flash[:notice] = 'All your edits are now public.' + flash[:notice] = I18n.t('user.go_public.flash success') redirect_to :controller => 'user', :action => 'account', :display_name => @user.display_name end def lost_password - @title = 'lost password' + @title = I18n.t('user.lost_password.title') if params[:user] and params[:user][:email] user = User.find_by_email(params[:user][:email], :conditions => {:visible => true}) if user token = user.tokens.create Notifier.deliver_lost_password(user, token) - @notice = "Sorry you lost it :-( but an email is on its way so you can reset it soon." + flash[:notice] = I18n.t('user.lost_password.notice.email on way') else - @notice = "Couldn't find that email address, sorry." + flash[:notice] = I18n.t('user.lost_password.notice email cannot find') end end end def reset_password - @title = 'reset password' + @title = I18n.t('user.reset_password.title') if params['token'] token = UserToken.find_by_token(params[:token]) if token @@ -109,9 +114,9 @@ class UserController < ApplicationController user.save! token.destroy Notifier.deliver_reset_password(user, pass) - flash[:notice] = "Your password has been changed and is on its way to your mailbox :-)" + flash[:notice] = I18n.t('user.reset_password.flash changed check mail') else - flash[:notice] = "Didn't find that token, check the URL maybe?" + flash[:notice] = I18n.t('user.reset_password.flash token bad') end end diff --git a/app/models/diary_entry.rb b/app/models/diary_entry.rb index 46d96fec7..705438213 100644 --- a/app/models/diary_entry.rb +++ b/app/models/diary_entry.rb @@ -1,15 +1,18 @@ class DiaryEntry < ActiveRecord::Base belongs_to :user + belongs_to :language, :foreign_key => 'language_code' + has_many :diary_comments, :include => :user, :conditions => ["users.visible = ?", true], :order => "diary_comments.id" validates_presence_of :title, :body validates_length_of :title, :within => 1..255 - validates_length_of :language, :within => 2..3, :allow_nil => true + #validates_length_of :language, :within => 2..5, :allow_nil => false validates_numericality_of :latitude, :allow_nil => true, :greater_than_or_equal_to => -90, :less_than_or_equal_to => 90 validates_numericality_of :longitude, :allow_nil => true, :greater_than_or_equal_to => -180, :less_than_or_equal_to => 180 validates_associated :user + validates_associated :language end diff --git a/app/models/notifier.rb b/app/models/notifier.rb index c2ff4c53a..b291c2b57 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -108,6 +108,7 @@ private def common_headers(recipient) recipients recipient.email + locale recipient.preferred_language_from(I18n.available_locales) from "webmaster@openstreetmap.org" headers "return-path" => "bounces@openstreetmap.org", "Auto-Submitted" => "auto-generated" diff --git a/app/models/user.rb b/app/models/user.rb index 2adbbb9a1..683fcc96b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -78,6 +78,22 @@ class User < ActiveRecord::Base return el1 end + def languages + attribute_present?(:languages) ? read_attribute(:languages).split(",") : [] + end + + def languages=(languages) + write_attribute(:languages, languages.join(",")) + end + + def preferred_language + languages.find { |l| Language.find(:first, :conditions => { :code => l }) } + end + + def preferred_language_from(array) + (languages & array.collect { |i| i.to_s }).first + end + def nearby(radius = 50, num = 10) if self.home_lon and self.home_lat gc = OSM::GreatCircle.new(self.home_lat, self.home_lon) diff --git a/app/views/browse/_changeset_details.rhtml b/app/views/browse/_changeset_details.rhtml index 6408b489b..92002b6e3 100644 --- a/app/views/browse/_changeset_details.rhtml +++ b/app/views/browse/_changeset_details.rhtml @@ -1,18 +1,18 @@ - - + + - - + + <% if changeset_details.user.data_public? %> - + <% end %> @@ -20,9 +20,9 @@ <%= render :partial => "tag_details", :object => changeset_details %> - + <% unless changeset_details.has_valid_bbox? %> - + <% else minlon = changeset_details.min_lon/GeoRecord::SCALE.to_f minlat = changeset_details.min_lat/GeoRecord::SCALE.to_f @@ -36,7 +36,7 @@ - + @@ -49,7 +49,7 @@ <% unless @nodes.empty? %> - +
Created at:<%= h(changeset_details.created_at) %><%= t 'browse.changeset_details.created_at' %><%= l changeset_details.created_at %>
Closed at:<%= h(changeset_details.closed_at) %><%= t 'browse.changeset_details.closed_at' %><%= l changeset_details.closed_at %>
Belongs to:<%= t 'browse.changeset_details.belongs_to' %> <%= link_to h(changeset_details.user.display_name), :controller => "user", :action => "view", :display_name => changeset_details.user.display_name %>
Bounding box:<%= t 'browse.changeset_details.bounding_box' %>No bounding box has been stored for this changeset.<%= t 'browse.changeset_details.no_bounding_box' %>
<%=minlon -%>(box)('><%= t 'browse.changeset_details.box' %>) <%=maxlon -%>
Has the following <%= @node_pages.item_count %> nodes:<%= t 'browse.changeset_details.has_nodes', :node_count => @node_pages.item_count %> <% @nodes.each do |node| %> @@ -63,7 +63,7 @@ <% unless @ways.empty? %> - +
Has the following <%= @way_pages.item_count %> ways:<%= t 'browse.changeset_details.has_ways', :way_count => @way_pages.item_count %> <% @ways.each do |way| %> @@ -80,7 +80,7 @@ <% unless @relations.empty? %> - +
Has the following <%= @relation_pages.item_count %> relations:<%= t 'browse.changeset_details.has_relations', :relation_count => @relation_pages.item_count %> <% @relations.each do |relation| %> diff --git a/app/views/browse/_common_details.rhtml b/app/views/browse/_common_details.rhtml index 09cf4cf2d..179b22f60 100644 --- a/app/views/browse/_common_details.rhtml +++ b/app/views/browse/_common_details.rhtml @@ -1,22 +1,22 @@ - - + + <% if common_details.changeset.user.data_public? %> - + <% end %> - + - + diff --git a/app/views/browse/_containing_relation.rhtml b/app/views/browse/_containing_relation.rhtml index f5317f045..ee704acc8 100644 --- a/app/views/browse/_containing_relation.rhtml +++ b/app/views/browse/_containing_relation.rhtml @@ -1,8 +1,8 @@ diff --git a/app/views/browse/_map.rhtml b/app/views/browse/_map.rhtml index d972104ba..6655afcc5 100644 --- a/app/views/browse/_map.rhtml +++ b/app/views/browse/_map.rhtml @@ -5,10 +5,10 @@ <% if map.instance_of? Changeset or map.visible %>
- Loading... + <%= t 'browse.map.loading' %> <% else %> - Deleted + <%= t 'browse.map.deleted' %> <% end %>
Edited at:<%= h(common_details.timestamp) %><%= t 'browse.common_details.edited_at' %><%= l common_details.timestamp %>
Edited by:<%= t 'browse.common_details.edited_by' %> <%= link_to h(common_details.changeset.user.display_name), :controller => "user", :action => "view", :display_name => common_details.changeset.user.display_name %>
Version:<%= t 'browse.common_details.version' %> <%= h(common_details.version) %>
In changeset:<%= t 'browse.common_details.in_changeset' %> <%= link_to common_details.changeset_id, :action => :changeset, :id => common_details.changeset_id %>
- <%= link_to "Relation " + h(printable_name(containing_relation.relation)), :action => "relation", :id => containing_relation.relation.id.to_s %> + <%= link_to t('browse.containing_relation.relation', :relation_name => h(printable_name(containing_relation.relation))), :action => "relation", :id => containing_relation.relation.id.to_s %> <% unless containing_relation.member_role.blank? %> - (as <%= h(containing_relation.member_role) %>) + <%= t 'browse.containing_relation.relation_as', :relation_role => h(containing_relation.member_role) %> <% end %>