Feature: i18n Paths Scenario: link_to is i18n aware Given a fixture app "empty-app" And a file named "data/pages.yml" with: """ - hello.html """ And a file named "locales/en.yml" with: """ --- en: msg: Hello home: Home """ And a file named "locales/es.yml" with: """ --- es: paths: hello: "hola" msg: Hola home: Casa """ And a file named "source/localizable/index.html.erb" with: """ Page: <%= t(:hom) %> """ And a file named "source/localizable/hello.html.erb" with: """ Page: <%= t(:msg) %> <%= link_to "Current Home", "/index.html", class: 'current' %> <%= link_to "Other Home", "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en %> <% link_to "/index.html", class: 'current' do %>Home: Current Block<% end %> <% link_to "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en do %>Home: Other Block<% end %> <%= link_to "Current Foobar", "/foobar.html", class: 'current' %> <%= link_to "Other Foobar", "/foobar.html", title: "Other Foobar", locale: ::I18n.locale == :en ? :es : :en %> <% data.pages.each_with_index do |p, i| %> <%= link_to "Current #{p}", "/#{p}", class: 'current' %> <%= link_to "Other #{p}", "/#{p}", title: "Other #{p}", locale: ::I18n.locale == :en ? :es : :en %> <% link_to "/#{p}", class: 'current' do %>Current Block<% end %> <% link_to "/#{p}", title: "Other #{p}", locale: ::I18n.locale == :en ? :es : :en do %>Other Block<% end %> <% end %> """ And a file named "source/localizable/foobar.en.html.erb" with: """ English foobar """ And a file named "source/localizable/foobar.es.html.erb" with: """ Spanish foobar """ And a file named "config.rb" with: """ set :strip_index_file, false activate :i18n, mount_at_root: :en """ Given the Server is running at "empty-app" When I go to "/hello.html" Then I should see "Page: Hello" Then I should see 'Current Home' Then I should see 'Other Home' Then I should see 'Home: Current Block' Then I should see 'Home: Other Block' Then I should see 'Current hello.html' Then I should see 'Other hello.html' Then I should see 'Current Block' Then I should see 'Other Block' Then I should see 'Current Foobar' Then I should see 'Other Foobar' When I go to "/es/hola.html" Then I should see "Page: Hola" Then I should see 'Current Home' Then I should see 'Other Home' Then I should see 'Home: Current Block' Then I should see 'Home: Other Block' Then I should see 'Current hello.html' Then I should see 'Other hello.html' Then I should see 'Current Block' Then I should see 'Other Block' Then I should see 'Current Foobar' Then I should see 'Other Foobar' Scenario: link_to is i18n aware and supports relative_links Given a fixture app "empty-app" And a file named "locales/en.yml" with: """ --- en: msg: Hello home: Home """ And a file named "locales/es.yml" with: """ --- es: paths: hello: "hola" msg: Hola home: Casa """ And a file named "source/assets/css/main.css.scss" with: """ $color: red; body { background: $color; } """ And a file named "source/localizable/index.html.erb" with: """ Page: <%= t(:home) %> <%= stylesheet_link_tag :main %> """ And a file named "source/localizable/hello.html.erb" with: """ Page: <%= t(:msg) %> <%= link_to "Current Home", "/index.html", class: 'current' %> <%= link_to "Other Home", "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en %> <% link_to "/index.html", class: 'current' do %>Home: Current Block<% end %> <% link_to "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en do %>Home: Other Block<% end %> <%= link_to "Current hello.html", "/hello.html", class: 'current' %> <%= link_to "Other hello.html", "/hello.html", title: "Other hello.html", locale: ::I18n.locale == :en ? :es : :en %> <% link_to "/hello.html", class: 'current' do %>Current Block<% end %> <% link_to "/hello.html", title: "Other hello.html", locale: ::I18n.locale == :en ? :es : :en do %>Other Block<% end %> """ And a file named "config.rb" with: """ set :css_dir, 'assets/css' set :relative_links, true set :strip_index_file, false activate :i18n, mount_at_root: :en activate :relative_assets """ Given the Server is running at "empty-app" When I go to "/index.html" Then I should see "assets/css/main.css" When I go to "/hello.html" Then I should see "Page: Hello" Then I should see 'Current Home' Then I should see 'Other Home' Then I should see 'Home: Current Block' Then I should see 'Home: Other Block' Then I should see 'Current hello.html' Then I should see 'Other hello.html' Then I should see 'Current Block' Then I should see 'Other Block' When I go to "/es/hola.html" Then I should see "Page: Hola" Then I should see 'Current Home' Then I should see 'Other Home' Then I should see 'Home: Current Block' Then I should see 'Home: Other Block' Then I should see 'Current hello.html' Then I should see 'Other hello.html' Then I should see 'Current Block' Then I should see 'Other Block' Scenario: url_for is i18n aware Given a fixture app "empty-app" And a file named "data/pages.yml" with: """ - hello.html - article.html """ And a file named "locales/en.yml" with: """ --- en: msg: Hello """ And a file named "locales/es.yml" with: """ --- es: paths: hello: "hola" form: "formulario" msg: Hola """ And a file named "source/localizable/hello.html.erb" with: """ Page: <%= t(:msg) %> <% data.pages.each_with_index do |p, i| %> Current: <%= url_for "/#{p}" %> Other: <%= url_for "/#{p}", locale: ::I18n.locale == :en ? :es : :en %> <% end %> """ And a file named "source/localizable/form.html.erb" with: """ Other: <%= url_for "/form.html", query: { foo: 'bar' }, fragment: "deep", locale: ::I18n.locale == :en ? :es : :en %> """ And a file named "source/localizable/article.html.erb" with: """ Page Lang: Default Current: <%= url_for "/article.html" %> Other: <%= url_for "/article.html", locale: ::I18n.locale == :en ? :es : :en %> Current with anchor: <%= url_for "/article.html", :anchor => "test-anchor" %> """ And a file named "source/localizable/article.es.html.erb" with: """ Page Lang: Spanish Current: <%= url_for "/article.html" %> Other: <%= url_for "/article.html", locale: :en %> Current with anchor: <%= url_for "/article.html", :anchor => "test-anchor" %> """ And a file named "config.rb" with: """ activate :i18n, mount_at_root: :en """ Given the Server is running at "empty-app" When I go to "/hello.html" Then I should see "Page: Hello" Then I should see 'Current: /hello.html' Then I should see 'Other: /es/hola.html' When I go to "/es/hola.html" Then I should see "Page: Hola" Then I should see 'Current: /es/hola.html' Then I should see 'Other: /hello.html' When I go to "/form.html" Then I should see 'Other: /es/formulario.html?foo=bar#deep' When I go to "/es/formulario.html" Then I should see 'Other: /form.html?foo=bar#deep' When I go to "/article.html" Then I should see "Page Lang: Default" Then I should see 'Current: /article.html' Then I should see 'Other: /es/article.html' Then I should see 'Current with anchor: /article.html#test-anchor' When I go to "/es/article.html" Then I should see "Page Lang: Spanish" Then I should see 'Current: /es/article.html' Then I should see 'Other: /article.html' Then I should see 'Current with anchor: /es/article.html#test-anchor' Scenario: url_for can link to the current page in a different language with localized templates Given a fixture app "empty-app" And a file named "source/localizable/index.de.html.erb" with: """ Deutsch. Die Englische Version finden Sie unter "<%= url_for current_page, locale: :en %>" """ And a file named "source/localizable/index.en.html.erb" with: """ English. The German version can be found at "<%= url_for current_page, locale: :de %>" """ And a file named "config.rb" with: """ # FIXME: Auto-discover does not work if there are no locale files. activate :i18n, mount_at_root: :en, :locales => [:en, :de] """ Given the Server is running at "empty-app" When I go to "/index.html" Then I should see "English" Then I should see '"/de/"' When I go to "/de/index.html" Then I should see "Deutsch" Then I should see '"/"'