Help us understand the problem. What is going on with this article?

Padrino での多言語化対応(I18n)のつかいかた

More than 5 years have passed since last update.

Rails でのやり方をまとめたこの記事がいいなーと思ったので Padrino 特有の部分を設定方法を中心に書き出してみました。

設定のしかた

Padrino では config/boot.rb で default_locale の設定をします。

I18n.default_locale = :ja

何も設定しなければ、I18n のデフォルト値( :en )が設定されます。

ちなみに、I18n の読み込みは padrino-helper が担当してます。

言語ファイル

以下のファイルが標準で読み込まれます。

これらに設定されている文言が気に入らない場合は、上記ファイルを [your_apps_root_path]/locale/ 配下に設定し、適宜編集すれば、そちらが優先されます。

また、言語ファイルの設置場所を変更したい場合は、[your_apps_root_path]/app.rb で locale_path を設定します。

set :locale_path, Proc.new { Dir[Padrino.root('config', 'locales', '**/*.yml')] }

モデル用の言語ファイルは、

# ActiveRecord or MiniRecord を使っている場合
$ rake ar:translate
# MongoMapper を使っている場合
$ rake mm:translate

app/locale/models/ 直下に生成されます。

今のところ、出力先は固定です…。

view での使い方

省略。Railsと同じ感じで t とか l とかで使えます。

本筋から外れますが、モデルのエラーをバラして1つずつ表示したい場合があったので、次のようにしてみました。
もっといいやり方があれば教えてください。

def show_error_message(model, field)
  return if model.errors.messages[field].blank?
  attribute = I18n.t(field, default: field.to_s.humanize, scope: [:models, model.class.name.underscore, :attributes])
  message = model.errors.messages[field].first
  safe_content_tag :p, "%s %s" % [attribute, message], class: :error-message
end

locale の切り替え

padrino-contribに auto_locale とか便利そうなのがありますが、使ったことないので使ったら追記します。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away