Merge branch 'master' of github.com:diaspora/diaspora
This commit is contained in:
commit
9c2ca15e93
11 changed files with 106 additions and 1 deletions
1
Gemfile
1
Gemfile
|
|
@ -27,6 +27,7 @@ gem 'roxml', :git => 'git://github.com/Empact/roxml.git'
|
|||
gem 'addressable', :require => 'addressable/uri'
|
||||
gem 'json'
|
||||
gem 'mini_fb'
|
||||
gem 'http_accept_language', :git => 'http://github.com/iain/http_accept_language.git'
|
||||
|
||||
#Standards
|
||||
gem 'pubsubhubbub'
|
||||
|
|
|
|||
|
|
@ -67,6 +67,12 @@ GIT
|
|||
capistrano (>= 2.5.5)
|
||||
highline (>= 1.4.0)
|
||||
|
||||
GIT
|
||||
remote: http://github.com/iain/http_accept_language.git
|
||||
revision: 0b78aa7849fc90cf9e12586af162fa4c408a795d
|
||||
specs:
|
||||
http_accept_language (1.0.1)
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
|
|
@ -367,6 +373,7 @@ DEPENDENCIES
|
|||
em-websocket
|
||||
factory_girl_rails
|
||||
haml
|
||||
http_accept_language!
|
||||
json
|
||||
launchy
|
||||
magent!
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
# the COPYRIGHT file.
|
||||
|
||||
class ApplicationController < ActionController::Base
|
||||
|
||||
protect_from_forgery :except => :receive
|
||||
|
||||
before_filter :set_friends_and_status, :except => [:create, :update]
|
||||
before_filter :count_requests
|
||||
before_filter :set_invites
|
||||
before_filter :set_locale
|
||||
|
||||
def set_friends_and_status
|
||||
if current_user
|
||||
|
|
@ -33,4 +33,13 @@ class ApplicationController < ActionController::Base
|
|||
@invites = current_user.invites
|
||||
end
|
||||
end
|
||||
|
||||
def set_locale
|
||||
I18n.default_locale = DEFAULT_LANGUAGE
|
||||
if current_user
|
||||
I18n.locale = current_user.language
|
||||
else
|
||||
I18n.locale = request.compatible_language_from AVAILABLE_LANGUAGE_CODES
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ class UsersController < ApplicationController
|
|||
else
|
||||
params[:user].delete(:password) if params[:user][:password].blank?
|
||||
params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
|
||||
params[:user].delete(:language) if params[:user][:language].blank?
|
||||
|
||||
if params[:user][:password] && params[:user][:password_confirmation]
|
||||
if @user.update_attributes(:password => params[:user][:password], :password_confirmation => params[:user][:password_confirmation])
|
||||
|
|
@ -36,6 +37,12 @@ class UsersController < ApplicationController
|
|||
else
|
||||
flash[:error] = "Password Change Failed"
|
||||
end
|
||||
elsif params[:user][:language]
|
||||
if @user.update_attributes(:language => params[:user][:language])
|
||||
flash[:notice] = "Language Changed"
|
||||
else
|
||||
flash[:error] = "Language Change Failed"
|
||||
end
|
||||
end
|
||||
|
||||
redirect_to edit_user_path(@user)
|
||||
|
|
|
|||
9
app/helpers/language_helper.rb
Normal file
9
app/helpers/language_helper.rb
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
module LanguageHelper
|
||||
def available_language_options
|
||||
options = []
|
||||
AVAILABLE_LANGUAGES.each do |locale, language|
|
||||
options << [language, locale]
|
||||
end
|
||||
options.sort_by { |o| o[0] }
|
||||
end
|
||||
end
|
||||
|
|
@ -42,11 +42,16 @@ class User
|
|||
|
||||
key :getting_started, Boolean, :default => true
|
||||
|
||||
key :language, String
|
||||
|
||||
before_validation :strip_and_downcase_username, :on => :create
|
||||
before_validation :set_current_language, :on => :create
|
||||
|
||||
validates_presence_of :username
|
||||
validates_uniqueness_of :username, :case_sensitive => false
|
||||
validates_format_of :username, :with => /\A[A-Za-z0-9_.]+\z/
|
||||
validates_with InvitedUserValidator
|
||||
validates_inclusion_of :language, :in => AVAILABLE_LANGUAGE_CODES
|
||||
|
||||
one :person, :class_name => 'Person', :foreign_key => :owner_id
|
||||
validate :person_is_valid
|
||||
|
|
@ -76,6 +81,10 @@ class User
|
|||
end
|
||||
end
|
||||
|
||||
def set_current_language
|
||||
self.language = I18n.locale.to_s if self.language.blank?
|
||||
end
|
||||
|
||||
def self.find_for_authentication(conditions={})
|
||||
if conditions[:username] =~ /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i # email regex
|
||||
conditions[:email] = conditions.delete(:username)
|
||||
|
|
|
|||
|
|
@ -45,6 +45,16 @@
|
|||
or
|
||||
= f.submit 'Change password'
|
||||
|
||||
%h3 Change language
|
||||
= form_for @user do |f|
|
||||
= f.error_messages
|
||||
|
||||
%p
|
||||
= f.select :language, available_language_options
|
||||
= f.submit 'Change language'
|
||||
|
||||
%br
|
||||
|
||||
%h3 Export Data
|
||||
= link_to "download my xml", users_export_path, :class => "button"
|
||||
= link_to "download my photos", users_export_photos_path, :class => "button"
|
||||
|
|
|
|||
|
|
@ -18,6 +18,18 @@ if File.exists?(File.expand_path("./config/fb_config.yml"))
|
|||
else
|
||||
FACEBOOK = false
|
||||
end
|
||||
|
||||
if File.exists?(File.expand_path("./config/languages.yml"))
|
||||
languages = YAML::load(File.open(File.expand_path("./config/languages.yml")))
|
||||
AVAILABLE_LANGUAGES = (languages['available'].length > 0) ? languages['available'] : { :en => 'English' }
|
||||
DEFAULT_LANGUAGE = (AVAILABLE_LANGUAGES.include?(languages['default'])) ? languages['default'] : AVAILABLE_LANGUAGES.keys[0].to_s
|
||||
AVAILABLE_LANGUAGE_CODES = languages['available'].keys.map { |v| v.to_s }
|
||||
else
|
||||
AVAILABLE_LANGUAGES = { :en => 'English' }
|
||||
DEFAULT_LANGUAGES = 'en'
|
||||
AVAILABLE_LANGUAGE_CODES = ['en']
|
||||
end
|
||||
|
||||
# Initialize the rails application
|
||||
Diaspora::Application.initialize!
|
||||
|
||||
|
|
|
|||
17
config/languages.yml
Normal file
17
config/languages.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
default: 'en'
|
||||
available:
|
||||
cs: 'Lietuviškai'
|
||||
cy: 'Cymraeg'
|
||||
de: 'Deutsch'
|
||||
en: 'English'
|
||||
es: 'Español'
|
||||
fr: 'Français'
|
||||
id: 'Bahasa Indonesia'
|
||||
it: 'Italiano'
|
||||
nb: 'Norske'
|
||||
nl: 'Nederlandse'
|
||||
pt-BR: 'Português'
|
||||
ro: 'Română'
|
||||
ru: 'Россию'
|
||||
sv: 'Svenska'
|
||||
tr: 'Türk'
|
||||
|
|
@ -10,6 +10,7 @@ describe UsersController do
|
|||
let!(:aspect) { user.aspect(:name => "lame-os") }
|
||||
|
||||
let!(:old_password) { user.encrypted_password }
|
||||
let!(:old_language) { user.language }
|
||||
|
||||
before do
|
||||
sign_in :user, user
|
||||
|
|
@ -47,5 +48,15 @@ describe UsersController do
|
|||
user.encrypted_password.should == old_password
|
||||
end
|
||||
end
|
||||
|
||||
describe 'language' do
|
||||
it 'should allow user to change his language' do
|
||||
user.language = 'en'
|
||||
user.save
|
||||
put("update", :id => user.id, "user" => {"language" => "fr"})
|
||||
user.reload
|
||||
user.language.should_not == old_language
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -119,6 +119,19 @@ describe User do
|
|||
duplicate_user.should_not be_valid
|
||||
end
|
||||
end
|
||||
|
||||
describe "of language" do
|
||||
it "requires availability" do
|
||||
user = Factory.build(:user, :language => 'some invalid language')
|
||||
user.should_not be_valid
|
||||
end
|
||||
|
||||
it "should save with current language if blank" do
|
||||
I18n.locale = :fr
|
||||
user = Factory(:user, :language => nil)
|
||||
user.language.should == 'fr'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe ".build" do
|
||||
|
|
|
|||
Loading…
Reference in a new issue