tolk 1.2.0 → 1.3.0

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.
@@ -69,23 +69,35 @@ div#head a {
69
69
  text-decoration: none;
70
70
  }
71
71
 
72
+ div#head span {
73
+ padding: 8px 6px;
74
+ margin-right: 1px;
75
+ }
76
+
72
77
  div#head span.home {
78
+ background: #333;
79
+ }
80
+
81
+ div#head span.locale {
82
+ background: #444;
83
+ }
84
+
85
+ div#head span.locale a {
86
+ color: #fff;
87
+ }
88
+
89
+ div#head span:first-child {
90
+ padding-left: 12px;
73
91
  -webkit-border-top-left-radius: 10px;
74
92
  -webkit-border-bottom-left-radius: 10px;
75
93
  -moz-border-radius-topleft: 10px;
76
94
  -moz-border-radius-bottomleft: 10px;
77
95
  border-top-left-radius: 10px;
78
96
  border-bottom-left-radius: 10px;
79
- background: #333;
80
- padding: 8px 6px 8px 12px;
81
- margin-right: 1px;
82
97
  }
83
98
 
84
- div#head span.locale {
85
- color: #fff;
86
- font-weight: bold;
87
- background: #444;
88
- padding: 8px 12px 8px 6px;
99
+ div#head span:last-child {
100
+ padding-right: 12px;
89
101
  -webkit-border-top-right-radius: 10px;
90
102
  -webkit-border-bottom-right-radius: 10px;
91
103
  -moz-border-radius-topright: 10px;
@@ -94,24 +106,6 @@ div#head span.locale {
94
106
  border-bottom-right-radius: 10px;
95
107
  }
96
108
 
97
- div#head span.locale.empty {
98
- background: #333;
99
- padding-left: 0;
100
- margin-left: -6px;
101
- }
102
-
103
- div#head span.locale em {
104
- font-style: normal;
105
- font-weight: normal;
106
- }
107
-
108
- div#head span.note {
109
- color: #777;
110
- font-size: 13px;
111
- font-weight: normal;
112
- margin-left: 10px;
113
- }
114
-
115
109
  h2,
116
110
  h3 {
117
111
  font-size: 18px;
@@ -4,7 +4,7 @@ module Tolk
4
4
  before_filter :ensure_no_primary_locale, :only => [:all, :update, :show, :updated]
5
5
 
6
6
  def index
7
- @locales = Tolk::Locale.secondary_locales
7
+ @locales = Tolk::Locale.secondary_locales.sort_by(&:language_name)
8
8
  end
9
9
 
10
10
  def show
@@ -21,7 +21,7 @@ module Tolk
21
21
  def tolk_locale_selection
22
22
  existing_locale_names = Tolk::Locale.all.map(&:name)
23
23
 
24
- pairs = Tolk::Locale::MAPPING.to_a.map(&:reverse).sort_by(&:first)
24
+ pairs = Tolk.config.mapping.to_a.map(&:reverse).sort_by(&:first)
25
25
  pairs.reject {|pair| existing_locale_names.include?(pair.last) }
26
26
  end
27
27
 
@@ -1,55 +1,13 @@
1
+ require 'tolk/config'
2
+
1
3
  module Tolk
2
4
  class Locale < ActiveRecord::Base
3
5
  self.table_name = "tolk_locales"
4
6
 
5
- MAPPING = {
6
- 'ar' => 'Arabic',
7
- 'bs' => 'Bosnian',
8
- 'bt' => 'Bulgarian',
9
- 'ca' => 'Catalan',
10
- 'cz' => 'Czech',
11
- 'da' => 'Danish',
12
- 'de' => 'German',
13
- 'dsb' => 'Lower Sorbian',
14
- 'el' => 'Greek',
15
- 'en' => 'English',
16
- 'es' => 'Spanish',
17
- 'et' => 'Estonian',
18
- 'fa' => 'Persian',
19
- 'fi' => 'Finnish',
20
- 'fr' => 'French',
21
- 'he' => 'Hebrew',
22
- 'hr' => 'Croatian',
23
- 'hsb' => 'Upper Sorbian',
24
- 'hu' => 'Hungarian',
25
- 'id' => 'Indonesian',
26
- 'is' => 'Icelandic',
27
- 'it' => 'Italian',
28
- 'jp' => 'Japanese',
29
- 'ko' => 'Korean',
30
- 'lo' => 'Lao',
31
- 'lt' => 'Lithuanian',
32
- 'lv' => 'Latvian',
33
- 'mk' => 'Macedonian',
34
- 'nl' => 'Dutch',
35
- 'no' => 'Norwegian',
36
- 'pl' => 'Polish',
37
- 'pt-br' => 'Portuguese (Brazilian)',
38
- 'pt-PT' => 'Portuguese (Portugal)',
39
- 'ro' => 'Romanian',
40
- 'ru' => 'Russian',
41
- 'se' => 'Swedish',
42
- 'sk' => 'Slovak',
43
- 'sl' => 'Slovenian',
44
- 'sr' => 'Serbian',
45
- 'sw' => 'Swahili',
46
- 'th' => 'Thai',
47
- 'tr' => 'Turkish',
48
- 'uk' => 'Ukrainian',
49
- 'vi' => 'Vietnamese',
50
- 'zh-CN' => 'Chinese (Simplified)',
51
- 'zh-TW' => 'Chinese (Traditional)'
52
- }
7
+ def self._dump_path
8
+ # Necessary to acces rails.root at runtime !
9
+ @dump_path ||= Tolk.config.dump_path.is_a?(Proc) ? instance_eval(&Tolk.config.dump_path) : Tolk.config.dump_path
10
+ end
53
11
 
54
12
  has_many :phrases, :through => :translations, :class_name => 'Tolk::Phrase'
55
13
  has_many :translations, :class_name => 'Tolk::Translation', :dependent => :destroy
@@ -59,7 +17,7 @@ module Tolk
59
17
 
60
18
  attr_accessible :name
61
19
  cattr_accessor :locales_config_path
62
- self.locales_config_path = "#{Rails.root}/config/locales"
20
+ self.locales_config_path = self._dump_path
63
21
 
64
22
  cattr_accessor :primary_locale_name
65
23
  self.primary_locale_name = I18n.default_locale.to_s
@@ -191,7 +149,7 @@ module Tolk
191
149
  end
192
150
 
193
151
  def language_name
194
- MAPPING[self.name] || self.name
152
+ Tolk.config.mapping[self.name] || self.name
195
153
  end
196
154
 
197
155
  def get(key)
@@ -208,8 +166,23 @@ module Tolk
208
166
  translations
209
167
  end
210
168
 
169
+ def self.rename(old_name, new_name)
170
+ if old_name.blank? || new_name.blank?
171
+ "You need to provide both names, aborting."
172
+ else
173
+ if locale = find_by_name(old_name)
174
+ locale.name = new_name
175
+ locale.save
176
+ "Locale ' #{old_name}' was renamed '#{new_name}'"
177
+ else
178
+ "Locale with name '#{old_name}' not found."
179
+ end
180
+ end
181
+ end
182
+
211
183
  private
212
184
 
185
+
213
186
  def remove_invalid_translations_from_target
214
187
  self.translations.target.dup.each do |t|
215
188
  unless t.valid?
@@ -1,6 +1,5 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
-
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%= Tolk::Locale.primary_locale_name %>" lang="<%= Tolk::Locale.primary_locale_name %>">
1
+ <!DOCTYPE html>
2
+ <html lang="<%= Tolk::Locale.primary_locale_name %>">
4
3
 
5
4
  <head>
6
5
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -14,7 +13,7 @@
14
13
  <body>
15
14
  <div id="container">
16
15
  <div id="head">
17
- <h1><span class="home"><%= link_to "Tolk", tolk.root_path %></span><%= yield :locale %></h1>
16
+ <h1><span class="home"><%= link_to "Tolk", root_path %></span><% if @locale.present? %><span class="locale"><%= link_to @locale.language_name, locale_path(@locale) %></span><% end %></h1>
18
17
  </div>
19
18
  <%= yield %>
20
19
  </div>
@@ -1,6 +1,3 @@
1
- <% content_for :locale do %><span class="locale"><%= @locale.language_name %></span>
2
- <% end %>
3
-
4
1
  <h3 class="switch">Completed translations <span>(<%= link_to 'See phrases missing translation', @locale %>)</span></h3>
5
2
 
6
3
  <% if @locale.has_updated_translations? && action_name != 'updated' %>
@@ -1,6 +1,3 @@
1
- <% content_for :locale do %><span class="locale empty"></span>
2
- <% end %>
3
-
4
1
  <h2>Locales <span>Primary locale is <%= Tolk::Locale.primary_locale.language_name %></span></h2>
5
2
  <% if @locales.any? %>
6
3
  <ul class="locales clearfix">
@@ -1,7 +1,3 @@
1
- <% content_for :locale do %>
2
- <span class="locale"><%= @locale.language_name %></span>
3
- <% end %>
4
-
5
1
  <% content_for :head do %>
6
2
  <link rel="alternate" type="application/rss+xml" title="RSS" href="<%= tolk.locale_path(@locale, :format => 'atom') -%>" />
7
3
  <% end %>
@@ -1,4 +1,4 @@
1
- <%= form_tag "/tolk/search", :method => :get do %>
1
+ <%= form_tag tolk.search_path, :method => :get do %>
2
2
  <%= hidden_field_tag :locale, locale.name %>
3
3
  Search for
4
4
  <%= scope_selector_for(@locale) %>
@@ -1,7 +1,3 @@
1
- <% content_for :locale do %>
2
- <span class="locale"><%= @locale.language_name %></span>
3
- <% end %>
4
-
5
1
  <h3 class="search">
6
2
  <%= render :partial => "form", :locals => { :locale => @locale } %>
7
3
  </h3>
@@ -0,0 +1,44 @@
1
+ require 'rails/generators'
2
+ require File.expand_path('../utils', __FILE__)
3
+
4
+ # http://guides.rubyonrails.org/generators.html
5
+ # http://rdoc.info/github/wycats/thor/master/Thor/Actions.html
6
+ # keep generator idempotent, thanks
7
+ # Thanks to https://github.com/sferik/rails_admin !
8
+
9
+ module Tolk
10
+ class InstallGenerator < Rails::Generators::Base
11
+
12
+ source_root File.expand_path("../templates", __FILE__)
13
+ include Rails::Generators::Migration
14
+ include Generators::Utils::InstanceMethods
15
+ extend Generators::Utils::ClassMethods
16
+
17
+ argument :_namespace, :type => :string, :required => false, :desc => "Tolk url namespace"
18
+ desc "Tolk installation generator"
19
+ def install
20
+ routes = File.open(Rails.root.join("config/routes.rb")).try :read
21
+ initializer = (File.open(Rails.root.join("config/initializers/tolk.rb")) rescue nil).try :read
22
+
23
+ display "Hello, Tolk installer will help you sets things up!", :black
24
+ unless initializer
25
+ install_generator = ask_boolean("Do you wan't to install the optional configuration file (to change mappings, locales dump location etc..) ?")
26
+ template "initializer.erb", "config/initializers/tolk.rb" if install_generator
27
+ else
28
+ display "You already have a config file. You're updating, heh? I'm generating a new 'tolk.rb.example' that you can review."
29
+ template "initializer.erb", "config/initializers/tolk.rb.example"
30
+ end
31
+
32
+ display "Adding a migration..."
33
+ migration_template 'migration.rb', 'db/migrate/create_tolk_tables.rb' rescue display $!.message
34
+
35
+ namespace = ask_for("Where do you want to mount tolk?", "tolk", _namespace)
36
+ gsub_file "config/routes.rb", /mount Tolk::Engine => \'\/.+\', :as => \'tolk\'/, ''
37
+ gsub_file "config/routes.rb", /mount Tolk::Engine => \'\/.+\'/, ''
38
+ route("mount Tolk::Engine => '/#{namespace}', :as => 'tolk'")
39
+
40
+ display "Job's done: migrate, start your server and visit '/#{namespace}'!", :blue
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ # Tolk config file. Generated on <%= DateTime.now.to_s(:long) %>
4
+ # See github.com/tolk/tolk for more informations
5
+
6
+ Tolk.config do |config|
7
+
8
+ # If you need to add a mapping do it like this :
9
+ # May we suggest you use http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
10
+ # config.mapping["fr-ES"] = 'Frañol !'
11
+
12
+ end
@@ -0,0 +1,35 @@
1
+ module Tolk
2
+ module Generators
3
+ module Utils
4
+ module InstanceMethods
5
+ def display(output, color = :green)
6
+ say(" - #{output}", color)
7
+ end
8
+
9
+ def ask_for(wording, default_value = nil, override_if_present_value = nil)
10
+ override_if_present_value.present? ?
11
+ display("Using [#{override_if_present_value}] for question '#{wording}'") && override_if_present_value :
12
+ ask(" ? #{wording} Press <enter> for [#{default_value}] >", :yellow).presence || default_value
13
+ end
14
+
15
+ def ask_boolean(wording, default_value = nil)
16
+ value = ask_for(wording, 'Y')
17
+ value = (value == 'Y')
18
+ end
19
+ end
20
+
21
+ module ClassMethods
22
+ def next_migration_number(dirname)
23
+ if ActiveRecord::Base.timestamped_migrations
24
+ migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
25
+ migration_number += 1
26
+ migration_number.to_s
27
+ else
28
+ "%.3d" % (current_migration_number(dirname) + 1)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -1,7 +1,14 @@
1
1
  namespace :tolk do
2
+ desc "Update locale"
3
+ task :update_locale, [:old_name, :new_name] => :environment do |t, args|
4
+ old_name, new_name = args[:old_name], args[:new_name]
5
+ puts Tolk::Locale.rename(old_name, new_name)
6
+ end
7
+
2
8
  desc "Add database tables, copy over the assets, and import existing translations"
3
9
  task :setup => :environment do
4
- system("rails generate tolk_migration")
10
+ system 'rails g tolk:install'
11
+
5
12
  Rake::Task['db:migrate'].invoke
6
13
  Rake::Task['tolk:sync'].invoke
7
14
  Rake::Task['tolk:import'].invoke
@@ -1,8 +1,17 @@
1
1
  require 'will_paginate'
2
2
  require 'ya2yaml'
3
+ require 'tolk/config'
3
4
  require 'tolk/engine'
4
5
  require 'tolk/sync'
5
6
  require 'tolk/import'
6
7
 
7
8
  module Tolk
9
+ # Setup Tolk
10
+ def self.config(&block)
11
+ if block_given?
12
+ block.call(Tolk::Config)
13
+ else
14
+ Tolk::Config
15
+ end
16
+ end
8
17
  end
@@ -0,0 +1,69 @@
1
+ require 'active_support/core_ext/class/attribute_accessors'
2
+
3
+ module Tolk
4
+ module Config
5
+
6
+
7
+ class << self
8
+ # Mapping : a hash of the type { 'ar' => 'Arabic' }
9
+ attr_accessor :mapping
10
+
11
+ # Dump locale path by default the locales folder (config/locales)
12
+ attr_accessor :dump_path
13
+
14
+ def reset
15
+ @dump_path = Proc.new { "#{Rails.application.root}/config/locales" }
16
+
17
+ @mapping = {
18
+ 'ar' => 'Arabic',
19
+ 'bs' => 'Bosnian',
20
+ 'bg' => 'Bulgarian',
21
+ 'ca' => 'Catalan',
22
+ 'cs' => 'Czech',
23
+ 'da' => 'Danish',
24
+ 'de' => 'German',
25
+ 'el' => 'Greek',
26
+ 'en' => 'English',
27
+ 'es' => 'Spanish',
28
+ 'et' => 'Estonian',
29
+ 'fa' => 'Persian',
30
+ 'fi' => 'Finnish',
31
+ 'fr' => 'French',
32
+ 'he' => 'Hebrew',
33
+ 'hr' => 'Croatian',
34
+ 'hu' => 'Hungarian',
35
+ 'id' => 'Indonesian',
36
+ 'is' => 'Icelandic',
37
+ 'it' => 'Italian',
38
+ 'ja' => 'Japanese',
39
+ 'ko' => 'Korean',
40
+ 'lo' => 'Lao',
41
+ 'lt' => 'Lithuanian',
42
+ 'lv' => 'Latvian',
43
+ 'mk' => 'Macedonian',
44
+ 'nl' => 'Dutch',
45
+ 'no' => 'Norwegian',
46
+ 'pl' => 'Polish',
47
+ 'pt-br' => 'Portuguese (Brazilian)',
48
+ 'pt-PT' => 'Portuguese (Portugal)',
49
+ 'ro' => 'Romanian',
50
+ 'ru' => 'Russian',
51
+ 'sv' => 'Swedish',
52
+ 'sk' => 'Slovak',
53
+ 'sl' => 'Slovene',
54
+ 'sr' => 'Serbian',
55
+ 'sw' => 'Swahili',
56
+ 'th' => 'Thai',
57
+ 'tr' => 'Turkish',
58
+ 'uk' => 'Ukrainian',
59
+ 'vi' => 'Vietnamese',
60
+ 'zh-CN' => 'Chinese (Simplified)',
61
+ 'zh-TW' => 'Chinese (Traditional)'
62
+ }
63
+ end
64
+ end
65
+
66
+ # Set default values for configuration options on load
67
+ self.reset
68
+ end
69
+ end
@@ -8,8 +8,14 @@ module Tolk
8
8
 
9
9
  def import_secondary_locales
10
10
  locales = Dir.entries(self.locales_config_path)
11
- locales = locales.reject {|l| ['.', '..'].include?(l) || !l.ends_with?('.yml') }.map {|x| x.split('.').first } - [Tolk::Locale.primary_locale.name]
12
-
11
+
12
+ locale_block_filter = Proc.new {
13
+ |l| ['.', '..'].include?(l) ||
14
+ !l.ends_with?('.yml') ||
15
+ l.match(/(.*\.){2,}/) # reject files of type xxx.en.yml
16
+ }
17
+ locales = locales.reject(&locale_block_filter).map {|x| x.split('.').first }
18
+ locales = locales - [Tolk::Locale.primary_locale.name]
13
19
  locales.each {|l| import_locale(l) }
14
20
  end
15
21
 
@@ -1,3 +1,3 @@
1
1
  module Tolk
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tolk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-05-16 00:00:00.000000000 Z
15
+ date: 2012-05-18 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: will_paginate
@@ -56,9 +56,12 @@ files:
56
56
  - MIT-LICENSE
57
57
  - config/routes.rb
58
58
  - init.rb
59
- - lib/generators/tolk_migration/templates/migrate/create_tolk_tables.rb
60
- - lib/generators/tolk_migration/tolk_migration_generator.rb
59
+ - lib/generators/tolk/install_generator.rb
60
+ - lib/generators/tolk/templates/initializer.erb
61
+ - lib/generators/tolk/templates/migration.rb
62
+ - lib/generators/tolk/utils.rb
61
63
  - lib/tasks/tolk_tasks.rake
64
+ - lib/tolk/config.rb
62
65
  - lib/tolk/engine.rb
63
66
  - lib/tolk/import.rb
64
67
  - lib/tolk/sync.rb
@@ -88,7 +91,10 @@ files:
88
91
  - app/views/tolk/searches/show.html.erb
89
92
  homepage: http://github.com/tolk/tolk
90
93
  licenses: []
91
- post_install_message:
94
+ post_install_message: ! "##################################\n# Tolk, if upgrading
95
+ from pre-1.3.\n##################################\n - A configuration file is now
96
+ available, run tolk:setup.\n - Mapping has been updated, use update_locale rake
97
+ task if necessary."
92
98
  rdoc_options: []
93
99
  require_paths:
94
100
  - lib
@@ -1,19 +0,0 @@
1
- class TolkMigrationGenerator < Rails::Generators::Base
2
- include Rails::Generators::Migration
3
-
4
- source_root File.expand_path("../templates", __FILE__)
5
-
6
- def create_migration_file
7
- migration_template "migrate/create_tolk_tables.rb", "db/migrate/create_tolk_tables.rb"
8
- end
9
-
10
- # Implement the required interface for Rails::Generators::Migration.
11
- def self.next_migration_number(dirname) #:nodoc:
12
- next_migration_number = current_migration_number(dirname) + 1
13
- if ActiveRecord::Base.timestamped_migrations
14
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
15
- else
16
- "%.3d" % next_migration_number
17
- end
18
- end
19
- end