Merge pull request #845 from bhollis/i18n
Fix several issues around i18n and resource metadata.
This commit is contained in:
commit
087872d286
|
@ -128,6 +128,9 @@ module Middleman
|
||||||
|
|
||||||
# Store last engine for later (could be inside nested renders)
|
# Store last engine for later (could be inside nested renders)
|
||||||
@current_engine, engine_was = engine, @current_engine
|
@current_engine, engine_was = engine, @current_engine
|
||||||
|
old_locale = ::I18n.locale
|
||||||
|
|
||||||
|
I18n.locale = opts[:lang] if opts[:lang]
|
||||||
|
|
||||||
# Use a dup of self as a context so that instance variables set within
|
# Use a dup of self as a context so that instance variables set within
|
||||||
# the template don't persist for other templates.
|
# the template don't persist for other templates.
|
||||||
|
@ -165,6 +168,7 @@ module Middleman
|
||||||
ensure
|
ensure
|
||||||
# Pop all the saved variables from earlier as we may be returning to a
|
# Pop all the saved variables from earlier as we may be returning to a
|
||||||
# previous render (layouts, partials, nested layouts).
|
# previous render (layouts, partials, nested layouts).
|
||||||
|
::I18n.locale = old_locale
|
||||||
@current_engine = engine_was
|
@current_engine = engine_was
|
||||||
@content_blocks = nil
|
@content_blocks = nil
|
||||||
@current_locs = nil
|
@current_locs = nil
|
||||||
|
|
|
@ -76,6 +76,7 @@ module Middleman
|
||||||
# Merge in new metadata specific to this resource.
|
# Merge in new metadata specific to this resource.
|
||||||
# @param [Hash] metadata A metadata block like provides_metadata_for_path takes
|
# @param [Hash] metadata A metadata block like provides_metadata_for_path takes
|
||||||
def add_metadata(metadata={}, &block)
|
def add_metadata(metadata={}, &block)
|
||||||
|
metadata = metadata.dup
|
||||||
if metadata.has_key?(:blocks)
|
if metadata.has_key?(:blocks)
|
||||||
@local_metadata[:blocks] << metadata.delete(:blocks)
|
@local_metadata[:blocks] << metadata.delete(:blocks)
|
||||||
end
|
end
|
||||||
|
|
|
@ -113,7 +113,7 @@ module Middleman
|
||||||
provides_metadata.inject(blank_metadata) do |result, (callback, matcher)|
|
provides_metadata.inject(blank_metadata) do |result, (callback, matcher)|
|
||||||
next result if matcher && !source_file.match(matcher)
|
next result if matcher && !source_file.match(matcher)
|
||||||
|
|
||||||
metadata = callback.call(source_file)
|
metadata = callback.call(source_file).dup
|
||||||
|
|
||||||
if metadata.has_key?(:blocks)
|
if metadata.has_key?(:blocks)
|
||||||
result[:blocks] << metadata[:blocks]
|
result[:blocks] << metadata[:blocks]
|
||||||
|
@ -152,7 +152,7 @@ module Middleman
|
||||||
next result unless File.fnmatch("/" + Util.strip_leading_slash(matcher), "/#{request_path}")
|
next result unless File.fnmatch("/" + Util.strip_leading_slash(matcher), "/#{request_path}")
|
||||||
end
|
end
|
||||||
|
|
||||||
metadata = callback.call(request_path)
|
metadata = callback.call(request_path).dup
|
||||||
|
|
||||||
result[:blocks] += Array(metadata.delete(:blocks))
|
result[:blocks] += Array(metadata.delete(:blocks))
|
||||||
|
|
||||||
|
|
13
middleman-more/features/i18n_force_locale.feature
Normal file
13
middleman-more/features/i18n_force_locale.feature
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Feature: i18n manually setting locale
|
||||||
|
|
||||||
|
Scenario: Setting I18n.locale in a block (see issue #809) or with the :lang option
|
||||||
|
Given the Server is running at "i18n-force-locale"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "Hello"
|
||||||
|
Then I should see "I18n.locale: en"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "Hola"
|
||||||
|
Then I should see "I18n.locale: es"
|
||||||
|
When I go to "/fr/index.html"
|
||||||
|
Then I should see "Bonjour"
|
||||||
|
Then I should see "I18n.locale: fr"
|
13
middleman-more/fixtures/i18n-force-locale/config.rb
Normal file
13
middleman-more/fixtures/i18n-force-locale/config.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[:en, :es].each do |locale|
|
||||||
|
proxy "/#{locale}/index.html", "index.html", :ignore => true do
|
||||||
|
::I18n.locale = locale
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
proxy "/fr/index.html", "index.html", :lang => :fr
|
||||||
|
|
||||||
|
activate :i18n
|
||||||
|
|
||||||
|
# This is what breaks i18n, just because it adds a resource list manipulator that
|
||||||
|
# forces a rebuild of the resource list.
|
||||||
|
activate :asset_hash
|
3
middleman-more/fixtures/i18n-force-locale/locales/en.yml
Normal file
3
middleman-more/fixtures/i18n-force-locale/locales/en.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
hello: "Hello"
|
3
middleman-more/fixtures/i18n-force-locale/locales/es.yml
Normal file
3
middleman-more/fixtures/i18n-force-locale/locales/es.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
es:
|
||||||
|
hello: "Hola"
|
3
middleman-more/fixtures/i18n-force-locale/locales/fr.yml
Normal file
3
middleman-more/fixtures/i18n-force-locale/locales/fr.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
fr:
|
||||||
|
hello: "Bonjour"
|
|
@ -0,0 +1,2 @@
|
||||||
|
Greeting: #{I18n.t 'hello'}
|
||||||
|
I18n.locale: #{I18n.locale}
|
|
@ -60,13 +60,15 @@ module Middleman
|
||||||
end
|
end
|
||||||
|
|
||||||
instance_vars = Proc.new do
|
instance_vars = Proc.new do
|
||||||
::I18n.locale = lang
|
|
||||||
@lang = lang
|
@lang = lang
|
||||||
@page_id = page_id
|
@page_id = page_id
|
||||||
end
|
end
|
||||||
|
|
||||||
locals = { :lang => lang, :page_id => page_id }
|
locals = { :lang => lang,
|
||||||
{ :blocks => [instance_vars], :locals => locals }
|
:page_id => page_id }
|
||||||
|
{ :blocks => [instance_vars],
|
||||||
|
:locals => locals,
|
||||||
|
:options => { :lang => lang } }
|
||||||
end
|
end
|
||||||
|
|
||||||
@app.sitemap.register_resource_list_manipulator(
|
@app.sitemap.register_resource_list_manipulator(
|
||||||
|
@ -111,6 +113,7 @@ module Middleman
|
||||||
|
|
||||||
page_id = File.basename(resource.path, File.extname(resource.path))
|
page_id = File.basename(resource.path, File.extname(resource.path))
|
||||||
|
|
||||||
|
old_locale = ::I18n.locale
|
||||||
langs.map do |lang|
|
langs.map do |lang|
|
||||||
::I18n.locale = lang
|
::I18n.locale = lang
|
||||||
|
|
||||||
|
@ -139,6 +142,8 @@ module Middleman
|
||||||
|
|
||||||
new_resources << p
|
new_resources << p
|
||||||
end
|
end
|
||||||
|
::I18n.locale = old_locale
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resources + new_resources
|
resources + new_resources
|
||||||
|
|
Loading…
Reference in a new issue