Module: Ember::I18n

Extended by:
I18n
Included in:
I18n
Defined in:
lib/ember-i18n-rails.rb,
lib/ember/i18n/engine.rb,
lib/ember/i18n/railtie.rb,
lib/ember/i18n/version.rb

Defined Under Namespace

Modules: Version Classes: Engine, Railtie

Instance Method Summary collapse

Instance Method Details

#assert_usable_configuration!Object

Under rails 3.1.1 and higher, perform a check to ensure that the full environment will be available during asset compilation. This is required to ensure I18n is loaded.



13
14
15
16
17
# File 'lib/ember-i18n-rails.rb', line 13

def assert_usable_configuration!
  @usable_configuration ||= Rails.version >= "3.1.1" &&
    Rails.configuration.assets.initialize_on_precompile ||
    raise("Cannot precompile ember-i18n translations unless environment is initialized. Please set config.assets.initialize_on_precompile to true.")
end

#configObject

Load configuration file for partial exporting and custom output directory



67
68
69
70
71
72
73
# File 'lib/ember-i18n-rails.rb', line 67

def config
  if config?
    (YAML.load_file(config_file) || {}).with_indifferent_access
  else
    {}
  end
end

#config?Boolean

Check if configuration file exist

Returns:

  • (Boolean)


76
77
78
# File 'lib/ember-i18n-rails.rb', line 76

def config?
  File.file? config_file
end

#config_fileObject



23
24
25
# File 'lib/ember-i18n-rails.rb', line 23

def config_file
  Rails.root.join("config/ember-i18n.yml")
end

#default_locales_pathObject



117
118
119
# File 'lib/ember-i18n-rails.rb', line 117

def default_locales_path
  Dir[Rails.root.join('config', 'locales', '*.yml').to_s]
end

#export!Object

Export translations to JavaScript, considering settings from configuration file



41
42
43
44
45
46
47
48
49
# File 'lib/ember-i18n-rails.rb', line 41

def export!
  if config[:split]
    translations.keys.each do |locale|
      save(flat_hash(translations[locale]), File.join(export_dir, "translations_#{locale}.js"))
    end
  else
    save(flat_hash(translations), File.join(export_dir, "translations.js"))
  end
end

#export_dirObject



27
28
29
30
31
32
33
# File 'lib/ember-i18n-rails.rb', line 27

def export_dir
  if has_asset_pipeline?
    "app/assets/javascripts/i18n"
  else
    "public/javascripts"
  end
end

#flat_hash(data, prefix = '', result = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ember-i18n-rails.rb', line 51

def flat_hash(data, prefix = '', result = {})
  data.each do |key, value|
    current_prefix = prefix.present? ? "#{prefix}.#{key}" : key

    if !value.is_a?(Hash)
      result[current_prefix] = value.respond_to?(:stringify_keys) ? value.stringify_keys : value
    else
      flat_hash(value, current_prefix, result)
    end
  end

  result.stringify_keys
end

#has_asset_pipeline?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/ember-i18n-rails.rb', line 19

def has_asset_pipeline?
  Rails.configuration.respond_to?(:assets) && Rails.configuration.assets.enabled
end

#javascript_fileObject



35
36
37
# File 'lib/ember-i18n-rails.rb', line 35

def javascript_file
  Rails.root.join(export_dir, "ember-i18n.js")
end

#save(translations, file) ⇒ Object

Convert translations to JSON string and save file.



97
98
99
100
101
102
103
104
105
106
# File 'lib/ember-i18n-rails.rb', line 97

def save(translations, file)
  file = Rails.root.join(file)
  FileUtils.mkdir_p File.dirname(file)

  File.open(file, "w+") do |f|
    f << 'Em.I18n.translations = '
    f << JSON.pretty_generate(translations).html_safe
    f << ';'
  end
end

#setup!Object

Copy configuration and JavaScript library files to config/ember-i18n.yml and public/javascripts/i18n.js.



82
83
84
85
86
# File 'lib/ember-i18n-rails.rb', line 82

def setup!
  FileUtils.mkdir_p(export_dir)
  FileUtils.cp(File.dirname(__FILE__) + "/../vendor/assets/javascripts/ember-i18n.js", javascript_file)
  FileUtils.cp(File.dirname(__FILE__) + "/../config/ember-i18n.yml", config_file) unless config?
end

#translationsObject

Initialize and return translations



109
110
111
112
113
114
115
# File 'lib/ember-i18n-rails.rb', line 109

def translations
  ::I18n.load_path = default_locales_path
  ::I18n.backend.instance_eval do
    init_translations unless initialized?
    translations
  end
end

#update!Object

Retrieve an updated JavaScript library from Github.



89
90
91
92
93
94
# File 'lib/ember-i18n-rails.rb', line 89

def update!
  FileUtils.mkdir_p(export_dir)
  require "open-uri"
  contents = open("https://raw.github.com/jamesarosen/ember-i18n/master/lib/i18n.js").read
  File.open(javascript_file, "w+") {|f| f << contents}
end