我已经对这个主题进行了一些研究,但我似乎无法弄清楚。
我已按照官方指南设置 I18n,但我只是没有正确设置默认语言环境(当没有指定明确的语言环境时)。
# routes.rb
require 'sidekiq/web'
Iq::Application.routes.draw do
scope "(:locale)", locale: /de|en/ do
# ...
end
end
# application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_language
def set_language
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options = {})
options.merge!({ :locale => I18n.locale })
end
end
在 OS X 控制台中:
$ rake routes | grep user
...
user GET (/:locale)/users/:id(.:format) users#show {:locale=>/de|en/}
...
在 Rails 控制台中:
$ Rails c
$ app.users_path
=> "/users"
app.users_path locale: :de
=> "/de/users"
$ app.user_path User.first, locale: :de
=> "/de/users/509fc01d77bb1e6a050000a0"
$ app.user_path User.first
ActionController::RoutingError: No route matches {:action=>"show", :controller=>"users", :locale=>#<User _id: 509fc01d77bb1e6a050000a0, _type: nil, created_at: 2012-11-11 15:11:25 UTC, updated_at: 2012-11-11 15:11:25 UTC, deleted_at: nil, group: "administrator", language: "de", active: true, sign_in_count: 0, name: "sysadmin", email: "support@sientia.ch", encrypted_password: "$2a$10$n/b7sTmUjEMoZI/jvq2jPuaNQqo1R1zbAIPpko9HT9PERagXclrPK", reset_password_token: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, unconfirmed_email: nil, reset_password_sent_at: nil, remember_created_at: nil, confirmed_at: 2012-11-11 15:11:25 UTC, confirmation_sent_at: nil, current_sign_in_at: nil, last_sign_in_at: nil, save_vertical_menu_visibility_state: nil, contact_id: "509fc01d77bb1e6a0500008c", contact_name: "Sientia AG">}
from /Users/josh/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.2.8/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error'
为什么这不起作用?我忘记了什么?
非常感谢您的帮助,乔希