我觉得我这样做有点滥用 Rails I18N ......有没有更好的方法?
我们正在构建一个具有 I18N 的应用程序,因此使用Rails Guides中记录的标准技术。
我们还希望为每个客户的应用程序打上品牌,我通过将其覆盖在本地化上来做到这一点。
例如,我有这个application_controller.rb
:
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
brand = request.subdomains.first || nil
I18n.locale = [brand, params[:locale] || I18n.default_locale].compact.join('_')
end
end
然后在en.yml
:
en:
home: "Home"
arc_en:
home: "ARC 1-Click Home"
yata_en:
home: "YATA Home"
它有效,但这感觉有点笨拙,也许我会在路上后悔。有没有更好的办法?
好的,我遇到了这种方法的问题。我完全拥有的application_controller.rb
是:
def set_locale
I18n.locale = [brand, params[:locale] || I18n.default_locale].compact.join('_')
end
def default_url_options(options={})
{ :locale => ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
end
在routes.rb
我做:
Oneclick::Application.routes.draw do
scope "(:locale)", locale: /arc_en|arc_es|yata_en|yata_es/ do
authenticated :user do
root :to => 'home#index'
end
devise_for :users
resources :users
match '/' => 'home#index'
end
root :to => "home#index"
end
它有效,但我对我得到的 URL 并不感到疯狂。例如,我可能从http://arc.1click.local:3000/
我的开发环境开始(默认:en
为我指定的application.rb
),但注册链接是http://arc.1click.local:3000/arc_en/users/sign_up
.
我宁愿是http://arc.1click.local:3000/users/sign_up
(因为它可以arc
从域名中获取品牌并且en
是默认语言环境),或者我什至可以使用http://arc.1click.local:3000/en/users/sign_up
.
建议?