3

Rails 3.1.3 で default_locale を設定しない

アプリケーション.rb:

config.i18n.default_locale = :en

私は 3 つのロケール (en、es、および ca) を持っています。コンソールに移動すると、次のようになります。

I18n.locale => :ca # I guess the first one in the array

Gettext を使用しています。誰かがそれが何であるかの手がかりを得ましたか?

バンドル:

Using rake (0.9.2.2) 
Using Ascii85 (1.0.1) 
Using ZenTest (4.5.0) 
Using multi_json (1.0.4) 
Using activesupport (3.1.3) 
Using builder (3.0.0) 
Using i18n (0.6.0) 
Using activemodel (3.1.3) 
Using erubis (2.7.0) 
Using rack (1.3.6) 
Using rack-cache (1.1) 
Using rack-mount (0.8.3) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.0.3) 
Using actionpack (3.1.3) 
Using mime-types (1.17.2) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.3.0) 
Using actionmailer (3.1.3) 
Using arel (2.2.1) 
Using tzinfo (0.3.31) 
Using activerecord (3.1.3) 
Using activeresource (3.1.3) 
Using addressable (2.2.6) 
Using adyen (1.3.0) 
Using airbrake (3.0.5) 
Using ansi (1.3.0) 
Using autotest (4.4.6) 
Using xml-simple (1.1.1) 
Using aws-ses (0.4.4) 
Using bcrypt-ruby (3.0.1) 
Using bluecloth (2.2.0) 
Using bulksms (0.5.2) 
Using bundler (1.0.21) 
Using highline (1.6.2) 
Using net-ssh (2.2.1) 
Using net-scp (1.0.4) 
Using net-sftp (2.0.5) 
Using net-ssh-gateway (1.1.0) 
Using capistrano (2.9.0) 
Using capistrano-ext (1.2.1) 
Using nokogiri (1.5.0) 
Using ffi (1.0.9) 
Using childprocess (0.2.2) 
Using json_pure (1.6.1) 
Using rubyzip (0.9.4) 
Using selenium-webdriver (2.8.0) 
Using xpath (0.1.4) 
Using capybara (1.1.1) 
Using carrierwave (0.5.8) 
Using chunky_png (1.2.5) 
Using coffee-script-source (1.1.2) 
Using execjs (1.2.9) 
Using coffee-script (2.2.0) 
Using fssm (0.2.7) 
Using sass (3.1.10) 
Using compass (0.12.alpha.0) 
Using compass-960-plugin (0.10.4) 
Using rest-client (1.6.7) 
Using couchrest (1.1.2) 
Using couchrest_model (1.1.2) 
Using daemons (1.0.10) 
Using diff-lcs (1.1.3) 
Using e164 (0.3.1) 
Using excon (0.7.12) 
Using factory_girl (2.3.0) 
Using rack-ssl (1.3.2) 
Using json (1.6.5) 
Using rdoc (3.12) 
Using thor (0.14.6) 
Using railties (3.1.3) 
Using factory_girl_rails (1.4.0) 
Using multipart-post (1.1.3) 
Using faraday (0.7.5) 
Using faraday_middleware (0.7.0) 
Using fast_gettext (0.6.2) 
Using formatador (0.2.1) 
Using ruby-hmac (0.4.0) 
Using fog (1.1.1) 
Using rails (3.1.3) 
Using formtastic (2.0.0.rc5) 
Using gem_plugin (0.2.3) 
Using geocoder (1.1.0) 
Using geokit (1.6.0) 
Using locale (2.0.5) 
Using gettext (2.1.0) 
Using gettext_i18n_rails (0.3.0) 
Using gravatar (1.0) 
Using guard (1.0.0) 
Using guard-rspec (0.6.0) 
Using haml (3.1.4) 
Using haml-rails (0.3.4) 
Using hashie (1.1.0) 
Using jquery-rails (1.0.17) 
Using kaminari (0.12.4) 
Using kgio (2.6.0) 
Using launchy (2.0.5) 
Using libv8 (3.3.10.2) 
Using metaclass (0.0.1) 
Using subexec (0.1.0) 
Using mini_magick (3.3) 
Using mocha (0.10.0) 
Using money (4.0.1) 
Using mongrel (1.2.0.pre2) 
Using multi_xml (0.4.1) 
Using nifty-generators (0.4.6) 
Using ruby-rc4 (0.1.3) 
Using pdf-reader (1.0.0) 
Using ttfunk (1.0.3) 
Using prawn (0.12.0) 
Using rack-protection (1.1.4) 
Using raindrops (0.8.0) 
Using redis (2.2.2) 
Using redis-namespace (1.0.3) 
Using sinatra (1.3.1) 
Using vegas (0.1.8) 
Using resque (1.19.0) 
Using resque_mailer (2.0.2) 
Using rspec-core (2.8.0) 
Using rspec-expectations (2.8.0) 
Using rspec-mocks (2.8.0) 
Using rspec (2.8.0) 
Using rspec-rails (2.8.1) 
Using ruby-ole (1.2.11.2) 
Using sexp_processor (3.0.7) 
Using ruby_parser (2.3.1) 
Using sass-rails (3.1.5) 
Using simple_oauth (0.1.5) 
Using spreadsheet (0.6.5.9) 
Using state_machine (1.0.2) 
Using steak (2.0.0) 
Using therubyracer (0.9.8) 
Using turn (0.8.3) 
Using twitter (1.7.2) 
Using uglifier (1.0.3) 
Using unicorn (4.1.1) 
Using useragent (0.4.6)
4

5 に答える 5

8

次の行のコメントを外しましたか?

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]

Rails は、この場所からのみ翻訳されたテキストを取得します。ただし、これは Rails 固有の翻訳 gem 用です。gettext のデフォルトロケールを設定したい場合は、以下のように設定する必要があります

それをenvironment.rbに追加

I18n.supported_locales = Dir[File.join(RAILS_ROOT, "locale/*")].collect{|v| File.basename(v)}

Rails コンソールでテストする

 ::I18n.locale = 'en'

これは、次の gettext メソッドで確認できます

GetText.locale.to_s

基本的に、設定I18n.locale = 'en'または他のロケールによって言語を設定します。ブラウザの優先言語に基づいてデフォルトの言語を設定することもできます。lang='ca' などを渡すことで、(gettext) でロケールを設定するように言語を強制することもできます。必要なのは:before_filter. そのフィルターで以下のメソッドを呼び出します

def set_default_language
    languages   = get_browser_preferred_languages_hash(request.env["HTTP_ACCEPT_LANGUAGE"])
    @locale     = languages.blank? ? 'en' : app_preferred_language(languages, params[:lang])[0..1]
    I18n.locale = @locale || 'en'
end

  def get_browser_preferred_languages_hash(languages)
    # no language accepted
    return [] if languages.blank?
    # parse Accept-Language
    accepted = languages.split(",")
    accepted = accepted.map { |l| l.strip[0..1]}
  end

  def app_preferred_language(languages,forced_lang)
    unless forced_lang.blank?
      return forced_lang.class == Array ? forced_lang[0] : forced_lang       
    end
    return 'en' if languages.blank?
    @matched_lang = ''
    languages.each do |lang|
      @matched_lang = support_languages_hash.values.detect{|ele| ele[0..1] == lang}
      break if !@matched_lang.blank?
    end
    return @matched_lang.blank? ? 'en' : @matched_lang
  end

  def support_languages_hash
    GetText.locale
    { _('English')    => 'en-US',
      _('Spanish')    => 'es-419',
      _('Catalan')    => 'ca' }
  end
于 2012-02-20T12:13:36.567 に答える
2

これではないと思いますconfig.i18n.default_localeが、環境ファイルでオーバーライドしている可能性があります。environments/development.rb.

I18n.localegrep を使用して、 、I18n.default_locale、および関連する値のすべての出現箇所を探すことから始めるとよいでしょう。grep 'locale' app -rn(r は再帰、n は行番号を表示) から始めて、プロジェクトのルートでもう一度実行します。

于 2012-02-20T12:40:38.743 に答える
1

application.rbこの行に追加するconfig.i18n.locale = :caと、Rails はデフォルトのロケールを設定します。本番サーバーでは機能していますが、:ruロケールを設定しました

于 2012-02-21T20:12:11.950 に答える
1

レールを学んでいます。Rails を使用した実用的なアジャイル Web 開発をフォローしています。ローカリゼーションを機能させようと試みていましたが、機能しませんでした。しばらくして、テストでロケールが正しいことに気付きました。変。次に、ビューがキャッシュされていることに気付きました。rails_app_path/tmp のファイルを削除してみてください。

乾杯!

于 2013-08-12T19:26:05.980 に答える
0

あなたの問題はおそらく Gettext の使用に関連しています。私が間違っていなければ、ロケールの保存と取得に独自のメカニズムを使用しており、default_locale 設定をまったく尊重していないと思います。Gettext なしで同様の問題が発生したため、ここにたどり着いた人もいます。皆さんにとって、少なくとも最新の安定した Rails リリースでは、default_locale は問題なく動作すると言えます。おそらくそれを再定義したか、明示的にロケールをどこかに設定しました。参照用にプロジェクトを grep します。

grep -rn default_locale . 
grep -rn I18n.locale .

またはsmtn..

もう 1 つ覚えておくべきことは、新しい default_locale 設定を有効にするには、おそらくサーバーの再起動が必要になるということです。

于 2012-06-14T07:51:57.480 に答える