Commit 242b74319bc15585ca32cd6f252107118f05c5c0

Authored by AntonioTerceiro
1 parent 15102f5f

ActionItem137: displaying a list of languages to switch languages instead of the…

… flags (like e.g. gnu.org or debian.org)


git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1299 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/application.rb
... ... @@ -24,7 +24,9 @@ class ApplicationController < ActionController::Base
24 24 # Be sure to include AuthenticationSystem in Application Controller instead
25 25 include AuthenticatedSystem
26 26 include PermissionCheck
  27 +
27 28 init_gettext 'noosfero'
  29 + before_init_gettext :set_locale
28 30  
29 31 include NeedsProfile
30 32  
... ... @@ -60,4 +62,16 @@ class ApplicationController < ActionController::Base
60 62 current_user.person if logged_in?
61 63 end
62 64  
  65 + def set_locale
  66 + locale = cookies[:locale]
  67 + unless params[:locale].blank?
  68 + locale = params[:locale]
  69 + end
  70 +
  71 + if locale
  72 + cookies[:locale] = locale
  73 + GetText.locale = locale
  74 + end
  75 + end
  76 +
63 77 end
... ...
app/helpers/language_helper.rb
1 1 module LanguageHelper
2 2 def language
3 3 code = GetText.locale.to_s.downcase
4   - if code == 'en_us'
5   - 'en'
6   - else
7   - code
8   - end
  4 + (code == 'en_us') ? 'en' : code
9 5 end
10 6 end
... ...
app/views/layouts/application.rhtml
... ... @@ -117,8 +117,11 @@
117 117 </div><!-- id="wrap" -->
118 118  
119 119 <div id="footer">
  120 + <div id='language-chooser'>
  121 + <%= render :file => 'shared/language_chooser' %>
  122 + </div>
  123 +
120 124 <!-- <a name='footer'/></a> -->
121   - <%= localist_menu %>
122 125 <%= footer %>
123 126 </div><!-- id="footer" -->
124 127  
... ...
app/views/shared/language_chooser.rhtml 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +<% Noosfero.locales.each do |locale_code,locale_name| %>
  2 + <% if GetText.locale.to_s == locale_code %>
  3 + <strong><%= locale_name %></strong>
  4 + <% else %>
  5 + <%= link_to locale_name, { :locale => locale_code }%>
  6 + <% end %>
  7 +<% end %>
... ...
config/environment.rb
... ... @@ -69,9 +69,10 @@ end
69 69  
70 70  
71 71 require 'gettext/rails'
72   -Localist.supported_locales = %w[en-US pt-BR]
73   -Localist.default_locale = "pt-BR"
74   -Localist.callback = lambda { |l| GetText.locale= l }
  72 +Noosfero.locales = {
  73 + 'en' => 'English',
  74 + 'pt_BR' => 'Português Brasileiro',
  75 +}
75 76  
76 77 Tag.hierarchical = true
77 78  
... ...
lib/noosfero.rb
... ... @@ -16,6 +16,10 @@ module Noosfero
16 16 Regexp.new(items.blank? ? '' : ('(' + items + ')'))
17 17 end
18 18  
  19 + class << self
  20 + attr_accessor :locales
  21 + end
  22 +
19 23 private
20 24  
21 25 def self.controllers_in_directory(dir)
... ...
public/stylesheets/common.css
... ... @@ -429,3 +429,7 @@ body.category4 #content h4, body.category4 #content h5, body.category4 #content
429 429 color: #AAA;
430 430 }
431 431  
  432 +#language-chooser {
  433 + margin-bottom: 1em;
  434 + text-align: center;
  435 +}
... ...
test/functional/application_controller_test.rb
... ... @@ -118,4 +118,5 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
118 118 get :index
119 119 assert_no_tag :tag => 'div', :attributes => { :id => 'boxes', :class => 'boxes' }
120 120 end
  121 +
121 122 end
... ...
test/functional/search_controller_test.rb
... ... @@ -22,7 +22,7 @@ class SearchControllerTest &lt; Test::Unit::TestCase
22 22 end
23 23  
24 24 should 'filter stop words' do
25   - Locale.current = Locale::Object.new('pt_BR')
  25 + GetText.locale = 'pt_BR'
26 26 get 'index', :query => 'a carne da vaca'
27 27 assert_response :success
28 28 assert_template 'index'
... ...
test/integration/locale_setting_test.rb 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +require "#{File.dirname(__FILE__)}/../test_helper"
  2 +
  3 +class LocaleSettingTest < ActionController::IntegrationTest
  4 +
  5 + should 'set locale properly' do
  6 +
  7 + # set locale to pt_BR
  8 + get '/', :locale => 'pt_BR'
  9 + assert_equal 'pt_BR', GetText.locale.to_s
  10 +
  11 + # locale is kept
  12 + get '/'
  13 + assert_equal 'pt_BR', GetText.locale.to_s
  14 +
  15 + # changing back
  16 + get '/', :locale => 'en'
  17 + assert_equal 'en', GetText.locale.to_s
  18 +
  19 + # locale is kept again
  20 + get '/'
  21 + assert_equal 'en', GetText.locale.to_s
  22 +
  23 + end
  24 +
  25 +
  26 +end
... ...