Fransızca ve İngilizce dillerinde bir sitem var. Kullanıcının, üstbilgideki bir bağlantıyı tıklattığında dili anında değiştirmesini istiyorum. Oldukça basit.Dili Ruby on Rails ile değiştirin. 3
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"
Ve bence bunu:
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
Benim yolları şu şekilde görünür:
Ben Ruby on 3 kılavuzu takip ettim ve bu var
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en'%>
<% else %>
<%= link_to "Français", '/fr'%>
<%end%>
Tüm ana sayfalarda iyi çalışır, ancak belirli bir denetleyicideyken dili değiştirmeye çalışırsam, h'ye döndüğümde ome sayfası. Bunu eklemek için çalıştı:
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en/' + params[:controller]%>
<% else %>
<%= link_to "Français", '/fr/' + params[:controller]%>
<%end%>
Bu denetleyici düzeltir, ancak belirli bir eylem ve dili yeniden geçerseniz, geri Bu kontrolörün 'endeksi' olsun.
Soruma Soru: Bunu çözmenin en iyi yolu nedir?
Denetleyicinin/eylemin/kimliğin geçip geçmediğini ve yerel ortama eklenip eklenmeyeceğini kontrol etmek için ApplicationController'da (filtre) bir şey uygulayabilirim. Veya bunu route.rb'de yapabilir miyim?
(örn. ': tr''de, ** sonraki ** tıklamalardaki (Rails 3.2.12 sürümünde test edilen) ActionController :: RoutingError (Yolculuk eşleşmiyor {...}). Dizeleri kullanmak sorunu çözer (': locale => 'tr''). – user569825
Bu daha yardımcı bir cevaptır çünkü mevcut bağlamla, yani paramlarla ilgilenir. ve meta-düzey bir param olan yerel ile birleştirerek ... – Jerome