Tôi có một trang web bằng cả tiếng Pháp và tiếng Anh. Tôi muốn người dùng có thể chuyển đổi ngôn ngữ khi họ nhấp vào liên kết trong tiêu đề. Khá đơn giản.Chuyển ngôn ngữ bằng URL trong Ruby on Rails 3
Tôi đã theo Ruby on Rails 3 hướng dẫn, và tôi có điều này:
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
protect_from_forgery
def default_url_options(options={})
logger.debug "default_url_options is passed options: #{options.inspect}\n"
{ :locale => I18n.locale }
end
end
tuyến đường của tôi trông như thế này:
scope "(:locale)", :locale => /en|fr/ do
match 'home' => 'home#index'
match 'home/ajax_twitter' => 'home#ajax_twitter'
match 'equipe' => 'equipe#index'
match 'equipe/sylvain' => 'equipe#sylvain'
match 'equipe/benoit' => 'equipe#benoit'
match 'equipe/stephane' => 'equipe#stephane'
match 'equipe/suemarie' => 'equipe#suemarie'
match 'equipe/regis' => 'equipe#regis'
match 'equipe/fred' => 'equipe#fred'
match 'equipe/callback' => 'equipe#callback'
match 'equipe/auth' => 'equipe#auth'
match 'equipe/ajax_contact' => 'equipe#ajax_contact'
match 'linkedinauth/callback' => 'linkedinAuth#callback'
match 'linkedinauth/init_auth' => 'linkedinAuth#init_auth'
match 'mission' => 'mission#index'
match 'service' => 'service#index'
match 'developmen' => 'developmen#index'
match 'contact' => 'contact#index'
match 'mandats' => 'mandats#index'
end
match '/:locale' => "home#index"
Và theo quan điểm của tôi, tôi làm điều này:
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en'%>
<% else %>
<%= link_to "Français", '/fr'%>
<%end%>
Tất cả hoạt động tốt trong trang chủ, nhưng nếu tôi cố chuyển ngôn ngữ trong khi tôi đang ở trong một bộ điều khiển cụ thể, tôi sẽ được trả về trang. Tôi cố gắng để thêm video này:
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en/' + params[:controller]%>
<% else %>
<%= link_to "Français", '/fr/' + params[:controller]%>
<%end%>
này sửa chữa các bộ điều khiển, nhưng nếu chúng ta đang ở trong một hành động cụ thể và chuyển đổi ngôn ngữ một lần nữa, tôi nhận được trở lại 'index' của bộ điều khiển này.
Câu hỏi của tôi: Cách tốt nhất để giải quyết vấn đề này là gì?
Tôi đoán tôi có thể thực hiện một cái gì đó trong ApplicationController (bộ lọc) để kiểm tra xem một bộ điều khiển/hành động/id được truyền và nối nó vào miền địa phương. Hoặc tôi có thể làm điều này trong routes.rb không?
Vì lý do sử dụng một số biểu tượng (ví dụ. ': vi') gây ra' ActionController :: RoutingError (Không có đường khớp nào {...}) 'trên ** lần nhấp ** tiếp theo (được kiểm tra trong Rails 3.2.12). Sử dụng chuỗi thay vì giải quyết vấn đề (': locale => 'en''). – user569825
đây là câu trả lời hữu ích hơn vì nó đề cập đến ngữ cảnh hiện tại, tức là các thông số. và hợp nhất chúng với ngôn ngữ, là một tham số meta cấp ... – Jerome