i18n_generators 1.1.0 → 1.2.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.
- data/History.txt +6 -0
- data/README.rdoc +8 -11
- data/Rakefile +8 -0
- data/i18n_generators.gemspec +4 -0
- data/lib/generators/i18n/i18n_generator.rb +2 -2
- data/lib/generators/i18n_translation/i18n_translation_generator.rb +69 -41
- data/lib/generators/i18n_translation/lib/yaml.rb +4 -4
- data/lib/i18n_generators/version.rb +1 -1
- data/spec/i18n_locale_command_spec.rb +34 -26
- data/spec/i18n_translation_command_spec.rb +6 -10
- data/spec/spec_helper.rb +6 -1
- data/spec/translator_spec.rb +11 -18
- data/spec/yaml_spec.rb +5 -4
- metadata +49 -35
- data/generators/i18n/USAGE +0 -11
- data/generators/i18n/i18n_generator.rb +0 -88
- data/generators/i18n/lib/yaml.rb +0 -187
- data/generators/i18n/templates/base.yml +0 -0
- data/generators/i18n/templates/i18n_config.rb +0 -4
- data/generators/i18n/templates/translation.yml +0 -1
- data/generators/i18n_locale/USAGE +0 -10
- data/generators/i18n_locale/i18n_locale_command.rb +0 -141
- data/generators/i18n_locale/i18n_locale_generator.rb +0 -8
- data/generators/i18n_locale/lib/cldr.rb +0 -138
- data/generators/i18n_scaffold/i18n_scaffold_generator.rb +0 -2
- data/generators/i18n_scaffold/templates/controller.rb +0 -85
- data/generators/i18n_scaffold/templates/functional_test.rb +0 -45
- data/generators/i18n_scaffold/templates/helper.rb +0 -2
- data/generators/i18n_scaffold/templates/helper_test.rb +0 -4
- data/generators/i18n_scaffold/templates/layout.html.erb +0 -17
- data/generators/i18n_scaffold/templates/style.css +0 -54
- data/generators/i18n_scaffold/templates/view_edit.html.erb +0 -18
- data/generators/i18n_scaffold/templates/view_index.html.erb +0 -24
- data/generators/i18n_scaffold/templates/view_new.html.erb +0 -17
- data/generators/i18n_scaffold/templates/view_show.html.erb +0 -10
- data/generators/i18n_translation/USAGE +0 -8
- data/generators/i18n_translation/i18n_translation_command.rb +0 -124
- data/generators/i18n_translation/i18n_translation_generator.rb +0 -8
- data/generators/i18n_translation/lib/erb_executer.rb +0 -30
- data/generators/i18n_translation/lib/recording_backend.rb +0 -15
- data/generators/i18n_translation/lib/through_ryoku.rb +0 -7
- data/generators/i18n_translation/lib/translator.rb +0 -27
- data/spec/cldr_spec.rb +0 -54
data/spec/yaml_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'generators/i18n_translation/lib/yaml'
|
3
4
|
|
4
5
|
describe I27r::YamlDocument do
|
5
6
|
context 'when loading an existing file' do
|
@@ -68,7 +69,7 @@ ja:
|
|
68
69
|
numbers:
|
69
70
|
one: "いち" #g
|
70
71
|
two: "に"
|
71
|
-
three:
|
72
|
+
three: さん #g
|
72
73
|
|
73
74
|
aaa:
|
74
75
|
foo: "ふー"
|
@@ -82,12 +83,12 @@ YAML
|
|
82
83
|
subject { @yaml['ja', 'aho', 'hage'] }
|
83
84
|
it { should == 'hige' }
|
84
85
|
end
|
85
|
-
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
89
|
context 'when loading an existing file with alias' do
|
90
90
|
before do
|
91
|
+
pending
|
91
92
|
@yaml_string = <<YAML
|
92
93
|
ja:
|
93
94
|
activerecord:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n_generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mechanize
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164523840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,51 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164523840
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rails
|
27
|
+
requirement: &2164538720 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2164538720
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rails
|
38
|
+
requirement: &2164538120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2164538120
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &2164537160 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2164537160
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rake
|
60
|
+
requirement: &2164536700 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2164536700
|
25
69
|
description: A Rails generator plugin & gem that generates Rails I18n locale files
|
26
70
|
for almost every known locale.
|
27
71
|
email:
|
@@ -37,34 +81,6 @@ files:
|
|
37
81
|
- MIT-LICENSE
|
38
82
|
- README.rdoc
|
39
83
|
- Rakefile
|
40
|
-
- generators/i18n/USAGE
|
41
|
-
- generators/i18n/i18n_generator.rb
|
42
|
-
- generators/i18n/lib/yaml.rb
|
43
|
-
- generators/i18n/templates/base.yml
|
44
|
-
- generators/i18n/templates/i18n_config.rb
|
45
|
-
- generators/i18n/templates/translation.yml
|
46
|
-
- generators/i18n_locale/USAGE
|
47
|
-
- generators/i18n_locale/i18n_locale_command.rb
|
48
|
-
- generators/i18n_locale/i18n_locale_generator.rb
|
49
|
-
- generators/i18n_locale/lib/cldr.rb
|
50
|
-
- generators/i18n_scaffold/i18n_scaffold_generator.rb
|
51
|
-
- generators/i18n_scaffold/templates/controller.rb
|
52
|
-
- generators/i18n_scaffold/templates/functional_test.rb
|
53
|
-
- generators/i18n_scaffold/templates/helper.rb
|
54
|
-
- generators/i18n_scaffold/templates/helper_test.rb
|
55
|
-
- generators/i18n_scaffold/templates/layout.html.erb
|
56
|
-
- generators/i18n_scaffold/templates/style.css
|
57
|
-
- generators/i18n_scaffold/templates/view_edit.html.erb
|
58
|
-
- generators/i18n_scaffold/templates/view_index.html.erb
|
59
|
-
- generators/i18n_scaffold/templates/view_new.html.erb
|
60
|
-
- generators/i18n_scaffold/templates/view_show.html.erb
|
61
|
-
- generators/i18n_translation/USAGE
|
62
|
-
- generators/i18n_translation/i18n_translation_command.rb
|
63
|
-
- generators/i18n_translation/i18n_translation_generator.rb
|
64
|
-
- generators/i18n_translation/lib/erb_executer.rb
|
65
|
-
- generators/i18n_translation/lib/recording_backend.rb
|
66
|
-
- generators/i18n_translation/lib/through_ryoku.rb
|
67
|
-
- generators/i18n_translation/lib/translator.rb
|
68
84
|
- i18n_generators.gemspec
|
69
85
|
- lib/generators/i18n/USAGE
|
70
86
|
- lib/generators/i18n/i18n_generator.rb
|
@@ -76,7 +92,6 @@ files:
|
|
76
92
|
- lib/generators/i18n_translation/lib/yaml.rb
|
77
93
|
- lib/generators/i18n_translation/lib/yaml_waml.rb
|
78
94
|
- lib/i18n_generators/version.rb
|
79
|
-
- spec/cldr_spec.rb
|
80
95
|
- spec/data/cldr/ja.html
|
81
96
|
- spec/data/yml/active_record/en-US.yml
|
82
97
|
- spec/i18n_locale_command_spec.rb
|
@@ -105,12 +120,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
120
|
version: '0'
|
106
121
|
requirements: []
|
107
122
|
rubyforge_project: i18n_generators
|
108
|
-
rubygems_version: 1.8.
|
123
|
+
rubygems_version: 1.8.17
|
109
124
|
signing_key:
|
110
125
|
specification_version: 3
|
111
126
|
summary: Generates I18n locale files for Rails 3 and Rails 2
|
112
127
|
test_files:
|
113
|
-
- spec/cldr_spec.rb
|
114
128
|
- spec/data/cldr/ja.html
|
115
129
|
- spec/data/yml/active_record/en-US.yml
|
116
130
|
- spec/i18n_locale_command_spec.rb
|
data/generators/i18n/USAGE
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
Generates a config file and locale files and a model/attributes translation file for Rails 2.x i18n.
|
3
|
-
|
4
|
-
Example:
|
5
|
-
./script/generate i18n locale_name (ja, de-AT, etc.)
|
6
|
-
|
7
|
-
This will create:
|
8
|
-
config/locales/ja.yml
|
9
|
-
config/locales/translation_ja.yml
|
10
|
-
And update:
|
11
|
-
config/environment.rb
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
require 'rubygems'
|
3
|
-
require 'rails_generator'
|
4
|
-
require 'rails_generator/commands'
|
5
|
-
|
6
|
-
class I18nGenerator < Rails::Generator::NamedBase
|
7
|
-
attr_reader :locale_name, :cldr, :translator, :generate_translation_only, :generate_locale_only, :include_timestamps
|
8
|
-
|
9
|
-
def initialize(runtime_args, runtime_options = {})
|
10
|
-
if options[:scaffold]
|
11
|
-
#TODO invoke scaffold generator
|
12
|
-
puts 'please use generate i18n_scaffold command'
|
13
|
-
exit
|
14
|
-
end
|
15
|
-
|
16
|
-
super
|
17
|
-
unless name =~ /^[a-zA-Z]{2}([-_][a-zA-Z]{2})?$/
|
18
|
-
puts 'ERROR: Wrong locale format. Please input in ?? or ??-?? format.'
|
19
|
-
exit
|
20
|
-
end
|
21
|
-
@locale_name = name.length == 5 ? "#{name[0..1].downcase}-#{name[3..4].upcase}" : "#{name[0..1].downcase}"
|
22
|
-
|
23
|
-
unless options[:generate_translation_only]
|
24
|
-
gem 'gettext', '<2'
|
25
|
-
require 'gettext'
|
26
|
-
@cldr = CldrDocument.new @locale_name
|
27
|
-
GetText.bindtextdomain 'rails'
|
28
|
-
GetText.locale = @locale_name
|
29
|
-
end
|
30
|
-
unless options[:generate_locale_only]
|
31
|
-
lang = @locale_name.sub(/-.*$/, '')
|
32
|
-
@translator = Translator.new lang
|
33
|
-
end
|
34
|
-
@include_timestamps = true if options[:include_timestamps]
|
35
|
-
end
|
36
|
-
|
37
|
-
def manifest
|
38
|
-
record do |m|
|
39
|
-
m.directory 'config/locales'
|
40
|
-
unless options[:generate_translation_only]
|
41
|
-
logger.debug 'updating environment.rb ...'
|
42
|
-
m.generate_configuration
|
43
|
-
if defined_in_rails_i18n_repository?
|
44
|
-
logger.debug "fetching #{locale_name}.yml from rails-i18n repository..."
|
45
|
-
m.fetch_from_rails_i18n_repository
|
46
|
-
else
|
47
|
-
logger.debug "generating #{locale_name} YAML files for Rails..."
|
48
|
-
m.active_support_yaml
|
49
|
-
m.active_record_yaml
|
50
|
-
m.action_view_yaml
|
51
|
-
end
|
52
|
-
end
|
53
|
-
unless options[:generate_locale_only]
|
54
|
-
m.translation_yaml
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
protected
|
60
|
-
def add_options!(opt)
|
61
|
-
opt.separator ''
|
62
|
-
opt.separator 'Options:'
|
63
|
-
opt.on('--translation',
|
64
|
-
'Generate translations for all models with their attributes and all translation keys in the view files.') {|v| options[:generate_translation_only] = v}
|
65
|
-
opt.on('--locale', 'Generate locale files.') {|v| options[:generate_locale_only] = v}
|
66
|
-
opt.on('--include-timestamps', 'Include timestamp columns in the YAML translation.') {|v| options[:include_timestamps] = v}
|
67
|
-
opt.on('--include-timestamp', 'Include timestamp columns in the YAML translation.') {|v| options[:include_timestamps] = v}
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
def defined_in_rails_i18n_repository?
|
72
|
-
begin
|
73
|
-
uri = URI.parse "https://github.com/svenfuchs/rails-i18n/raw/master/rails/locale/#{locale_name}.yml"
|
74
|
-
http = Net::HTTP.new uri.host, uri.port
|
75
|
-
http.use_ssl = true
|
76
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
77
|
-
req = Net::HTTP::Get.new uri.request_uri
|
78
|
-
res = http.request req
|
79
|
-
res.code == '200'
|
80
|
-
rescue
|
81
|
-
false
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
require File.join(File.dirname(__FILE__), '../i18n_locale/i18n_locale_command')
|
87
|
-
require File.join(File.dirname(__FILE__), '../i18n_translation/i18n_translation_command')
|
88
|
-
Rails::Generator::Commands::Create.send :include, I18nGenerator::Generator::Commands::Create
|
data/generators/i18n/lib/yaml.rb
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module I18nLocaleGeneratorModule
|
4
|
-
class Node
|
5
|
-
attr_reader :document, :indent_level
|
6
|
-
attr_accessor :line
|
7
|
-
|
8
|
-
def initialize(parent, line_index, text)
|
9
|
-
@document, @line, @text = parent.document, line_index, text.to_s
|
10
|
-
@text =~ /(^\s*)/
|
11
|
-
@indent_level = $1.nil? ? 0 : $1.size
|
12
|
-
@yaml = YAML.load(@text.to_s + ' ')
|
13
|
-
end
|
14
|
-
|
15
|
-
def parent
|
16
|
-
@parent ||= document.parent_of self
|
17
|
-
end
|
18
|
-
|
19
|
-
def children
|
20
|
-
@children ||= document.children_of(self)
|
21
|
-
end
|
22
|
-
alias :nodes :children
|
23
|
-
|
24
|
-
def [](node_name)
|
25
|
-
if node = nodes.detect {|n| n.key.to_s == node_name.to_s}
|
26
|
-
node
|
27
|
-
else
|
28
|
-
nodes.add "#{' ' * (@indent_level + 2)}#{node_name}: "
|
29
|
-
nodes.last
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def key
|
34
|
-
@yaml.is_a?(Hash) ? @yaml.keys.first : nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def value
|
38
|
-
@yaml.is_a?(Hash) ? @yaml.values.first : nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def value=(val)
|
42
|
-
if @yaml[self.key] != val
|
43
|
-
@yaml[self.key] = val
|
44
|
-
@changed = true
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def text
|
49
|
-
if @changed
|
50
|
-
v = if self.value.is_a?(Array)
|
51
|
-
"[#{self.value * ', '}]"
|
52
|
-
else
|
53
|
-
%Q["#{self.value}"]
|
54
|
-
end
|
55
|
-
"#{' ' * self.indent_level}#{self.key}: #{v} #g" # g is for 'generated'!
|
56
|
-
else
|
57
|
-
@text
|
58
|
-
end
|
59
|
-
end
|
60
|
-
alias :to_s :text
|
61
|
-
|
62
|
-
def changed?
|
63
|
-
@changed
|
64
|
-
end
|
65
|
-
|
66
|
-
def is_blank_or_comment?
|
67
|
-
@text.sub(/#.*$/, '').gsub(/\s/, '').empty?
|
68
|
-
end
|
69
|
-
|
70
|
-
def path
|
71
|
-
@path ||= "#{self.parent.path}/#{self.key}"
|
72
|
-
end
|
73
|
-
|
74
|
-
def descendant_nodes(&block)
|
75
|
-
yield self if self.value
|
76
|
-
self.children.each {|child| child.descendant_nodes(&block)} if self.children
|
77
|
-
end
|
78
|
-
|
79
|
-
def <=>(other)
|
80
|
-
self.line <=> other.line
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
class YamlDocument < Node
|
85
|
-
attr_accessor :lines
|
86
|
-
alias :nodes :lines
|
87
|
-
|
88
|
-
def initialize(yml_path, locale_name)
|
89
|
-
@locale_name, @lines, @current_line, @indent_level = locale_name, Nodes.new(self), -1, -2
|
90
|
-
if File.exists? yml_path
|
91
|
-
File.open(yml_path) do |file|
|
92
|
-
file.each_with_index do |line_text, i|
|
93
|
-
n = Node.new(self, i, line_text.chomp)
|
94
|
-
@lines << ((((n.key == 'en-US') || (n.key == 'en')) && n.value.blank?) ? Node.new(self, i, "#{locale_name}:") : n)
|
95
|
-
end
|
96
|
-
@lines.delete_at(-1) if @lines[-1].text.blank?
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def next
|
102
|
-
return false if @lines.size == 0
|
103
|
-
@current_line += 1
|
104
|
-
return false if @current_line >= @lines.size
|
105
|
-
@lines[@current_line].is_blank_or_comment? ? self.next : @lines[@current_line]
|
106
|
-
end
|
107
|
-
|
108
|
-
def prev
|
109
|
-
return false if @current_line == 0
|
110
|
-
@current_line -= 1
|
111
|
-
@lines[@current_line].is_blank_or_comment? ? self.prev : @lines[@current_line]
|
112
|
-
end
|
113
|
-
|
114
|
-
def parent_of(child)
|
115
|
-
@current_line = child.line
|
116
|
-
while n = self.prev
|
117
|
-
return n if n.indent_level == child.indent_level - 2
|
118
|
-
end
|
119
|
-
self
|
120
|
-
end
|
121
|
-
|
122
|
-
def children_of(parent)
|
123
|
-
nodes = Nodes.new(parent)
|
124
|
-
@current_line = parent.line
|
125
|
-
while n = self.next
|
126
|
-
if n.indent_level < parent.indent_level + 2
|
127
|
-
break
|
128
|
-
elsif n.indent_level == parent.indent_level + 2
|
129
|
-
nodes << n
|
130
|
-
end
|
131
|
-
end
|
132
|
-
nodes
|
133
|
-
end
|
134
|
-
|
135
|
-
def document
|
136
|
-
self
|
137
|
-
end
|
138
|
-
|
139
|
-
def path
|
140
|
-
''
|
141
|
-
end
|
142
|
-
|
143
|
-
def line
|
144
|
-
@current_line
|
145
|
-
end
|
146
|
-
|
147
|
-
def to_s(add_blank_line = false)
|
148
|
-
previous_indent_level = 0
|
149
|
-
@lines.inject('') do |ret, n|
|
150
|
-
ret << "\n" if add_blank_line && (n.indent_level < previous_indent_level) && !n.text.blank? && !ret.ends_with?("\n\n")
|
151
|
-
previous_indent_level = n.indent_level
|
152
|
-
ret << (n.text ? n.text.rstrip : '') + "\n"
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
class Nodes < Array
|
158
|
-
def initialize(parent)
|
159
|
-
super()
|
160
|
-
@parent = parent
|
161
|
-
end
|
162
|
-
|
163
|
-
def [](index)
|
164
|
-
if index.is_a?(String) || index.is_a?(Symbol)
|
165
|
-
return self.detect {|node| node.key == index} || add(index)
|
166
|
-
end
|
167
|
-
super
|
168
|
-
end
|
169
|
-
|
170
|
-
def last_leaf
|
171
|
-
c = @parent
|
172
|
-
loop do
|
173
|
-
return c if c.children.blank?
|
174
|
-
c = c.children.last
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def add(node_name)
|
179
|
-
target_line = self.last_leaf.line + 1
|
180
|
-
@parent.document.nodes.each {|n| n.line += 1 if n.line >= target_line}
|
181
|
-
node = Node.new(@parent, target_line, node_name)
|
182
|
-
@parent.document.lines << node
|
183
|
-
@parent.document.lines.sort!
|
184
|
-
self << node unless @parent.is_a? YamlDocument
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|