Class: Middleman::CoreExtensions::Internationalization::Localizer
- Inherits:
-
Object
- Object
- Middleman::CoreExtensions::Internationalization::Localizer
- Defined in:
- lib/middleman-more/core_extensions/i18n.rb
Overview
Central class for managing i18n extension
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
Instance Method Summary collapse
- #get_localization_data(path) ⇒ Object
-
#initialize(app, locales_glob, options = {}) ⇒ Localizer
constructor
A new instance of Localizer.
- #langs ⇒ Object
-
#manipulate_resource_list(resources) ⇒ void
Update the main sitemap resource list.
- #on_file_changed(file) ⇒ Object
Constructor Details
#initialize(app, locales_glob, options = {}) ⇒ Localizer
Returns a new instance of Localizer.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 32 def initialize(app, locales_glob, ={}) @app = app @locales_glob = locales_glob @maps = {} @options = @lang_map = @options[:lang_map] || {} @path = @options[:path] || "/:locale/" @templates_dir = @options[:templates_dir] || "localizable" @mount_at_root = @options.has_key?(:mount_at_root) ? @options[:mount_at_root] : langs.first if !@app.build? logger.info "== Locales: #{langs.join(", ")}" end # Don't output localizable files @app.ignore File.join(@templates_dir, "**") @app.sitemap. do |url| if d = get_localization_data(url) lang, page_id = d instance_vars = Proc.new { ::I18n.locale = lang @lang = lang @page_id = page_id } { :blocks => [instance_vars] } else {} end end @app.sitemap.register_resource_list_manipulator( :i18n, self ) @app.files.changed(&method(:on_file_changed)) @app.files.deleted(&method(:on_file_changed)) end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
29 30 31 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 29 def app @app end |
Instance Method Details
#get_localization_data(path) ⇒ Object
87 88 89 90 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 87 def get_localization_data(path) @_localization_data ||= {} @_localization_data[path] end |
#langs ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 79 def langs @options[:langs] || begin Dir[File.join(@app.root, @locales_glob)].map { |file| File.basename(file).gsub(".yml", "") }.sort.map(&:to_sym) end end |
#manipulate_resource_list(resources) ⇒ void
This method returns an undefined value.
Update the main sitemap resource list
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 94 def manipulate_resource_list(resources) @_localization_data = {} new_resources = [] resources.each do |resource| next unless File.fnmatch(File.join(@templates_dir, "**"), resource.path) page_id = File.basename(resource.path, File.extname(resource.path)) langs.map do |lang| ::I18n.locale = lang localized_page_id = ::I18n.t("paths.#{page_id}", :default => page_id) path = resource.path.sub(@templates_dir, "") # Build lang path if @mount_at_root == lang prefix = "/" else replacement = @lang_map.has_key?(lang) ? @lang_map[lang] : lang prefix = @path.sub(":locale", replacement.to_s) end path = ::Middleman::Util.normalize_path( File.join(prefix, path.sub(page_id, localized_page_id)) ) @_localization_data[path] = [lang, path, localized_page_id] p = ::Middleman::Sitemap::Resource.new( @app.sitemap, path ) p.proxy_to(resource.path) new_resources << p end end resources + new_resources end |
#on_file_changed(file) ⇒ Object
73 74 75 76 77 |
# File 'lib/middleman-more/core_extensions/i18n.rb', line 73 def on_file_changed(file) if File.fnmatch(@locales_glob, file) ::I18n.reload! end end |