Rails アプリケーションをフランス語にローカライズするために使用したい PO ファイル (en.po & fr.po) があります。最近質問https://stackoverflow.com/questions/17203622/translating-a-rails-application-3-2-13-using-po-gettext-filesを提出して、何か助けが得られるかどうかを確認しました。Fast-Gettext と別の gem に関する情報をいくつか読んだと言いました。データベースを使用せずに PO ファイルを使用できるので、Fast-Gettext gem を調べることにしました。
Gemfile に fast_gettext と gettext_i18n_rails の最新バージョンを追加しました。現時点ではデータベース機能を使用する予定はありませんが、未定義のメソッド「_」エラーメッセージを取り除くために後者の gem をインストールしました。
config/application.rb に以下のコードを追加しました。
# add FastGettext configuration
FastGettext.add_text_domain 'my_app', :path => 'config/locales', :type => :po, :ignore_fuzzy => true, :report_warning => false
FastGettext.default_text_domain = 'my_app' # set the default textdomain
FastGettext.default_available_locales = ["en","fr"] # set available locales # (note: the first one is used as a fallback if you try to set an unavailable locale)
FastGettext.default_locale = 'en'
これは、cookie を使用してロケールを設定および保存できるようにするための application_controller.rb のセットアップです。
include FastGettext::Translation
before_filter :set_users_locale
def set_users_locale
I18n.locale = FastGettext.set_locale(params[:locale] || cookies[:locale] ||
request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
cookies[:locale] = I18n.locale if cookies[:locale] != I18n.locale.to_s
end
ユーザーがフラグをクリックして :locale の値を設定できるロジックを追加しました。
<%= link_to_unless_current image_tag("flag_us_30px.jpg", :alt => "Set Language to English"), locale: "en" %>
<%= link_to_unless_current image_tag("flag_fr_30px.jpg", :alt => "Set Language to French"), locale: "fr" %>
フラグをクリックすると、:locale の値が正しく設定されます。ルートは domain.com/:locale/link としてフォーマットされています。現在、ルートには、オーバーライドするロジックを追加するまで、ロケールが含まれています。
私がテストしている私の見解の2つのステートメントを次に示します。
<%= _("Language") %>
<%= _("Note: If you do not understand the text on the icons, use the text links at the bottom of the page.") %>
フランスの国旗をクリックして :locale の値を "fr" に変更すると、リンクは適切に変更されますが、両方の文字列のコードは英語のままです。PO ファイルには、これら両方の用語のフランス語訳があります。PO ファイルが見つからなかった場合、見つからなかったというエラー メッセージが表示されるはずです。
最初に config/initializers/fast_gettext.rb の構成コードを使用しようとしましたが、結果が得られなかったので、config/application.rb に入れて動作するかどうかを確認することにしました。「:ignore_fuzzy => true, :report_warning => false」も削除して、状況が変わるかどうかを確認しました。ただし、同じ結果が得られます。
2011 年に @svenfuchs が Gettext の使用を推奨したため、私は fast_gettext を使用しています。最近彼が活動しているところを見つけることができる唯一の場所のように見えるので、私はTwitterで彼に連絡してみるかもしれません.
どんな助けでも大歓迎です。