Class: Middleman::CoreExtensions::I18n::Localizer

Inherits:
Object
  • Object
show all
Defined in:
middleman-core/lib/middleman-core/core_extensions/i18n.rb

Instance Method Summary (collapse)

Constructor Details

- (Localizer) initialize(app)

A new instance of Localizer



30
31
32
33
# File 'middleman-core/lib/middleman-core/core_extensions/i18n.rb', line 30

def initialize(app)
  @app = app
  @maps = {}
end

Instance Method Details

- (Object) get_localization_data(path)



78
79
80
81
# File 'middleman-core/lib/middleman-core/core_extensions/i18n.rb', line 78

def get_localization_data(path)
  @_localization_data ||= {}
  @_localization_data[path]
end

- (Object) langs



70
71
72
73
74
75
76
# File 'middleman-core/lib/middleman-core/core_extensions/i18n.rb', line 70

def langs
  @options[:langs] || begin
    Dir[File.join(@app.root, @app.locales_dir, "*.yml")].map { |file| 
      File.basename(file).gsub(".yml", "") 
    }.sort.map(&:to_sym)
  end
end

- (void) manipulate_resource_list(resources)

This method returns an undefined value.

Update the main sitemap resource list



85
86
87
88
89
90
91
92
93
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
# File 'middleman-core/lib/middleman-core/core_extensions/i18n.rb', line 85

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

- (Object) setup(options)



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
# File 'middleman-core/lib/middleman-core/core_extensions/i18n.rb', line 35

def setup(options)
  @options = 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?
    puts "== 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,
    @app.i18n
  )
end