मेरे पास फ्रेंच और अंग्रेजी दोनों में एक साइट है। मैं चाहता हूं कि उपयोगकर्ता फ्लाई पर भाषा स्विच कर सकें जब वे हेडर में एक लिंक पर क्लिक करें। बहुत सीधा।रूबी पर रूबी में एक यूआरएल के साथ भाषा स्विच करें 3
मैं पर रूबी 3 गाइड का पालन किया है, और मैं इस है:
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
मेरे मार्गों इस तरह दिखेगा:
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"
और मेरे विचार में मैं यह कर:
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en'%>
<% else %>
<%= link_to "Français", '/fr'%>
<%end%>
सभी होम पेज में अच्छी तरह से काम करते हैं, लेकिन अगर मैं एक विशिष्ट नियंत्रक में भाषा स्विच करने की कोशिश करता हूं, तो मैं एच में वापस आ जाता हूं ओमे पेज। मैं इस जोड़ने की कोशिश की:
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", '/en/' + params[:controller]%>
<% else %>
<%= link_to "Français", '/fr/' + params[:controller]%>
<%end%>
इस नियंत्रक ठीक करता है, लेकिन अगर हम एक विशिष्ट कार्रवाई में हैं और फिर भाषा स्विच, मैं वापस इस नियंत्रक की 'सूचकांक' को मिलता है।
मेरा प्रश्न: इससे निपटने का सबसे अच्छा तरीका क्या है?
मुझे लगता है कि मैं नियंत्रक/एक्शन/आईडी पास हो गया है या इसे लोकेल में जोड़ना है, यह जांचने के लिए मैं एप्लिकेशन नियंत्रक (फ़िल्टर) में कुछ कार्यान्वित कर सकता हूं। या मैं इसे मार्गों में कर सकता हूं। आरबी?
किसी कारण का उपयोग कर प्रतीकों के लिए (जैसे। ': en') का कारण है 'एक्शन कंट्रोलर :: रूटिंग एरर (कोई रूट मैचों {...}) ** ** ** ** क्लिक (रेल 3.2.12 में परीक्षण) पर। तारों का उपयोग करने से समस्या हल हो जाती है (': locale => 'en'')। – user569825
यह एक और सहायक उत्तर है क्योंकि यह मौजूदा संदर्भ, यानी पैराम्स से संबंधित है। और उन्हें लोकेल के साथ विलय कर रहा है, जो मेटा-स्तरीय परम है ... – Jerome