gpt4 book ai didi

ruby-on-rails - 如何配置 Rails 路由以适应 i18n

转载 作者:行者123 更新时间:2023-12-04 09:36:22 24 4
gpt4 key购买 nike

我正在为 Rails 应用程序添加国际化,并且或多或少地遵循了相关的 Rails GuideRailscast .

我遇到了两个问题:

  • 如何添加重定向到当前语言环境的“主页”链接。目前我有 root_path 链接,但由于 routes.rb 中的行旨在获取无作用域的根,这些链接失败了。这意味着 root_path 始终指向默认语言环境,而不是当前语言环境。
  • 我已经在本地设置和工作(除了
    上面的问题)但部署到 Heroku 的所有 url 似乎都在下降
    通过我的路线文件并被其中一个捕获。他们在 defulat 下重定向到“/”
    语言环境。

  • 我的设置如下

    应用 Controller .rb
    before_filter :set_locale
    def default_url_options(options = {})
    {locale: I18n.locale}
    end

    private
    def set_locale
    I18n.locale = params[:locale] if params[:locale].present?
    end

    路由文件
    scope ":locale", locale: /#{I18n.available_locales.join("|")}/  do
    all_my_routes

    # handles /valid-locale
    root to: 'home#index', as: "localized_root"
    # handles /valid-locale/fake-path
    match '*path', to: redirect { |params, request| "/#{params[:locale]}" }
    end

    # handles /
    root to: redirect("/#{I18n.default_locale}")

    # handles /bad-locale|anything/valid-path
    match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")

    # handles /anything|valid-path-but-no-locale
    match '/*path', to: redirect("/#{I18n.default_locale}/%{path}")

    我的主页链接:
    <%= link_to "Home", root_path %>

    最佳答案

    经过一些来回,我最终得到了这个工作。问题是捕获所有路由 a) 捕获的比我预期的要多,并且 b) 在开发和部署中的行为明显不同(我不确定为什么会这样)。

    无论如何,首先我更改了范围以使其可选(注意括号):

    scope "(:locale)", .....

    这确保即使没有设置语言环境,作用域路由也是有效的(这主要是为了处理我在回调等方面遇到的一些问题)。

    这让我放弃了两个 root to线,只保留
    root to "home#index"

    我删除了“handles/valid-locale/fake-path”行,这导致了“/”路径的问题。

    然后在范围之后保留以下全部内容(注意最后一个)。
    # handles /bad-locale|anything/valid-path
    match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")

    # handles /anything|valid-path-but-no-locale
    match '/*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }

    # handles /
    match '', to: redirect("/#{I18n.locale}")

    作为一个兴趣点,我还必须更新 action_mailer 以处理新的本地化 url。
    config.action_mailer.default_url_options = { :host => 'path.to.my.app.com', :locale => I18n.locale }

    现在一切似乎都在工作!

    关于ruby-on-rails - 如何配置 Rails 路由以适应 i18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975061/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com