1

このメソッドはブラウザ言語を抽出し、言語に 2 文字などがある場合に正常に機能しes, en, deます。

  def extract_locale_from_accept_language_header
    browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].try(:scan, /^[a-z]{2}/).try(:first).try(:to_sym) 
    if I18n.available_locales.include? browser_locale
      browser_locale
    else
      I18n.default_locale
    end
  end

ただし、ブラウザの言語が 4 文字の場合は機能しません。

en
en-us
en-gb
en-au
en-ca
zh-TW
zh-cn

この問題を解決するにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

正規表現は 2 文字のみを検索します。これを試してください。

browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].try(:scan, /^[a-z-]{2,5}/).try(:first).try(:to_sym)

これは、小文字またはダッシュを含む 2 ~ 5 文字のコードで機能します。

これは、この正規表現をさらに改良する必要があるかもしれない始まりにすぎません。

于 2013-05-29T16:26:49.473 に答える