public
Description: Radiant Extension for multiple language support
Clone URL: git://github.com/DefV/site_language.git
Search Repo:
Initial Commit into Git Repository
DefV (author)
Wed Mar 19 16:00:32 -0700 2008
commit  2843df0f68693484184d7174cf5aaefdff3cd402
tree    473a3c86b40992e8d9b7b3e64dfe2e8b0dfdc50a
...
 
...
1
0
@@ -0,0 +1 @@
0
+.DS_Store
0
...
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
0
@@ -0,0 +1,12 @@
0
+= Site Language
0
+
0
+Adds the translation of the pages and snippets to Radiant, using the Globalize plugin. Works with Radiant 0.6.4
0
+
0
+- First, install globalize. (http://www.globalize-rails.org/globalize/)
0
+- Second, install the shards plugin  (http://svn.radiantcms.org/radiant/trunk/extensions/shards/)
0
+- Third, install this extension, and enable it
0
+- And last, but not least, navigate to the "Site-Language" in the admin, and add some language-codes (en-UK, nl-BE,...)
0
+
0
+You're done! Have fun with multi-language Radiant!
0
+
0
+If you have any trouble, or you have a patch for this extension, you can always contact us at rails@openminds.be
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0
@@ -0,0 +1,25 @@
0
+require 'rake'
0
+require 'rake/testtask'
0
+require 'rake/rdoctask'
0
+
0
+desc 'Default: run unit tests.'
0
+task :default => :test
0
+
0
+desc 'Test the site_language extension.'
0
+Rake::TestTask.new(:test) do |t|
0
+ t.libs << 'lib'
0
+ t.pattern = 'test/**/*_test.rb'
0
+ t.verbose = true
0
+end
0
+
0
+desc 'Generate documentation for the site_language extension.'
0
+Rake::RDocTask.new(:rdoc) do |rdoc|
0
+ rdoc.rdoc_dir = 'rdoc'
0
+ rdoc.title = 'SiteLanguageExtension'
0
+ rdoc.options << '--line-numbers' << '--inline-source'
0
+ rdoc.rdoc_files.include('README')
0
+ rdoc.rdoc_files.include('lib/**/*.rb')
0
+end
0
+
0
+# Load any custom rakefiles for extension
0
+Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
0
\ No newline at end of file
...
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
0
@@ -0,0 +1,7 @@
0
+class Admin::SiteLanguagesController < ApplicationController
0
+ # Remove this line if your controller should only be accessible to users
0
+ # that are logged in:
0
+ # no_login_required
0
+
0
+ scaffold :site_language
0
+end
...
 
 
0
...
1
2
3
0
@@ -0,0 +1,2 @@
0
+module Admin::SitelanguagesHelper
0
+end
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
0
@@ -0,0 +1,11 @@
0
+class SiteLanguage < ActiveRecord::Base
0
+ class << self
0
+ def codes
0
+ find(:all).collect { |sl| sl.code }
0
+ end
0
+
0
+ def default
0
+ 'en-UK'
0
+ end
0
+ end
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
0
@@ -0,0 +1,22 @@
0
+module SiteLanguageTags
0
+ include Radiant::Taggable
0
+
0
+ tag 'sitelanguages' do |tag|
0
+ tag.expand
0
+ end
0
+
0
+ tag 'sitelanguages:each' do |tag|
0
+ result = []
0
+   SiteLanguage.codes.each do |lang|
0
+ tag.locals.language = lang
0
+ result << tag.expand
0
+ end
0
+ result
0
+ end
0
+
0
+ tag 'sitelanguages:each:sitelanguage' do |tag|
0
+ lang = tag.locals.language.to_s
0
+ nice_lang = Locale.new(lang).language.to_s
0
+ lang == Locale.active.code ? nice_lang : %{<a href="/#{nice_lang.downcase}/">#{nice_lang}</a>}
0
+ end
0
+end
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
0
@@ -0,0 +1,45 @@
0
+<tr id="page-<%= page.id %>" class="node level-<%= level %><%= children_class %><%= virtual_class %>">
0
+  <% render_region :node, :locals => {:page => page, :level => level, :simple => simple} do |node| %>
0
+  <% node.title_column do %>
0
+  <td class="page" style="padding-left: <%= padding_left(level) %>px">
0
+    <span class="w1">
0
+      <% if simple -%>
0
+      <%= icon %>
0
+      <%= node_title %>
0
+      <% else -%>
0
+      <% if defined?(SiteLanguage) && SiteLanguageExtension.enabled? %>
0
+      <%= expander %>
0
+      <%= icon %> <%= node_title %>
0
+      <% SiteLanguage.codes.each do |l| -%>
0
+      <small><a href="<%= page_edit_url(:id => page, :language => l) %>" title="<%= page.url %>"><%= l %></a></small>
0
+      <%   end
0
+    else -%>
0
+    <%= expander %><a href="<%= page_edit_url(:id => page) %>" title="<%= page.url %>"><%= icon %> <%= node_title %></a>
0
+    <% end %>
0
+    <%= page_type %>
0
+    <%= spinner %>
0
+    <% end -%>
0
+  </span>
0
+</td>
0
+<% end %>
0
+<% node.status_column do %>
0
+<% unless simple -%><td class="status <%= page.status.name.downcase %>-status"><%= page.status.name %></td><% end %>
0
+<% end %>
0
+<% node.add_child_column do %>
0
+<% unless simple -%><td class="add-child"><%= link_to image('add-child', :alt => 'add child'), page_new_url(:parent_id => page) %></td><% end %>
0
+<% end %>
0
+<% node.remove_column do %>
0
+<% unless simple %><td class="remove"><%= link_to image('remove', :alt => 'remove page'), page_remove_url(:id => page) %></td><% end %>
0
+<% end %>
0
+<% end %>
0
+  <td class="reorder"><%= page.children.empty? ? '' : link_to(image('reorder', :alt => 'reorder children'), page_reorder_children_url(:id => page)) %></td>
0
+</tr>
0
+<%
0
+if expanded
0
+  page.children.each do |child|
0
+    -%>
0
+    <%= render_node child, :level => level + 1, :simple => simple -%>
0
+    <%
0
+  end
0
+end
0
+-%>
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
0
@@ -0,0 +1,44 @@
0
+<h1>Snippets</h1>
0
+
0
+<p>Snippets are generally small pieces of content which are included in other pages or layouts.</p>
0
+
0
+<table id="snippets" class="index" cellpadding="0" cellspacing="0" border="0">
0
+  <thead>
0
+    <tr>
0
+      <th class="snippet">Snippet</th>
0
+      <th class="modify">Modify</th>
0
+    </tr>
0
+  </thead>
0
+  <tbody>
0
+    <% unless @snippets.empty? -%>
0
+    <% for snippet in @snippets -%>
0
+    <tr class="node level-1">
0
+      <td class="snippet">
0
+        <%= image "snippet", :class => "icon", :alt => 'snippet-icon', :title => '' %>
0
+        <% if defined?(SiteLanguage) && SiteLanguageExtension.enabled? && SiteLanguage.count > 0 %>
0
+        <%= snippet.name %>
0
+        <small><% SiteLanguage.codes.each do |l| %>
0
+          <%= link_to l, snippet_edit_url(:id => snippet, :language => l) %></span>
0
+          <% end %>
0
+        </small>
0
+        <% else -%>
0
+        <span><%= link_to snippet.name, snippet_edit_url(:id => snippet) %></span>
0
+        <% end %>
0
+      </td>
0
+      <td class="remove"><%= link_to image('remove', :alt => 'Remove Snippet'), snippet_remove_url(:id => snippet) %></td>
0
+    </tr>
0
+    <% end -%>
0
+    <% else -%>
0
+    <tr>
0
+      <td colspan="2" class="note">No Snippets</td>
0
+    </tr>
0
+    <% end -%>
0
+  </tbody>
0
+</table>
0
+<script type="text/javascript">
0
+// <![CDATA[
0
+new RuledTable('snippets');
0
+// ]]>
0
+</script>
0
+
0
+<p><%= link_to image('new-snippet', :alt => 'New Snippet'), snippet_new_url %></p>
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
0
@@ -0,0 +1,11 @@
0
+class CreateSiteLanguages < ActiveRecord::Migration
0
+ def self.up
0
+ create_table :site_languages do |t|
0
+ t.column :code, :string
0
+ end
0
+ end
0
+
0
+ def self.down
0
+ drop_table :site_languages
0
+ end
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
0
@@ -0,0 +1,28 @@
0
+namespace :radiant do
0
+ namespace :extensions do
0
+ namespace :site_language do
0
+
0
+ desc "Runs the migration of the Site Language extension"
0
+ task :migrate => :environment do
0
+ require 'radiant/extension_migrator'
0
+ if ENV["VERSION"]
0
+ SiteLanguageExtension.migrator.migrate(ENV["VERSION"].to_i)
0
+ else
0
+ SiteLanguageExtension.migrator.migrate
0
+ end
0
+ end
0
+
0
+ desc "Copies public assets of the Site Language to the instance public/ directory."
0
+ task :update => :environment do
0
+ is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
0
+ Dir[SiteLanguageExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
0
+ path = file.sub(SiteLanguageExtension.root, '')
0
+ directory = File.dirname(path)
0
+ puts "Copying #{path}..."
0
+ mkdir_p RAILS_ROOT + directory
0
+ cp file, RAILS_ROOT + path
0
+ end
0
+ end
0
+ end
0
+ end
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
0
@@ -0,0 +1,115 @@
0
+# Uncomment this if you reference any of your controllers in activate
0
+require_dependency 'application'
0
+
0
+class SiteLanguageExtension < Radiant::Extension
0
+ version "0.2"
0
+ description "Habla Nederlands, sir? Si oder non?"
0
+ url "http://openminds.be/"
0
+
0
+ define_routes do |map|
0
+ map.connect 'admin/site_language/:action', :controller => 'admin/site_languages'
0
+ begin
0
+ SiteLanguage.codes.each do |code|
0
+ langname = Locale.new(code).language.to_s.downcase
0
+ map.connect "#{langname}/*url", :controller => 'site', :action => 'show_page', :language => code
0
+ end
0
+ rescue
0
+ # raise SiteLanguageError, "Migrations not ran yet.."
0
+ end
0
+ end
0
+
0
+ def activate
0
+ admin.tabs.add "Site Language", "/admin/site_language", :after => "Layouts", :visibility => [:admin, :developer]
0
+ # We need globalize
0
+ unless ActiveRecord::Base.respond_to? :translates
0
+ raise SiteLanguageError
0
+ end
0
+ enhance_classes
0
+ Page.send :include, SiteLanguageTags
0
+ end
0
+
0
+ def deactivate
0
+ admin.tabs.remove "Site Language"
0
+ end
0
+
0
+ def enhance_classes
0
+ # Mixin'in the Mojo
0
+ # It seems impossible to add a before_filter to Admin::AbstractModelController from here :/
0
+ Admin::PageController.class_eval do
0
+ before_filter :set_locale
0
+ def set_locale
0
+ Locale.set params[:language] || SiteLanguage.default
0
+ end
0
+ end
0
+ Admin::SnippetController.class_eval do
0
+ before_filter :set_locale
0
+ def set_locale
0
+ Locale.set params[:language] || SiteLanguage.default
0
+ end
0
+ end
0
+
0
+ # pass language again when save_and_continue_editing is used
0
+ Admin::AbstractModelController.class_eval do
0
+ def continue_url(options)
0
+ options[:redirect_to] || (params[:continue] ? model_edit_url(:id => model.id, :language => params[:language]) : model_index_url)
0
+ end
0
+ end
0
+
0
+ SiteController.class_eval do
0
+ before_filter :set_language
0
+
0
+ def set_language
0
+ redirect_to :language => SiteLanguage.default, :url => params[:url] unless Locale.set params[:language]
0
+ end
0
+
0
+ def show_page
0
+ response.headers.delete('Cache-Control')
0
+ url = params[:url].to_s
0
+ lang = params[:language].to_s
0
+ if (request.get? || request.head?) and live? and (@cache.response_cached?(lang + '-' + url))
0
+ @cache.update_response(lang + '-' + url, response, request)
0
+ @performed_render = true
0
+ else
0
+ show_uncached_page(url, lang)
0
+ end
0
+ end
0
+
0
+ private
0
+
0
+ def show_uncached_page(url, lang)
0
+ @page = find_page(url)
0
+ unless @page.nil?
0
+ process_page(@page)
0
+ @cache.cache_response(lang + '-' + url, response) if request.get? and live? and @page.cache?
0
+ @performed_render = true
0
+ else
0
+ render :template => 'site/not_found', :status => 404
0
+ end
0
+ rescue Page::MissingRootPageError
0
+ redirect_to welcome_url
0
+ end
0
+
0
+ end
0
+
0
+ Object.class_eval do
0
+ include Globalize
0
+ Locale.set_base_language(SiteLanguage.default)
0
+ end
0
+
0
+ Page.class_eval do
0
+ translates :title, :breadcrumb, :slug
0
+ end
0
+
0
+ PagePart.class_eval do
0
+ translates :content
0
+ end
0
+
0
+ Snippet.class_eval do
0
+ translates :content
0
+ end
0
+ end
0
+end
0
+
0
+
0
+class SiteLanguageError < StandardError
0
+end
0
\ No newline at end of file
...
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
0
@@ -0,0 +1,7 @@
0
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
0
+one:
0
+ id: 1
0
+ code: MyString
0
+two:
0
+ id: 2
0
+ code: MyString
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0
@@ -0,0 +1,17 @@
0
+require File.dirname(__FILE__) + '/../../test_helper'
0
+
0
+# Re-raise errors caught by the controller.
0
+Admin::SitelanguagesController.class_eval { def rescue_action(e) raise e end }
0
+
0
+class Admin::SitelanguagesControllerTest < Test::Unit::TestCase
0
+ def setup
0
+ @controller = Admin::SitelanguagesController.new
0
+ @request = ActionController::TestRequest.new
0
+ @response = ActionController::TestResponse.new
0
+ end
0
+
0
+ # Replace this with your real tests.
0
+ def test_truth
0
+ assert true
0
+ end
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
@@ -0,0 +1,15 @@
0
+require File.dirname(__FILE__) + '/../test_helper'
0
+
0
+class SiteLanguageExtensionTest < Test::Unit::TestCase
0
+
0
+ # Replace this with your real tests.
0
+ def test_this_extension
0
+ flunk
0
+ end
0
+
0
+ def test_initialization
0
+ assert_equal File.join(File.expand_path(RAILS_ROOT), 'vendor', 'extensions', 'site_language'), SiteLanguageExtension.root
0
+ assert_equal 'Site Language', SiteLanguageExtension.extension_name
0
+ end
0
+
0
+end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0
@@ -0,0 +1,19 @@
0
+require 'test/unit'
0
+# # Load the environment
0
+unless defined? RADIANT_ROOT
0
+ ENV["RAILS_ENV"] = "test"
0
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
0
+end
0
+require "#{RADIANT_ROOT}/test/test_helper"
0
+
0
+class Test::Unit::TestCase
0
+
0
+ # Include a helper to make testing Radius tags easier
0
+ test_helper :extension_tags
0
+
0
+ # Add the fixture directory to the fixture path
0
+ self.fixture_path << File.dirname(__FILE__) + "/fixtures"
0
+
0
+ # Add more helper methods to be used by all extension tests here...
0
+
0
+end
0
\ No newline at end of file
...
 
 
 
 
 
 
 
 
 
 
0
...
1
2
3
4
5
6
7
8
9
10
11
0
@@ -0,0 +1,10 @@
0
+require File.dirname(__FILE__) + '/../test_helper'
0
+
0
+class SiteLanguageTest < Test::Unit::TestCase
0
+ fixtures :site_languages
0
+
0
+ # Replace this with your real tests.
0
+ def test_truth
0
+ assert true
0
+ end
0
+end
0
\ No newline at end of file

Comments

    No one has commented yet.