gpt4 book ai didi

ruby-on-rails - 使用范围和本地化/i18n 时 Rails 路由冲突

转载 作者:行者123 更新时间:2023-12-01 09:17:15 25 4
gpt4 key购买 nike

为了使我的应用程序国际化,我希望根据当前的 I18n.locale 将名为“hello_path”的路由自动翻译为“/en/hello”或“/fr/bonjour”。但我遇到了一个问题(名字冲突?):

我的路线是:

LostInTranslation::Application.routes.draw do
root :to => 'home#index'
scope '/:locale' do
constraints :locale => 'fr' do
get 'bonjour' => 'home#hello', :as => 'hello'
end
constraints :locale => 'en' do
get 'hello' => 'home#hello', :as => 'hello'
end
end
end

在 ApplicationController 中,我设置了语言环境并将其传递给默认的 url 选项:

class ApplicationController < ActionController::Base
protect_from_forgery

before_filter :set_locale

private

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

def set_locale
if params[:locale] and I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale = params[:locale]
else
I18n.locale = I18n.default_locale
end
end
end

但是当我在 View 中使用 <%= link_to t('hello'), hello_path %> 我得到这个错误:

No route matches {:controller=>"home", :locale=>:fr, :action=>"hello"}

然而 rake routes 说它是声明的:

 root     /                          {:action=>"index", :controller=>"home"}
hello GET /:locale/bonjour(.:format) {:locale=>"fr", :action=>"hello", :controller=>"home"}
hello GET /:locale/hello(.:format) {:locale=>"en", :action=>"hello", :controller=>"home"}

您是否知道为什么它不起作用或有其他实现方法?我知道 i18n_routing gem,但它通过声明具有不同名称的本地化路由(本例中为 en_hello 和 fr_hello)来工作。

谢谢!

最佳答案

我没有使用 I18n_routing gem 的经验,但可以想象它接受非本地化路由并为您翻译它;例如,您提供 hello_path,剩下的由它来完成。

你应该有一个没有命名空间的默认语言

 google.com     # english default locale
google.com/es # spanish

而不是

 google.com/en  # english
google.com/es # spanish
google.com # nothing here

您应该查看具有默认语言环境的 translate_routes gem,我使用它没有任何问题。 https://github.com/raul/translate_routes

关于ruby-on-rails - 使用范围和本地化/i18n 时 Rails 路由冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609334/

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