これを行うことでRails I18Nを悪用しているように感じます...もっと良い方法はありますか?
Rails Guidesに記載されている標準的な手法を使用して、I18N を備えたアプリを構築しています。
また、クライアントごとにアプリをブランディングしたいと考えており、これをローカリゼーションに重ねることでこれを行っています。
たとえば、私はこれを持っています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
では my で指定されているように設定されています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
提案?