interpret 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +488 -0
- data/app/controllers/interpret/search_controller.rb +3 -1
- data/app/controllers/interpret/tools_controller.rb +2 -1
- data/app/controllers/interpret/translations_controller.rb +16 -7
- data/app/models/interpret/expiration_observer.rb +29 -0
- data/app/models/interpret/translation.rb +9 -20
- data/app/views/interpret/tools/index.html.erb +16 -23
- data/app/views/interpret/translations/_listing.html.erb +1 -1
- data/app/views/interpret/translations/live_edit.html.erb +11 -0
- data/app/views/layouts/interpret.html.erb +6 -1
- data/app/views/layouts/interpret_base.html.erb +1 -1
- data/config/routes.rb +4 -0
- data/interpret.gemspec +0 -1
- data/lib/generators/interpret/setup_generator.rb +2 -1
- data/lib/interpret/controller_filter.rb +22 -0
- data/lib/interpret/engine.rb +17 -6
- data/lib/interpret/helpers.rb +39 -0
- data/lib/interpret/version.rb +1 -1
- data/lib/interpret.rb +4 -1
- data/lib/tasks/interpret.rake +4 -2
- data/public/javascripts/facebox-1.3/closelabel.png +0 -0
- data/public/javascripts/facebox-1.3/facebox.css +80 -0
- data/public/javascripts/facebox-1.3/facebox.js +309 -0
- data/public/javascripts/facebox-1.3/loading.gif +0 -0
- data/public/stylesheets/interpret_live_edit_style.css +38 -0
- data/public/stylesheets/interpret_style.css +18 -0
- data/spec/models/translation_spec.rb +33 -22
- data/spec/observers/expiration_observer_spec.rb +17 -0
- data/spec/spec_helper.rb +0 -1
- data/test_app/Gemfile +4 -2
- data/test_app/app/controllers/application_controller.rb +17 -1
- data/test_app/app/controllers/pages_controller.rb +0 -1
- data/test_app/app/models/my_sweeper.rb +5 -0
- data/test_app/app/views/layouts/application.html.erb +115 -5
- data/test_app/app/views/layouts/backoffice.html.erb +27 -0
- data/test_app/app/views/pages/archives.html.erb +3 -0
- data/test_app/app/views/pages/contact.html.erb +3 -0
- data/test_app/app/views/pages/index.html.erb +56 -0
- data/test_app/app/views/pages/links.html.erb +10 -0
- data/test_app/app/views/pages/resources.html.erb +5 -0
- data/test_app/config/application.rb +2 -2
- data/test_app/config/environments/production.rb +0 -5
- data/test_app/config/initializers/interpret.rb +3 -3
- data/test_app/config/locales/en.yml +55 -0
- data/test_app/config/locales/es.yml +3 -47
- data/test_app/config/routes.rb +8 -1
- data/test_app/public/images/a1.gif +0 -0
- data/test_app/public/images/a10.jpg +0 -0
- data/test_app/public/images/a16.gif +0 -0
- data/test_app/public/images/a18.gif +0 -0
- data/test_app/public/images/a22.gif +0 -0
- data/test_app/public/images/a26.gif +0 -0
- data/test_app/public/images/a33.gif +0 -0
- data/test_app/public/images/a36.gif +0 -0
- data/test_app/public/images/a38.gif +0 -0
- data/test_app/public/images/a41.gif +0 -0
- data/test_app/public/images/a47.gif +0 -0
- data/test_app/public/images/a50.gif +0 -0
- data/test_app/public/images/a8.gif +0 -0
- data/test_app/public/images/abg.gif +0 -0
- data/test_app/public/images/pic1.jpg +0 -0
- data/test_app/public/images/pic2.jpg +0 -0
- data/test_app/public/images/spacer.gif +0 -0
- data/test_app/public/images/upbg.gif +0 -0
- data/test_app/public/javascripts/facebox-1.3/closelabel.png +0 -0
- data/test_app/public/javascripts/facebox-1.3/facebox.css +80 -0
- data/test_app/public/javascripts/facebox-1.3/facebox.js +309 -0
- data/test_app/public/javascripts/facebox-1.3/loading.gif +0 -0
- data/test_app/public/stylesheets/default.css +361 -0
- data/test_app/public/stylesheets/interpret_live_edit_style.css +38 -0
- data/test_app/public/stylesheets/interpret_style.css +18 -0
- data/test_app/public/stylesheets/private.css +0 -0
- metadata +96 -29
- data/app/sweepers/interpret/base_sweeper.rb +0 -18
- data/app/sweepers/interpret/translation_sweeper.rb +0 -11
- data/public/javascripts/jquery.purr.js +0 -180
- data/test_app/app/sweepers/page_sweeper.rb +0 -12
- data/test_app/app/views/pages/contact.html.haml +0 -8
- data/test_app/app/views/pages/index.html.haml +0 -10
- data/test_app/config/locales/ca.yml +0 -6
- data/test_app/public/javascripts/jquery.purr.js +0 -180
@@ -1,28 +1,34 @@
|
|
1
1
|
<% interpret_title "Interpret - Tools" %>
|
2
2
|
|
3
3
|
<div class="header">
|
4
|
-
<h1>
|
4
|
+
<h1>Tools for import/export locale data</h1>
|
5
5
|
</div>
|
6
|
+
|
7
|
+
<p><%= link_to "Download", export_interpret_tools_path %> the current translations for '<%= I18n.locale %>' language as .yml file</p>
|
8
|
+
<p>Upload your .yml file for '<%= I18n.locale %>' language</p>
|
6
9
|
<p>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
<%= form_tag import_interpret_tools_path, :multipart => true do %>
|
11
|
+
<%= label_tag "File:" %>
|
12
|
+
<%= file_field_tag :file %>
|
13
|
+
<%= submit_tag "Upload" %>
|
14
|
+
<% end %>
|
15
|
+
|
12
16
|
|
13
17
|
<div class="header">
|
14
18
|
<h1>Update contents from yml locale files</h1>
|
15
19
|
</div>
|
16
20
|
|
17
|
-
<p>
|
21
|
+
<p>Update all your application translations from the yml files.<br/>
|
18
22
|
</p>
|
19
|
-
<%= button_to "Update
|
23
|
+
<%= button_to "Update", run_update_interpret_tools_path %>
|
24
|
+
|
25
|
+
|
20
26
|
<div class="header">
|
21
27
|
<h1>Dump .yml contents into database</h1>
|
22
28
|
</div>
|
23
29
|
|
24
30
|
<p>With this option you can export all of your *.yml contents into the database backend<br/>
|
25
|
-
<b>Be aware!!</b> All of your current database translations will be
|
31
|
+
<b>Be aware!!</b> All of your current database translations will be updated to match with your current *.yml files.
|
26
32
|
</p>
|
27
33
|
|
28
34
|
<% if Rails.env == "production" %>
|
@@ -30,18 +36,5 @@ can change it below:
|
|
30
36
|
<% end %>
|
31
37
|
|
32
38
|
<p>
|
33
|
-
<%= button_to "
|
39
|
+
<%= button_to "Dump", dump_interpret_tools_path %>
|
34
40
|
</p>
|
35
|
-
|
36
|
-
<div class="header">
|
37
|
-
<h1>Tools for import/export locale data</h1>
|
38
|
-
</div>
|
39
|
-
|
40
|
-
<p><%= link_to "Download", export_interpret_tools_path %> the current translations for '<%= I18n.locale %>' language as .yml file</p>
|
41
|
-
<p>Upload your .yml file for '<%= I18n.locale %>' language</p>
|
42
|
-
<p>
|
43
|
-
<%= form_tag import_interpret_tools_path, :multipart => true do %>
|
44
|
-
<%= label_tag "File:" %>
|
45
|
-
<%= file_field_tag :file %>
|
46
|
-
<%= submit_tag "Upload" %>
|
47
|
-
<% end %>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
:activator => "#translation_#{x.id}",
|
25
25
|
:sanitize => false %>
|
26
26
|
</td>
|
27
|
-
<% if @interpret_admin%>
|
27
|
+
<% if @interpret_admin %>
|
28
28
|
<td style="width:5%" class='protection_input' id="protection_<%= x.id %>">
|
29
29
|
<%= best_in_place x, :protected,
|
30
30
|
:type => :checkbox,
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div id="interpret_live_edit">
|
2
|
+
<% if @translation %>
|
3
|
+
<%= form_for @translation, :url => interpret_translation_path(@translation) do |f| %>
|
4
|
+
<%= f.text_area :value, :value => @translation.value %>
|
5
|
+
<br/>
|
6
|
+
<%= f.submit %>
|
7
|
+
<% end %>
|
8
|
+
<% else %>
|
9
|
+
This translation does not exists yet. You should go to the interpret backoffice interaface and create it from there, this functionality is not yet supported by this live edition feature
|
10
|
+
<% end %>
|
11
|
+
</div>
|
@@ -1,8 +1,13 @@
|
|
1
1
|
|
2
2
|
<div id="interpret_container">
|
3
|
+
<% if flash.any? %>
|
4
|
+
<div class="interpret_flash grid_16 <%= flash.keys.first %>">
|
5
|
+
<%= flash[:notice] || flash[:alert] %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
3
8
|
<div class="menu grid_12">
|
4
9
|
<%= interpret_section_link_to "Overview", interpret_root_path %> |
|
5
|
-
<%
|
10
|
+
<% unless @interpret_user && !@interpret_admin %>
|
6
11
|
<%= interpret_section_link_to "Tools", interpret_tools_path %> |
|
7
12
|
<% end %>
|
8
13
|
<%= interpret_section_link_to "Search", interpret_search_path %>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<title><%= yield :title %></title>
|
5
5
|
<%= stylesheet_link_tag "interpret_style" %>
|
6
6
|
<%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" %>
|
7
|
-
<%= javascript_include_tag "
|
7
|
+
<%= javascript_include_tag "best_in_place", "interpret" %>
|
8
8
|
<%= csrf_meta_tag %>
|
9
9
|
</head>
|
10
10
|
<body>
|
data/config/routes.rb
CHANGED
data/interpret.gemspec
CHANGED
@@ -23,7 +23,6 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "i18n", "~> 0.5.0"
|
24
24
|
s.add_dependency "i18n-active_record"
|
25
25
|
s.add_dependency "ya2yaml", ">= 0.30.0"
|
26
|
-
s.add_dependency "will_paginate", ">= 3.0.pre2"
|
27
26
|
s.add_dependency "best_in_place", ">= 0.1.7"
|
28
27
|
s.add_dependency "lazyhash", ">= 0.1.1"
|
29
28
|
|
@@ -6,11 +6,12 @@ module Interpret
|
|
6
6
|
|
7
7
|
def copy_css
|
8
8
|
copy_file "stylesheets/interpret_style.css", "public/stylesheets/interpret_style.css"
|
9
|
+
copy_file "stylesheets/interpret_live_edit_style.css", "public/stylesheets/interpret_live_edit_style.css"
|
9
10
|
end
|
10
11
|
|
11
12
|
def copy_js
|
12
13
|
copy_file "javascripts/interpret.js", "public/javascripts/interpret.js"
|
13
|
-
|
14
|
+
directory "javascripts/facebox-1.3", "public/javascripts/facebox-1.3"
|
14
15
|
end
|
15
16
|
|
16
17
|
def copy_images
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class ActionController::Base
|
2
|
+
before_filter :set_interpret_user
|
3
|
+
|
4
|
+
private
|
5
|
+
def set_interpret_user
|
6
|
+
return unless Interpret.live_edit
|
7
|
+
|
8
|
+
if Interpret.current_user && defined?(Interpret.current_user.to_sym)
|
9
|
+
@interpret_user = eval(Interpret.current_user)
|
10
|
+
|
11
|
+
if @interpret_user.nil?
|
12
|
+
@interpret_admin = false
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
@interpret_admin = true
|
17
|
+
if Interpret.admin && @interpret_user.respond_to?(Interpret.admin)
|
18
|
+
@interpret_admin = @interpret_user.send(Interpret.admin)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/interpret/engine.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
require 'i18n/backend/active_record'
|
2
2
|
require 'interpret/logger'
|
3
3
|
require 'interpret/helpers'
|
4
|
+
require 'interpret/controller_filter'
|
4
5
|
|
5
6
|
module Interpret
|
6
7
|
class Engine < Rails::Engine
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
initializer "interpret.register_i18n_active_record_backend" do |app|
|
9
|
+
app.config.after_initialize do
|
10
|
+
if Interpret.registered_envs.include?(Rails.env.to_sym)
|
11
|
+
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
|
12
|
+
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Flatten)
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
Interpret.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)
|
15
|
+
I18n.backend = Interpret.backend
|
16
|
+
end
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
@@ -19,5 +22,13 @@ module Interpret
|
|
19
22
|
logfile.sync = true
|
20
23
|
Interpret.logger = InterpretLogger.new(logfile)
|
21
24
|
end
|
25
|
+
|
26
|
+
|
27
|
+
initializer "interpret.register_observer" do |app|
|
28
|
+
app.config.before_initialize do |app|
|
29
|
+
ActiveRecord::Base.observers << Interpret.sweeper.to_sym if Interpret.sweeper && I18n::Backend::ActiveRecord::Translation.table_exists?
|
30
|
+
ActiveRecord::Base.observers << :"interpret/expiration_observer" if !Interpret.sweeper && I18n::Backend::ActiveRecord::Translation.table_exists?
|
31
|
+
end
|
32
|
+
end
|
22
33
|
end
|
23
34
|
end
|
data/lib/interpret/helpers.rb
CHANGED
@@ -28,7 +28,46 @@ module Interpret
|
|
28
28
|
self.output_buffer = render(:file => "layouts/#{layout}")
|
29
29
|
end
|
30
30
|
|
31
|
+
def t(key, options = {})
|
32
|
+
if Interpret.live_edit && @interpret_admin
|
33
|
+
keys = build_keys(key, options)
|
34
|
+
"<span class='interpret_editable' data-key='#{keys}'>#{translate(key, options)}</span>".html_safe
|
35
|
+
else
|
36
|
+
translate(key, options) #.html_safe
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def interpret_live_edition
|
41
|
+
return unless Interpret.live_edit && @interpret_admin
|
42
|
+
content_tag(:div) do
|
43
|
+
concat(javascript_include_tag "facebox-1.3/facebox")
|
44
|
+
concat javascript_tag <<-JS
|
45
|
+
$(document).ready(function(){
|
46
|
+
$(".interpret_editable").click(function() {
|
47
|
+
var key = $(this).attr("data-key");
|
48
|
+
jQuery.facebox({ ajax: '#{live_edit_interpret_translations_path}?key=' + key});
|
49
|
+
return false;
|
50
|
+
});
|
51
|
+
});
|
52
|
+
JS
|
53
|
+
concat(stylesheet_link_tag "interpret_live_edit_style")
|
54
|
+
concat(stylesheet_link_tag "/javascripts/facebox-1.3/facebox.css")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
31
58
|
private
|
59
|
+
def build_keys(key, options)
|
60
|
+
I18n.normalize_keys(I18n.locale, scope_key_by_partial(key), options[:scope]).join(".")
|
61
|
+
end
|
62
|
+
|
63
|
+
def scope_key_by_partial(key)
|
64
|
+
if key.to_s.first == "."
|
65
|
+
"#{@_virtual_path.gsub(%r{/_?}, ".")}#{key.to_s}"
|
66
|
+
else
|
67
|
+
key
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
32
71
|
def build_tree(hash, origin_keys = "", prev_key = "")
|
33
72
|
out = "<ul>"
|
34
73
|
if origin_keys.present? && prev_key.blank?
|
data/lib/interpret/version.rb
CHANGED
data/lib/interpret.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'best_in_place'
|
2
|
-
require 'will_paginate'
|
3
2
|
require 'lazyhash'
|
4
3
|
|
5
4
|
module Interpret
|
@@ -12,11 +11,15 @@ module Interpret
|
|
12
11
|
mattr_accessor :current_user
|
13
12
|
mattr_accessor :admin
|
14
13
|
mattr_accessor :layout
|
14
|
+
mattr_accessor :soft
|
15
|
+
mattr_accessor :live_edit
|
15
16
|
|
16
17
|
@@controller = "action_controller/base"
|
17
18
|
@@registered_envs = [:production, :staging]
|
18
19
|
@@scope = ""
|
19
20
|
@@layout = "interpret_base"
|
21
|
+
@@soft = false
|
22
|
+
@@live_edit = false
|
20
23
|
|
21
24
|
def self.configure
|
22
25
|
yield self
|
data/lib/tasks/interpret.rake
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
namespace :interpret do
|
2
2
|
desc 'Copy all the translations from config/locales/*.yml into DB backend'
|
3
|
-
task :
|
3
|
+
task :dump => :environment do
|
4
4
|
Interpret::Translation.dump
|
5
|
+
eval(Interpret.sweeper.classify).instance.send(:run_expiration) if Interpret.sweeper
|
5
6
|
end
|
6
7
|
|
7
8
|
desc 'Synchronize the keys used in db backend with the ones on *.yml files'
|
8
|
-
task :update =>
|
9
|
+
task :update => :environment do
|
9
10
|
Interpret::Translation.update
|
11
|
+
eval(Interpret.sweeper.classify).instance.send(:run_expiration) if Interpret.sweeper
|
10
12
|
end
|
11
13
|
end
|
Binary file
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#facebox {
|
2
|
+
position: absolute;
|
3
|
+
top: 0;
|
4
|
+
left: 0;
|
5
|
+
z-index: 100;
|
6
|
+
text-align: left;
|
7
|
+
}
|
8
|
+
|
9
|
+
|
10
|
+
#facebox .popup{
|
11
|
+
position:relative;
|
12
|
+
border:3px solid rgba(0,0,0,0);
|
13
|
+
-webkit-border-radius:5px;
|
14
|
+
-moz-border-radius:5px;
|
15
|
+
border-radius:5px;
|
16
|
+
-webkit-box-shadow:0 0 18px rgba(0,0,0,0.4);
|
17
|
+
-moz-box-shadow:0 0 18px rgba(0,0,0,0.4);
|
18
|
+
box-shadow:0 0 18px rgba(0,0,0,0.4);
|
19
|
+
}
|
20
|
+
|
21
|
+
#facebox .content {
|
22
|
+
display:table;
|
23
|
+
width: 370px;
|
24
|
+
padding: 10px;
|
25
|
+
background: #fff;
|
26
|
+
-webkit-border-radius:4px;
|
27
|
+
-moz-border-radius:4px;
|
28
|
+
border-radius:4px;
|
29
|
+
}
|
30
|
+
|
31
|
+
#facebox .content > p:first-child{
|
32
|
+
margin-top:0;
|
33
|
+
}
|
34
|
+
#facebox .content > p:last-child{
|
35
|
+
margin-bottom:0;
|
36
|
+
}
|
37
|
+
|
38
|
+
#facebox .close{
|
39
|
+
position:absolute;
|
40
|
+
top:5px;
|
41
|
+
right:5px;
|
42
|
+
padding:2px;
|
43
|
+
background:#fff;
|
44
|
+
}
|
45
|
+
#facebox .close img{
|
46
|
+
opacity:0.3;
|
47
|
+
}
|
48
|
+
#facebox .close:hover img{
|
49
|
+
opacity:1.0;
|
50
|
+
}
|
51
|
+
|
52
|
+
#facebox .loading {
|
53
|
+
text-align: center;
|
54
|
+
}
|
55
|
+
|
56
|
+
#facebox .image {
|
57
|
+
text-align: center;
|
58
|
+
}
|
59
|
+
|
60
|
+
#facebox img {
|
61
|
+
border: 0;
|
62
|
+
margin: 0;
|
63
|
+
}
|
64
|
+
|
65
|
+
#facebox_overlay {
|
66
|
+
position: fixed;
|
67
|
+
top: 0px;
|
68
|
+
left: 0px;
|
69
|
+
height:100%;
|
70
|
+
width:100%;
|
71
|
+
}
|
72
|
+
|
73
|
+
.facebox_hide {
|
74
|
+
z-index:-100;
|
75
|
+
}
|
76
|
+
|
77
|
+
.facebox_overlayBG {
|
78
|
+
background-color: #000;
|
79
|
+
z-index: 99;
|
80
|
+
}
|