2012-04-15 16 views
1

我有我的網址是這樣的:Rails 3.2,更改語言環境時如何刷新當前的URL區域設置?

http://0.0.0.0:3000/en/experiments 

當我改變了語言環境,所有的字符串會轉換細, 但是,該網址的語言環境不改變

http://0.0.0.0:3000/ar/experiments,除非我按任意鏈接,它會刷新

這裏是我的routes.rb:

scope "(:locale)", :locale => /en|ar/ do 
    resources :experiments 
    resources :users 
    resources :class_rooms 
    end 

match 'lang' => 'home#set_lang' 

這裏是個e家控制器:

def set_lang 
    I18n.locale = params[:id] 
    redirect_to :back 
end 

鏈接的觀點:

= link_to "Arabic", :controller => 'home', :action => 'set_lang', :id => 'ar' 
= link_to "English", :controller => 'home', :action => 'set_lang', :id => 'en' 

這樣,我怎麼能刷新URL以反映新的語言環境, 不應redirect_to :back這樣做呢?

回答

0

我會建議使用類似routing-filter的東西,而不是這個問題的自定義解決方案。此外,調用參數「ID」似乎奇怪。更好的名字是「locale」,不是嗎?

+0

謝謝,我會檢查路由過濾器,是的,它能夠更好地使用語言環境參數名稱:-) – simo 2012-04-15 16:47:33

+0

路由過濾器並沒有解決這個問題,我需要一個方式來刷新本地權利,我選擇了不同的區域設置後,目前,只有當我設置一個新的本地+訪問另一個鏈接時,本地URL更改... – simo 2012-04-15 18:21:47

0

你在應用程序控制器中試過這個嗎?

# pass in language as a default url parameter 
def default_url_options(options = {}) 
    {locale: I18n.locale} 
end 
0

有了這段代碼,你不能因爲你重定向到:back這是舊的區域設置的url。更改地區,並保持當前的URL

def set_lang 
    I18n.locale = params[:id] 
    redirect_to :back 
end 

一種方法是做這樣的事情

- I18n.available_locales.each do |locale| 
    = link_to t(locale, :scope => [:languages]), params.merge(:locale => locale), :id => locale, :title => t(locale, :scope => [:languages]), :alt => t(locale, :scope => [:languages]) 
1

我知道這個問題爲2歲,但嘿。我有完全相同的問題,我解決了它。

前提是你已經在你的application_controller.rb這包括:

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

你不需要任何控制器或行動。相反,只是這樣做:

= link_to 'Arabic', locale: :ar 
= link_to 'English', locale: :en 
相關問題