我在以下设置下运行了三个 Ruby/Rails 小程序:
services.mydomain.com/applet1
services.mydomain.com/applet2
services.mydomain.com/applet3
这些是通过 Phusion Passenger 提供的,App1 和 App2 完全按预期工作。
问题在于使用嵌入在 URL 中的 I18n 语言环境的 App3:
services.mydomain.com/applet3/en/
services.mydomain.com/applet3/fr/
services.mydomain.com/applet3/es/
问题似乎是 link_to URL 似乎不包含“applet3”。所以而不是:
services.mydomain.com/applet3/en/signin
我得到:
services.mydomain.com/en/signin
...这是无法路由的。
我的 routes.rb 看起来像:
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
root to: "static_pages#home"
end # scope locale
end # Rails.application.routes.draw do
...在 app/controllers/application_controller.rb 我有:
before_filter :set_locale_from_params
def url_options
{ only_path: true, locale: I18n.locale }
end
protected
def set_locale_from_params
if params[:locale]
if I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale = params[:locale]
else
flash.now[:notice] = 'Translation not available'
logger.error flash.now[:notice]
end
end
end
...在 config/environments/production.rb 我有:
Rails.application.routes.default_url_options[:host] = 'http://services.mydomain.com/applet3/'
EDIT1:添加示例 link_to 语句
<%= link_to(t(".#{language}"), root_path(locale: language)) %>
/编辑1
如果我将 App3 移动到 URL 路径中没有“folder_name”的更“正常”安排,则一切正常。因此,我在如何设置范围或 URL 选项方面缺少一些简单的东西。
提前感谢您的任何帮助和建议!