i18n_generators 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/History.txt +104 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +104 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/generators/i18n/USAGE +13 -0
- data/generators/i18n/i18n_generator.rb +85 -0
- data/generators/i18n/lib/yaml.rb +187 -0
- data/generators/i18n/templates/base.yml +0 -0
- data/generators/i18n/templates/i18n_config.rb +5 -0
- data/generators/i18n/templates/translation.yml +1 -0
- data/generators/i18n_locale/USAGE +12 -0
- data/generators/i18n_locale/i18n_locale_command.rb +135 -0
- data/generators/i18n_locale/i18n_locale_generator.rb +9 -0
- data/generators/i18n_locale/lib/cldr.rb +139 -0
- data/generators/i18n_scaffold/i18n_scaffold_generator.rb +3 -0
- data/generators/i18n_scaffold/templates/controller.rb +85 -0
- data/generators/i18n_scaffold/templates/functional_test.rb +45 -0
- data/generators/i18n_scaffold/templates/helper.rb +2 -0
- data/generators/i18n_scaffold/templates/helper_test.rb +4 -0
- data/generators/i18n_scaffold/templates/layout.html.erb +17 -0
- data/generators/i18n_scaffold/templates/style.css +54 -0
- data/generators/i18n_scaffold/templates/view_edit.html.erb +18 -0
- data/generators/i18n_scaffold/templates/view_index.html.erb +24 -0
- data/generators/i18n_scaffold/templates/view_new.html.erb +17 -0
- data/generators/i18n_scaffold/templates/view_show.html.erb +10 -0
- data/generators/i18n_translation/USAGE +9 -0
- data/generators/i18n_translation/i18n_translation_command.rb +121 -0
- data/generators/i18n_translation/i18n_translation_generator.rb +9 -0
- data/generators/i18n_translation/lib/erb_executer.rb +31 -0
- data/generators/i18n_translation/lib/recording_backend.rb +16 -0
- data/generators/i18n_translation/lib/through_ryoku.rb +8 -0
- data/generators/i18n_translation/lib/translator.rb +28 -0
- data/i18n_generators.gemspec +87 -0
- data/spec/cldr_spec.rb +54 -0
- data/spec/data/cldr/ja.html +3112 -0
- data/spec/data/yml/active_record/en-US.yml +54 -0
- data/spec/i18n_locale_command_spec.rb +63 -0
- data/spec/i18n_translation_command_spec.rb +24 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/translator_spec.rb +46 -0
- data/spec/yaml_spec.rb +59 -0
- metadata +114 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
7
|
+
<title><%= controller_class_name %>: <%%= controller.action_name %></title>
|
8
|
+
<%%= stylesheet_link_tag 'scaffold' %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
|
12
|
+
<p style="color: green"><%%= flash[:notice] %></p>
|
13
|
+
|
14
|
+
<%%= yield %>
|
15
|
+
|
16
|
+
</body>
|
17
|
+
</html>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
.fieldWithErrors {
|
20
|
+
padding: 2px;
|
21
|
+
background-color: red;
|
22
|
+
display: table;
|
23
|
+
}
|
24
|
+
|
25
|
+
#errorExplanation {
|
26
|
+
width: 400px;
|
27
|
+
border: 2px solid red;
|
28
|
+
padding: 7px;
|
29
|
+
padding-bottom: 12px;
|
30
|
+
margin-bottom: 20px;
|
31
|
+
background-color: #f0f0f0;
|
32
|
+
}
|
33
|
+
|
34
|
+
#errorExplanation h2 {
|
35
|
+
text-align: left;
|
36
|
+
font-weight: bold;
|
37
|
+
padding: 5px 5px 5px 15px;
|
38
|
+
font-size: 12px;
|
39
|
+
margin: -7px;
|
40
|
+
background-color: #c00;
|
41
|
+
color: #fff;
|
42
|
+
}
|
43
|
+
|
44
|
+
#errorExplanation p {
|
45
|
+
color: #333;
|
46
|
+
margin-bottom: 0;
|
47
|
+
padding: 5px;
|
48
|
+
}
|
49
|
+
|
50
|
+
#errorExplanation ul li {
|
51
|
+
font-size: 12px;
|
52
|
+
list-style: square;
|
53
|
+
}
|
54
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1><%% translate(:editing, :default => "Editing {{model}}", :model => <%= class_name %>.human_name, :scope => [:railties, :scaffold]) %></h1>
|
2
|
+
|
3
|
+
<%% form_for(@<%= singular_name %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
|
6
|
+
<% for attribute in attributes -%>
|
7
|
+
<p>
|
8
|
+
<%%= f.label :<%= attribute.name %> %><br />
|
9
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
10
|
+
</p>
|
11
|
+
<% end -%>
|
12
|
+
<p>
|
13
|
+
<%%= f.submit translate(:update, :default => "Update", :scope => [:railties, :scaffold]) %>
|
14
|
+
</p>
|
15
|
+
<%% end %>
|
16
|
+
|
17
|
+
<%%= link_to translate(:show, :default => 'Show', :scope => [:railties, :scaffold]), @<%= singular_name %> %> |
|
18
|
+
<%%= link_to translate(:back, :default => 'Back', :scope => [:railties, :scaffold]), <%= plural_name %>_path %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1><%%= translate(:listing, :default => "Listing {{model}}", :model => <%= class_name %>.human_name(:count => @<%= plural_name %>.size), :count => @<%= plural_name %>.size, :scope => [:railties, :scaffold]) %></h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<% for attribute in attributes -%>
|
6
|
+
<th><%%= <%= class_name %>.human_attribute_name('<%= attribute.column.name %>') %></th>
|
7
|
+
<% end -%>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<%% for <%= singular_name %> in @<%= plural_name %> %>
|
11
|
+
<tr>
|
12
|
+
<% for attribute in attributes -%>
|
13
|
+
<td><%%=h <%= singular_name %>.<%= attribute.name %> %></td>
|
14
|
+
<% end -%>
|
15
|
+
<td><%%= link_to translate(:show, :default => 'Show', :scope => [:railties, :scaffold]), <%= singular_name %> %></td>
|
16
|
+
<td><%%= link_to translate(:edit, :default => 'Edit', :scope => [:railties, :scaffold]), edit_<%= singular_name %>_path(<%= singular_name %>) %></td>
|
17
|
+
<td><%%= link_to translate(:destroy, :default => 'Destroy', :scope => [:railties, :scaffold]), <%= singular_name %>, :confirm => translate(:confirmation, :default => 'Are you sure?', :scope => [:railties, :scaffold]), :method => :delete %></td>
|
18
|
+
</tr>
|
19
|
+
<%% end %>
|
20
|
+
</table>
|
21
|
+
|
22
|
+
<br />
|
23
|
+
|
24
|
+
<%%= link_to translate(:new, :default => "New {{model}}", :model => <%= class_name %>.human_name, :scope => [:railties, :scaffold]), new_<%= singular_name %>_path %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<h1><%%= translate(:new, :default => "New {{model}}", :model => <%= class_name %>.human_name, :scope => [:railties, :scaffold]) %></h1>
|
2
|
+
|
3
|
+
<%% form_for(@<%= singular_name %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
|
6
|
+
<% for attribute in attributes -%>
|
7
|
+
<p>
|
8
|
+
<%%= f.label :<%= attribute.name %> %><br />
|
9
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
10
|
+
</p>
|
11
|
+
<% end -%>
|
12
|
+
<p>
|
13
|
+
<%%= f.submit translate(:create, :default => "Create", :scope => [:railties, :scaffold]) %>
|
14
|
+
</p>
|
15
|
+
<%% end %>
|
16
|
+
|
17
|
+
<%%= link_to translate(:back, :default => 'Back', :scope => [:railties, :scaffold]), <%= plural_name %>_path %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% for attribute in attributes -%>
|
2
|
+
<p>
|
3
|
+
<b><%%= <%= class_name %>.human_attribute_name('<%= attribute.column.name %>') %>:</b>
|
4
|
+
<%%=h @<%= singular_name %>.<%= attribute.name %> %>
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
<%%= link_to translate(:edit, :default => 'Edit', :scope => [:railties, :scaffold]), edit_<%= singular_name %>_path(@<%= singular_name %>) %> |
|
10
|
+
<%%= link_to translate(:back, :default => 'Back', :scope => [:railties, :scaffold]), <%= plural_name %>_path %>
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'rails_generator'
|
2
|
+
require 'rails_generator/commands'
|
3
|
+
require File.join(File.dirname(__FILE__), 'lib/translator')
|
4
|
+
require File.join(File.dirname(__FILE__), 'lib/recording_backend')
|
5
|
+
require File.join(File.dirname(__FILE__), 'lib/erb_executer')
|
6
|
+
require File.join(File.dirname(__FILE__), '../i18n/lib/yaml')
|
7
|
+
include I18nTranslationGeneratorModule
|
8
|
+
|
9
|
+
module I18nGenerator::Generator
|
10
|
+
module Commands #:nodoc:
|
11
|
+
module Create
|
12
|
+
def translation_yaml
|
13
|
+
I18n.locale = locale_name
|
14
|
+
models = model_filenames.map do |model_name|
|
15
|
+
model = begin
|
16
|
+
m = begin
|
17
|
+
model_name.camelize.constantize
|
18
|
+
rescue LoadError
|
19
|
+
end
|
20
|
+
next if m.nil? || !m.table_exists? || !m.respond_to?(:content_columns)
|
21
|
+
m.class_eval %Q[def self.english_name; "#{model_name}"; end]
|
22
|
+
m
|
23
|
+
rescue
|
24
|
+
next
|
25
|
+
end
|
26
|
+
end.compact
|
27
|
+
translation_keys = []
|
28
|
+
translation_keys += models.map {|m| "activerecord.models.#{m.english_name}"}
|
29
|
+
models.each do |model|
|
30
|
+
cols = model.content_columns + model.reflect_on_all_associations
|
31
|
+
cols.delete_if {|c| %w[created_at updated_at].include? c.name} unless self.include_timestamps
|
32
|
+
translation_keys += cols.map {|c| "activerecord.attributes.#{model.english_name}.#{c.name}"}
|
33
|
+
end
|
34
|
+
logger.debug "#{models.size} models found."
|
35
|
+
|
36
|
+
# pick all translated keywords from view files
|
37
|
+
original_backend = I18n.backend.dup
|
38
|
+
I18n.backend = RecordingBackend.new
|
39
|
+
|
40
|
+
Dir["#{RAILS_ROOT}/app/views/**/*.erb"].each do |f|
|
41
|
+
ErbExecuter.new.exec_erb f
|
42
|
+
end
|
43
|
+
logger.debug "#{I18n.backend.keys.size} translation keys found in views."
|
44
|
+
(translation_keys += I18n.backend.keys).uniq!
|
45
|
+
I18n.backend = original_backend
|
46
|
+
|
47
|
+
if translation_keys.blank?
|
48
|
+
logger.info "No translation keys found. Skipped generating translation_#{locale_name}.yml file."
|
49
|
+
else
|
50
|
+
# translate all keys and generate the YAML file
|
51
|
+
now = Time.now
|
52
|
+
translations = translate_all(translation_keys)
|
53
|
+
logger.debug "took #{Time.now - now} secs to translate."
|
54
|
+
|
55
|
+
yaml = generate_yaml(locale_name, translations).to_s(true)
|
56
|
+
template 'i18n:translation.yml', "config/locales/translation_#{locale_name}.yml", :assigns => {:locale_name => locale_name, :translations => yaml}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def model_filenames
|
62
|
+
Dir.chdir("#{RAILS_ROOT}/app/models/") do
|
63
|
+
Dir["**/*.rb"].map {|m| m.sub(/\.rb$/, '')}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# mixin translations into existing yaml file
|
68
|
+
def generate_yaml(locale_name, translations)
|
69
|
+
yaml = YamlDocument.new("config/locales/translation_#{locale_name}.yml", locale_name)
|
70
|
+
each_value [], translations do |parents, value|
|
71
|
+
node = parents.inject(yaml[locale_name]) {|node, parent| node[parent]}
|
72
|
+
node.value = value
|
73
|
+
end
|
74
|
+
yaml
|
75
|
+
end
|
76
|
+
|
77
|
+
# receives an array of keys and returns :key => :translation hash
|
78
|
+
def translate_all(keys)
|
79
|
+
returning ActiveSupport::OrderedHash.new do |oh|
|
80
|
+
# fix the order first(for multi thread translating)
|
81
|
+
keys.each do |key|
|
82
|
+
if key.to_s.include? '.'
|
83
|
+
key_prefix, key_suffix = key.to_s.split('.')[0...-1], key.to_s.split('.')[-1]
|
84
|
+
key_prefix.inject(oh) {|h, k| h[k] ||= ActiveSupport::OrderedHash.new}[key_suffix] = nil
|
85
|
+
else
|
86
|
+
oh[key] = nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
threads = []
|
90
|
+
keys.each do |key|
|
91
|
+
threads << Thread.new do
|
92
|
+
logger.debug "translating #{key} ..."
|
93
|
+
Thread.pass
|
94
|
+
if key.to_s.include? '.'
|
95
|
+
key_prefix, key_suffix = key.to_s.split('.')[0...-1], key.to_s.split('.')[-1]
|
96
|
+
existing_translation = I18n.t(key, :default => key_suffix, :locale => locale_name)
|
97
|
+
key_prefix.inject(oh) {|h, k| h[k]}[key_suffix] = existing_translation != key_suffix ? existing_translation : translator.translate(key_suffix)
|
98
|
+
else
|
99
|
+
existing_translation = I18n.t(key, :default => key, :locale => locale_name)
|
100
|
+
oh[key] = existing_translation != key ? existing_translation : translator.translate(key)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
threads.each {|t| t.join}
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# iterate through all values
|
109
|
+
def each_value(parents, src, &block)
|
110
|
+
src.each do |k, v|
|
111
|
+
if v.is_a?(ActiveSupport::OrderedHash)
|
112
|
+
each_value parents + [k], v, &block
|
113
|
+
else
|
114
|
+
yield parents + [k], v
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/through_ryoku"
|
2
|
+
|
3
|
+
module I18nTranslationGeneratorModule
|
4
|
+
class ErbExecuter
|
5
|
+
def exec_erb(filename)
|
6
|
+
begin
|
7
|
+
# ERB.new(File.read(f)).result
|
8
|
+
(m = Module.new).module_eval <<-EOS
|
9
|
+
class Executer
|
10
|
+
extend ERB::DefMethod
|
11
|
+
include ActionView::Helpers::TranslationHelper
|
12
|
+
include I18nTranslationGeneratorModule::ThroughRyoku
|
13
|
+
|
14
|
+
fname = '#{filename}'
|
15
|
+
erb = nil
|
16
|
+
File.open(fname) {|f| erb = ERB.new(f.read, nil, '-') }
|
17
|
+
erb.def_method(self, 'execute', fname)
|
18
|
+
end
|
19
|
+
EOS
|
20
|
+
nil.class_eval {def method_missing(method, *args, &block); nil; end}
|
21
|
+
m.const_get('Executer').new.execute { }
|
22
|
+
rescue => e
|
23
|
+
p e
|
24
|
+
# do nothing
|
25
|
+
ensure
|
26
|
+
nil.class_eval {undef :method_missing} if nil.respond_to? :method_missing
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module I18nTranslationGeneratorModule
|
2
|
+
class RecordingBackend
|
3
|
+
attr_reader :keys
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@keys = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def translate(locale, key, options = {})
|
10
|
+
# @keys << key.to_sym
|
11
|
+
@keys << (Array(options[:scope]) + [key]).flatten.join('.')
|
12
|
+
end
|
13
|
+
alias :t :translate
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json' if RUBY_VERSION >= '1.9'
|
3
|
+
|
4
|
+
module I18nTranslationGeneratorModule
|
5
|
+
class Translator
|
6
|
+
def initialize(lang)
|
7
|
+
@lang, @cache = lang, {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def translate(word)
|
11
|
+
return @cache[word] if @cache[word]
|
12
|
+
begin
|
13
|
+
w = CGI.escape ActiveSupport::Inflector.humanize(word)
|
14
|
+
json = OpenURI.open_uri("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{w}&langpair=en%7C#{@lang}").read
|
15
|
+
result = if RUBY_VERSION >= '1.9'
|
16
|
+
::JSON.parse json
|
17
|
+
else
|
18
|
+
ActiveSupport::JSON.decode(json)
|
19
|
+
end
|
20
|
+
result['responseStatus'] == 200 ? (@cache[word] = result['responseData']['translatedText']) : word
|
21
|
+
rescue => e
|
22
|
+
puts %Q[failed to translate "#{word}" into "#{@lang}" language.]
|
23
|
+
word
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{i18n_generators}
|
8
|
+
s.version = "0.8.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Akira Matsuda"]
|
12
|
+
s.date = %q{2010-08-26}
|
13
|
+
s.description = %q{A Rails generator plugin & gem that generates Rails 2.2 and 2.3 I18n locale files for almost every known locale.}
|
14
|
+
s.email = %q{ronnie@dio.jp}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"History.txt",
|
21
|
+
"MIT-LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"generators/i18n/USAGE",
|
26
|
+
"generators/i18n/i18n_generator.rb",
|
27
|
+
"generators/i18n/lib/yaml.rb",
|
28
|
+
"generators/i18n/templates/base.yml",
|
29
|
+
"generators/i18n/templates/i18n_config.rb",
|
30
|
+
"generators/i18n/templates/translation.yml",
|
31
|
+
"generators/i18n_locale/USAGE",
|
32
|
+
"generators/i18n_locale/i18n_locale_command.rb",
|
33
|
+
"generators/i18n_locale/i18n_locale_generator.rb",
|
34
|
+
"generators/i18n_locale/lib/cldr.rb",
|
35
|
+
"generators/i18n_scaffold/i18n_scaffold_generator.rb",
|
36
|
+
"generators/i18n_scaffold/templates/controller.rb",
|
37
|
+
"generators/i18n_scaffold/templates/functional_test.rb",
|
38
|
+
"generators/i18n_scaffold/templates/helper.rb",
|
39
|
+
"generators/i18n_scaffold/templates/helper_test.rb",
|
40
|
+
"generators/i18n_scaffold/templates/layout.html.erb",
|
41
|
+
"generators/i18n_scaffold/templates/style.css",
|
42
|
+
"generators/i18n_scaffold/templates/view_edit.html.erb",
|
43
|
+
"generators/i18n_scaffold/templates/view_index.html.erb",
|
44
|
+
"generators/i18n_scaffold/templates/view_new.html.erb",
|
45
|
+
"generators/i18n_scaffold/templates/view_show.html.erb",
|
46
|
+
"generators/i18n_translation/USAGE",
|
47
|
+
"generators/i18n_translation/i18n_translation_command.rb",
|
48
|
+
"generators/i18n_translation/i18n_translation_generator.rb",
|
49
|
+
"generators/i18n_translation/lib/erb_executer.rb",
|
50
|
+
"generators/i18n_translation/lib/recording_backend.rb",
|
51
|
+
"generators/i18n_translation/lib/through_ryoku.rb",
|
52
|
+
"generators/i18n_translation/lib/translator.rb",
|
53
|
+
"i18n_generators.gemspec",
|
54
|
+
"spec/cldr_spec.rb",
|
55
|
+
"spec/data/cldr/ja.html",
|
56
|
+
"spec/data/yml/active_record/en-US.yml",
|
57
|
+
"spec/i18n_locale_command_spec.rb",
|
58
|
+
"spec/i18n_translation_command_spec.rb",
|
59
|
+
"spec/spec_helper.rb",
|
60
|
+
"spec/translator_spec.rb",
|
61
|
+
"spec/yaml_spec.rb"
|
62
|
+
]
|
63
|
+
s.homepage = %q{http://github.com/amatsuda/i18n_generators/}
|
64
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
65
|
+
s.require_paths = ["lib"]
|
66
|
+
s.rubygems_version = %q{1.3.7}
|
67
|
+
s.summary = %q{Generates I18n locale files for Rails 2.2 and 2.3}
|
68
|
+
s.test_files = [
|
69
|
+
"spec/cldr_spec.rb",
|
70
|
+
"spec/i18n_locale_command_spec.rb",
|
71
|
+
"spec/i18n_translation_command_spec.rb",
|
72
|
+
"spec/spec_helper.rb",
|
73
|
+
"spec/translator_spec.rb",
|
74
|
+
"spec/yaml_spec.rb"
|
75
|
+
]
|
76
|
+
|
77
|
+
if s.respond_to? :specification_version then
|
78
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
79
|
+
s.specification_version = 3
|
80
|
+
|
81
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
82
|
+
else
|
83
|
+
end
|
84
|
+
else
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|