Столкновение маршрута Rails при использовании областей и локализации / i18n - PullRequest
3 голосов
/ 07 июля 2011

Чтобы интернационализировать мое приложение, я хотел бы, чтобы именованные маршруты, такие как 'hello_path', автоматически переводились в '/ en / hello' или '/ fr / bonjour "в зависимости от текущего I18n.locale. Но я столкнулся с проблемой (name clash?):

Мои маршруты:

LostInTranslation::Application.routes.draw do
  root :to => 'home#index'  
  scope '/:locale' do
    constraints :locale => 'fr' do
      get 'bonjour' => 'home#hello', :as => 'hello'
    end
    constraints :locale => 'en' do
      get 'hello' => 'home#hello', :as => 'hello'
    end
  end
end

И в ApplicationController я устанавливаю локаль и передаю ее параметрам URL по умолчанию:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :set_locale

  private

  def default_url_options(options={})
    options.merge({ :locale => I18n.locale })
  end

  def set_locale
    if params[:locale] and I18n.available_locales.include?(params[:locale].to_sym)
      I18n.locale = params[:locale]
    else
      I18n.locale = I18n.default_locale
    end
  end
end

Но когда в представлении я использую <% = link_to t ('hello'), hello_path%>, я получаю эту ошибку:

No route matches {:controller=>"home", :locale=>:fr, :action=>"hello"}

Тем не менее, маршруты rake говорят, что она объявлена:

 root     /                          {:action=>"index", :controller=>"home"}
hello GET /:locale/bonjour(.:format) {:locale=>"fr", :action=>"hello", :controller=>"home"}
hello GET /:locale/hello(.:format)   {:locale=>"en", :action=>"hello", :controller=>"home"}

Не могли бы вы понять, почему он не работает или нет другого способа добиться этого? Мне известен гем i18n_routing, но он работает, объявляя локализованные маршруты с разными именами (в данном примере en_hello и fr_hello).

Спасибо!

1 Ответ

0 голосов
/ 07 июля 2011

У меня нет опыта работы с гемом I18n_routing, но я думаю, что он принимает нелокализованный маршрут и переводит его для вас;например, вы указываете hello_path, а все остальное.

У вас должен быть язык по умолчанию, который не является пространством имен

 google.com     # english default locale
 google.com/es  # spanish

, а не

 google.com/en  # english
 google.com/es  # spanish
 google.com     # nothing here

Вы должны проверить гем translate_routes, который имеет локали по умолчанию и которыйЯ использовал без проблем.https://github.com/raul/translate_routes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...