From 7020bdce1a0db4152e19b7284c9e0e3fe1df7555 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sat, 9 Feb 2013 12:44:37 -0800 Subject: [PATCH 1/3] Failing test for #584 "i18n fails when default locale is not english" --- middleman-more/features/i18n_preview.feature | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/middleman-more/features/i18n_preview.feature b/middleman-more/features/i18n_preview.feature index 81360e23..bfc591ef 100644 --- a/middleman-more/features/i18n_preview.feature +++ b/middleman-more/features/i18n_preview.feature @@ -103,6 +103,51 @@ Feature: i18n Preview Then I should see "Como Esta?" When I go to "/spanish/hola.html" Then I should see "Hola World" + + Scenario: Running localize with a non-English mount config + Given a fixture app "i18n-test-app" + And a file named "config.rb" with: + """ + activate :i18n, :mount_at_root => :es + """ + Given the Server is running at "i18n-test-app" + When I go to "/en/index.html" + Then I should see "Howdy" + When I go to "/en/hello.html" + Then I should see "Hello World" + When I go to "/" + Then I should see "Como Esta?" + When I go to "/hola.html" + Then I should see "Hola World" + When I go to "/hello.html" + Then I should see "File Not Found" + When I go to "/es/index.html" + Then I should see "File Not Found" + When I go to "/es/hola.html" + Then I should see "File Not Found" + + Scenario: Running localize with a non-English lang subset + Given a fixture app "i18n-test-app" + And a file named "config.rb" with: + """ + activate :i18n, :langs => :es + """ + Given the Server is running at "i18n-test-app" + When I go to "/en/index.html" + Then I should see "File Not Found" + When I go to "/en/hello.html" + Then I should see "File Not Found" + When I go to "/" + Then I should see "Como Esta?" + When I go to "/hola.html" + Then I should see "Hola World" + When I go to "/hello.html" + Then I should see "File Not Found" + When I go to "/es/index.html" + Then I should see "File Not Found" + When I go to "/es/hola.html" + Then I should see "File Not Found" + Scenario: Running localize with the no mount config Given a fixture app "i18n-test-app" From afc62d5a26cf362751edbdff040288ad203283d7 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sat, 9 Feb 2013 12:34:30 -0800 Subject: [PATCH 2/3] i18n tweaks --- middleman-more/lib/middleman-more/core_extensions/i18n.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/middleman-more/lib/middleman-more/core_extensions/i18n.rb b/middleman-more/lib/middleman-more/core_extensions/i18n.rb index 534f4ad8..4f84b2b8 100644 --- a/middleman-more/lib/middleman-more/core_extensions/i18n.rb +++ b/middleman-more/lib/middleman-more/core_extensions/i18n.rb @@ -43,7 +43,7 @@ module Middleman @mount_at_root = @options.has_key?(:mount_at_root) ? @options[:mount_at_root] : langs.first if !@app.build? - logger.info "== Locales: #{langs.join(", ")}" + logger.info "== Locales: #{langs.join(", ")} (Default #{@mount_at_root})" end # Don't output localizable files @@ -79,7 +79,9 @@ module Middleman end def langs - @options[:langs] || begin + if @options[:langs] + Array(@options[:langs]).map(&:to_sym) + else Dir[File.join(@app.root, @locales_glob)].map { |file| File.basename(file).sub(/\.yml$/, "").sub(/\.rb$/, "") }.sort.map(&:to_sym) From fbc4d7e9c7ded08266bcc192efe5f58ad6c10ba6 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sat, 9 Feb 2013 12:40:43 -0800 Subject: [PATCH 3/3] Handle non-english default languages. Fixes #584 --- .../middleman-more/core_extensions/i18n.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/middleman-more/lib/middleman-more/core_extensions/i18n.rb b/middleman-more/lib/middleman-more/core_extensions/i18n.rb index 4f84b2b8..57eee442 100644 --- a/middleman-more/lib/middleman-more/core_extensions/i18n.rb +++ b/middleman-more/lib/middleman-more/core_extensions/i18n.rb @@ -52,15 +52,20 @@ module Middleman @app.sitemap.provides_metadata_for_path 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 - {} + # Default to the @mount_at_root lang + page_id = nil + lang = @mount_at_root end + + instance_vars = Proc.new do + ::I18n.locale = lang + @lang = lang + @page_id = page_id + end + + locals = { :lang => lang, :page_id => page_id } + { :blocks => [instance_vars], :locals => locals } end @app.sitemap.register_resource_list_manipulator(