用I18N做白色标签的更好方法是什么?

时间:2013-06-26 18:48:21

标签: ruby-on-rails-3 internationalization

我觉得我有点滥用Rails I18N这样做...有更好的方法吗?

我们正在构建一个拥有I18N的应用,因此请使用Rails Guides中记录的标准技术。

我们还希望为每个客户提供应用程序的品牌,我正在通过覆盖来实现本地化。

E.g。我在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

它有效,但我对我得到的网址并不感到疯狂。例如,我可能会在我的开发环境中的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(因为它可以从域名获得品牌arcen是默认的区域设置)或者我甚至可以住{{1} }}

建议?

2 个答案:

答案 0 :(得分:2)

如果您的品牌完全由文字更改组成,我认为使用I18n设施是有道理的。或者,您可以设置包含品牌之间不同设置的单独配置文件,并使用这些配置设置更改应用的显示/行为方式。 I18n和配置文件的组合也可以工作。不确定这是否是最佳方式,但事实证明它有效。

答案 1 :(得分:2)

语言环境的定义是简单的,语言+文化参考,字符集等......所以从这个意义上讲,这种方法是完全有效的。

为了更加符合区域设置定义的ISO风格,首先会出现语言代码,然后是区域标识符(例如pt-BR),但无论如何都要使用语言+ DSL标识符对我来说似乎是完全合法的(想象一下en-medical,这是完全合理的)。

I18n中有很多功能可以派上用场,例如回退和默认设置,可以帮助您从应用程序中抽象内容。

除了这样一个系统可能造​​成的潜在维护负担之外,这个解决方案实际上似乎比kludgy更优雅。

对不起,不是真的,回复,只是我的2c。