2016-08-26 44 views
0

我创建使用轨道5轨的网站,我在英国加的可能性,该网站翻译法文(法文是默认设置)如何“坚持”rails应用程序的区域设置?

当我在英国设置的语言环境,一切都很好,但是当我点击在一个链接上,网站回到法国,用户需要再次翻译网站

有没有一种方法来保持通过用户将继续页面的区域设置?

预先感谢您

编辑

我说我application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_filter :set_locale 

    def set_admin_locale 
    I18n.locale = :fr 
    end 

    def default_url_options 
    { locale: I18n.locale } 
    end 

    private 
    def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
    Rails.application.routes.default_url_options[:locale]= I18n.locale 
    end 
end 

回答

0

您可以通过路线PARAMS传递当前的区域设置为任何其他路线:

link_to 'Posts', posts_path(locale: params[:locale]) 

它会然后ca通过url请求进行修改。请确保在来自控制器的重定向呼叫中执行相同的操作。

http://guides.rubyonrails.org/i18n.html是设置的I18n

+0

比方说,我想要去“传记”,链接看起来像'<%= link_to'Biography','/ biography',locale:params [:locale]'? – Jaeger

+0

第二个参数接受一个散列,与'url_for'的格式相同。这里的文档显示了比我更好的示例:https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiE54jdi97OAhXErB4KHTs1A6MQFgglMAE&url=http%3A%2F%2Fapidock。 com%2Frails%2Factioncontroller%2Fbase%2Furl_for&usg = AFQjCNGyIUdeGPANKXlQrIuAFuzNnKbu5g&sig2 = 4QlMg3BdzaBZf_jzAC2NOA – agmcleod

1

,而不是与posts_path(locale: params[:locale])塞满您的整个应用程序,你可以使用default_url_options一个很好的参考。

class ApplicationController < ActionController::Base 
    def default_url_options 
    { locale: I18n.locale } 
    end 
end 

这样做是什么,只要你生成的URL佣工它将附加当前区域(在当前请求使用的语言环境)的URL查询字符串的URL。

所以,如果用户请求/users?locale=se和渲染的视图包含link_to(@user.name, @user)它将有路径/users/1?locale=se

+0

我粘贴在我的'application_controller.rb'中,但它没有改变任何东西......还有什么我必须做的,以使其工作? – Jaeger

+0

尝试重新启动您的服务器。这可能是一个缓存问题 – max

+0

对不起,所花的时间,所以我重新启动服务器,并尝试在另一台计算机上,但我没有在两种情况下工作。我将编辑我的问题以显示我的application_controller.rb – Jaeger