自动生成/en-US/welcome/
这样的网址,不带任何手动前缀或类似内容。
只是不工作。我的网址中没有区域设置。
我的application_controller.rb
已经有default_url_options()
方法:
def default_orl_options(options = {})
{ locale: I18n.locale }
end
这是我的routes.rb
:
[...]
get "home/index"
root to: 'home#index'
get '/:locale' => 'home#index'
scope '/:locale' do
resources :home
end
[...]
最后,要显示一个链接:
[...]
<%= link_to '', url_for('buy') %>
[...]
结果呢? http://localhost:3000/buy/
。 我只希望locale
为网址添加前缀。
到现在为止,谢谢!
答案 0 :(得分:0)
在较新的应用中,首选格式为:
Rails.application.routes.default_url_options[:locale]= I18n.locale
config/initializers/default_url_opts.rb
答案 1 :(得分:0)
我遇到了与您完全相同的问题,尽管我已关注Rails guidelines for this(在default_url_options
中定义了ApplicationController
方法,并在I18n.locale
中设置了before_action
)。
我的问题是有人在default
的范围内放了一个routes.rb
参数,如下所示:
scope "(:locale)", locale: /en|pt-br|es/, defaults: { locale: ''}
...
作为this question points out(读作'可能的问题'),defaults
,尽管有名称,但实际上覆盖了该语言环境参数。结果是我只在link_to
(使用url_for
)中获得了本地化链接,如果我在其参数中特别指定了区域设置,类似于link_to(dashboard_path(locale: I18n.locale))
,这正是设置{{应用程序控制器中的1}}应该避免我不得不这样做。
从routes.rb中的范围块中删除default_url_options
是解决方案的一半;另一半是ApplicationController中的改进代码#default_url_options
defaults
最后一个来源是this answer。