0

このgemを使用してユーザーの優先言語を判別しようとしていますが、問題が発生しています。

undefined local variable or method http_accept_language for #<HomeController:0x964f5ec>

gemをGemfileに含め、bundle installを実行し、サーバーを複数回再起動しました。アプリが宝石を認識しないのはなぜですか?

また、ApplicationControllerで、次のメソッドを記述しました。

def set_i18n_locale
 http_accept_language.user_preferred_languages
 available = %w{en kr}
 params[:locale] = http_accept_language.preferred_language_from(available)
    if params[:locale]
        I18n.locale = params[:locale]
    end
end

私が理解していないことの1つは、2行目です。 http_accept_language.user_preferred_languages

https://github.com/iain/http_accept_languageから、これはソートされた配列を返すことになっています。配列を変数に格納して使用する必要があると思いましたが、作成者はそのようなメソッドをスローします。それはどのように機能しますか?次のことだけはできませんか?

available = %w{en kr}
params[:locale] = http_accept_language.language_region_compatible_from(available)

著者の説明に少し戸惑います。

ご協力ありがとうございました。

更新: gem、http_accept_languageが正常にインストールされていないようです。gemリストにありますが、アンインストールしようとすると、インストールされていないというエラーメッセージが表示されます。なぜこれが起こるのですか?

max@max-VirtualBox:~/appe$ gem list

*** LOCAL GEMS ***
...
http_accept_language (1.0.2)
...

max@max-VirtualBox:~/app$ sudo gem uninstall http_accept_language
INFO:  gem "http_accept_language" is not installed
4

5 に答える 5

2

request.user_preferred_languagesの代わりに使用してみてくださいhttp_accept_language.user_preferred_languages

于 2013-03-18T16:18:27.977 に答える
2

ドキュメントには、バージョン2.0以降、gemはRackミドルウェアであると記載されていますが、問題は、2012年6月にリリースされた2.0バージョンのみがプレリリースにすぎないことです。したがって、バージョン2.0を入手するには、次のことを行う必要があります。

gem 'http_accept_language', '~> 2.0.0.pre'
于 2013-05-01T21:14:33.817 に答える
1

必要な機能を実装するためにgemを使用する必要はありませんでした。

  def set_i18n_locale
    unless params[:locale]
        params[:locale] = extract_locale_from_accept_language_header
    end
    available = ['en', 'kr']
    if available.include? params[:locale]
        I18n.locale = params[:locale]
    end
  end

  def extract_locale_from_accept_language_header
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  end

  def default_url_options
    { :locale => I18n.locale }
  end

公式ガイドアジャイル開発は大いに役立ちました。

于 2012-12-09T09:57:23.063 に答える
0

私の場合、解決策はgithubから@DouweMPRを適用することでした。Gemfileの行は次のとおりです。

gem 'http_accept_language', :git => 'https://github.com/DouweM/http_accept_language', :branch => 'no-middleware-no-crash'
于 2013-06-23T12:36:58.907 に答える
0

あなたのGemfileを入れてください:

gem 'http_accept_language', '~> 2.0.0.pre'

次に、コードでenvakaを使用します。

env.http_accept_language

私のために働きます。

% bundle show|grep acc
    * http_accept_language (2.0.0.pre)
于 2013-09-05T01:54:31.060 に答える