amatsuda-i18n_generators 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@ require 'rubygems'
4
4
  require 'gettext'
5
5
 
6
6
  class I18nGenerator < Rails::Generator::NamedBase
7
- attr_reader :locale_name, :cldr, :generate_models_only, :generate_locales_only
7
+ attr_reader :locale_name, :cldr, :translator, :generate_models_only, :generate_locales_only
8
8
 
9
9
  def initialize(runtime_args, runtime_options = {})
10
10
  super
@@ -16,7 +16,13 @@ class I18nGenerator < Rails::Generator::NamedBase
16
16
  GetText.bindtextdomain 'rails'
17
17
  GetText.locale = @locale_name
18
18
 
19
- @cldr = CldrDocument.new @locale_name
19
+ unless self.generate_models_only
20
+ @cldr = CldrDocument.new @locale_name
21
+ end
22
+ unless self.generate_locales_only
23
+ lang = @locale_name.sub(/-.*$/, '')
24
+ @translator = Translator.new lang
25
+ end
20
26
  end
21
27
 
22
28
  def manifest
@@ -2,8 +2,8 @@ require File.join(File.dirname(__FILE__), '../i18n/i18n_generator')
2
2
 
3
3
  class I18nLocalesGenerator < I18nGenerator
4
4
  def initialize(runtime_args, runtime_options = {})
5
- super
6
5
  @generate_locales_only = true
6
+ super
7
7
  end
8
8
  end
9
9
 
@@ -7,13 +7,15 @@ module I18nGenerator::Generator
7
7
  module Commands #:nodoc:
8
8
  module Create
9
9
  def models_yaml
10
- models = Dir.chdir("#{RAILS_ROOT}/app/models/") do
11
- Dir["**/*.rb"].map {|m| m.sub(/\.rb$/, '').capitalize.constantize}
12
- end
13
10
  I18n.locale = locale_name
14
- lang = locale_name.sub(/-.*$/, '')
15
- models.each do |model|
16
- model_name = model.class_name.underscore
11
+ models = model_filenames.map do |model_name|
12
+ model = begin
13
+ m = model_name.capitalize.constantize
14
+ next unless m.ancestors.include? ActiveRecord::Base
15
+ m
16
+ rescue
17
+ next
18
+ end
17
19
  registered_t_name = I18n.t("activerecord.models.#{model_name}", :default => model_name)
18
20
 
19
21
  model.class_eval <<-END
@@ -22,7 +24,7 @@ module I18nGenerator::Generator
22
24
  end
23
25
 
24
26
  def self.translated_name
25
- "#{registered_t_name != model_name ? registered_t_name : Translator.translate(model_name, lang)}"
27
+ "#{registered_t_name != model_name ? registered_t_name : self.translator.translate(model_name)}"
26
28
  end
27
29
  END
28
30
  model.content_columns.each do |col|
@@ -30,15 +32,22 @@ END
30
32
  registered_t_name = I18n.t("activerecord.attributes.#{model_name}.#{col.name}", :default => col.name)
31
33
  col.class_eval <<-END
32
34
  def translated_name
33
- "#{registered_t_name != col.name ? registered_t_name : Translator.translate(col.name, lang)}"
35
+ "#{registered_t_name != col.name ? registered_t_name : self.translator.translate(col.name)}"
34
36
  end
35
37
  END
36
38
  end
37
- end
39
+ model
40
+ end.compact
38
41
  generate_yaml(locale_name, models)
39
42
  end
40
43
 
41
44
  private
45
+ def model_filenames
46
+ Dir.chdir("#{RAILS_ROOT}/app/models/") do
47
+ Dir["**/*.rb"].map {|m| m.sub(/\.rb$/, '')}
48
+ end
49
+ end
50
+
42
51
  def generate_yaml(locale_name, models)
43
52
  template 'i18n:models.yml', "lib/locale/models_#{locale_name}.yml", :assigns => {:locale_name => locale_name, :models => models}
44
53
  end
@@ -2,8 +2,8 @@ require File.join(File.dirname(__FILE__), '../i18n/i18n_generator')
2
2
 
3
3
  class I18nModelsGenerator < I18nGenerator
4
4
  def initialize(runtime_args, runtime_options = {})
5
- super
6
5
  @generate_models_only = true
6
+ super
7
7
  end
8
8
  end
9
9
 
@@ -2,17 +2,19 @@ require 'open-uri'
2
2
 
3
3
  module I18nModelsGeneratorModule
4
4
  class Translator
5
- #TODO
6
- def self.translatable?(lang)
5
+ def initialize(lang)
6
+ @lang, @cache = lang, {}
7
7
  end
8
8
 
9
- def self.translate(word, lang)
9
+ def translate(word)
10
+ return @cache[word] if @cache[word]
10
11
  begin
11
- json = OpenURI.open_uri("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{word}&langpair=en%7C#{lang}").read
12
+ w = CGI.escape ActiveSupport::Inflector.humanize(word)
13
+ json = OpenURI.open_uri("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{w}&langpair=en%7C#{@lang}").read
12
14
  result = ActiveSupport::JSON.decode(json)
13
- return result['responseData']['translatedText'] if result['responseStatus'] == 200
14
- rescue e
15
- puts %Q[failed to translate "#{word}" into "#{lang}" language.]
15
+ return @cache[word] = result['responseData']['translatedText'] if result['responseStatus'] == 200
16
+ rescue => e
17
+ puts %Q[failed to translate "#{word}" into "#{@lang}" language.]
16
18
  word
17
19
  end
18
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amatsuda-i18n_generators
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira Matsuda
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-15 00:00:00 -08:00
12
+ date: 2008-11-16 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency