support multiple languages for about_text
authorLunar <lunar@anargeek.net>
Sat, 9 Mar 2013 12:51:21 +0000 (13:51 +0100)
committerLunar <lunar@anargeek.net>
Thu, 14 Mar 2013 09:16:59 +0000 (10:16 +0100)
conf/settings-default.yml
lib/coquelicot/app.rb
lib/coquelicot/helpers.rb
spec/coquelicot/app_spec.rb
views/index.haml

index d644113..d4d5f39 100644 (file)
@@ -72,7 +72,10 @@ depot_path: "./files"
 
 # Text to display on top of the upload form
 #
-about_text: ""
+#   This is indexed by locale code to support multiple languages.
+#   It will fallback to English for unspecified languages.
+about_text:
+  en: ""
 
 # Path to an additional stylesheet
 additional_css: ""
index 184ac19..3487459 100644 (file)
@@ -226,7 +226,7 @@ module Coquelicot
     set :gone_period, 60 * 24 * 7 # 1 week
     set :filename_length, 20
     set :random_pass_length, 16
-    set :about_text, ''
+    set :about_text, 'en' => ''
     set :additional_css, ''
     set :pid, Proc.new { File.join(root, 'tmp/coquelicot.pid') }
     set :log, Proc.new { File.join(root, 'tmp/coquelicot.log') }
index e75fae1..e621db2 100644 (file)
@@ -29,5 +29,9 @@ module Coquelicot
     def auth_method
       Coquelicot.settings.authenticator.class.name.gsub(/Coquelicot::Auth::([A-z0-9]+)Authenticator$/, '\1').downcase
     end
+
+    def about_text
+      settings.about_text[FastGettext.locale] || settings.about_text['en'] || ''
+    end
   end
 end
index 5baed87..4df6df6 100644 (file)
@@ -55,15 +55,6 @@ describe Coquelicot::Application do
         find(:xpath, '//label[@for="file"]').
             should have_content("max. size: #{Coquelicot.settings.max_file_size.as_size}")
       end
-      context 'when an "about text" is set"' do
-        before(:each) do
-          app.set :about_text, 'This is an about text'
-        end
-        it 'should display the "about text"' do
-          visit '/'
-          page.should have_content('This is an about text')
-        end
-      end
       context 'when I explicitly request french' do
         it 'should display a page in french' do
           visit '/'
@@ -173,6 +164,33 @@ describe Coquelicot::Application do
         end
       end
     end
+    context 'when an "about text" is set for English and French"' do
+      before(:each) do
+        app.set :about_text, 'en' => 'This is an about text',
+                             'fr' => 'Ceci est un texte'
+      end
+      context 'using the default language' do
+        it 'should display the "about text" in English' do
+          visit '/'
+          find('.about').text.should == 'This is an about text'
+        end
+      end
+      context 'when I explicitly request French' do
+        it 'should display the "about text" in French' do
+          visit '/'
+          click_link 'fr'
+          find('.about').text.should == 'Ceci est un texte'
+          reset_session!
+        end
+      end
+      context 'when my browser prefers french' do
+        include_context 'browser prefers french'
+        it 'should display the "about text" in French' do
+          visit '/'
+          find('.about').text.should == 'Ceci est un texte'
+        end
+      end
+    end
   end
 
   describe 'get /README' do
index 0219dd0..e821414 100644 (file)
@@ -25,8 +25,8 @@
 %form#upload{ :enctype => 'multipart/form-data',
               :action  => 'upload', :method => 'post' }
   #upload-authentication
-    - unless settings.about_text.empty?
-      %p.about= settings.about_text
+    - unless about_text.empty?
+      %p.about= about_text
     %script{ :type => 'text/javascript', :src => "javascripts/coquelicot.auth.#{auth_method}.js" }
     = render :haml, :"auth/#{auth_method}", :layout => false
   .field