概要
Ruby の i18n ジェムを使ってみました
単体で使用する方法と Sinatra で使用する方法を紹介します
環境
- macOS 10.15.7
- Ruby 2.7.1p83
- i18n 1.8.5
インストール
bundle init
vim Gemfile
gem "sinatra"
gem "i18n"
bundle install
単体で使用する
まずは単体で使用する方法を紹介します
各言語ごとにプロパティファイルを作成します
mkdir config/locales
vim config/locales/jp.yml
jp:
name: "ほーくすのうろぐ"
age: 20
vim config/locales/en.yml
en:
name: "hawksnowlog"
age: 10
あとは i18n を使って YAML ファイルの値を参照するだけです
default_locale
で言語の出し分けをします
vim app.rb
require 'i18n'
I18n.load_path << Dir[File.expand_path("config/locales") + "/*.yml"]
I18n.default_locale = :jp
# I18n.default_locale = :en
puts I18n.t(:name)
puts I18n.t(:age)
bundle exec ruby app.rb
単体ではこんな感じで動作させます
Sinatra で使ってみる
configure や before を使っています
helpers を使ってもいいかなと思います
ブラウザは Accept-Language
ヘッダを見てロケールを設定するのでそのようにしています
ヘッダは String なので Symbol に変換してから使いましょう
vim app.rb
require 'i18n'
require 'sinatra/base'
class MyApp < Sinatra::Base
configure do
I18n.load_path << Dir[File.expand_path("config/locales") + "/*.yml"]
I18n.config.available_locales = [:en, :jp]
end
before do
unless request.env["HTTP_ACCEPT_LANGUAGE"].nil?
lang = request.env["HTTP_ACCEPT_LANGUAGE"].to_sym
I18n.locale = I18n.config.available_locales.include?(lang) ? lang : :en
end
end
get '/' do
"name => #{I18n.t(:name)}, age => #{I18n.t(:age)}"
end
end
vim config.ru
require './app'
run MyApp
bundle exec rackup config.ru
動作確認してみます
Accept-Language
ヘッダをいろいろと変更して確認してみると良いと思います
curl localhost:9292
=> name => hawksnowlog, age => 10
curl -H "Accept-Language: jp" localhost:9292
=> name => ほーくすのうろぐ, age => 20
curl -H "Accept-Language: fr" localhost:9292
=> name => hawksnowlog, age => 10
最後に
Ruby の i18n ジェムを使って国際化する簡単なサンプルを紹介してみました
Rails と組み合わせて使う例はたくさんあるのですが Sinatra は少なかったので Sinatra とも組み合わせてみました
YAML ファイルで簡単に切り分けできるのと他の言語に対応する場合は YAML ファイルを新規作成するだけなので便利です
0 件のコメント:
コメントを投稿