RailsなどのI18nのやり方
Railsのアプリケーションを多言語化する場合、keyと定義する必要があります。翻訳文を探すとき、keyを与えて、翻訳文が返されます。例えば、config/locales/ja.ymlファイルで
のように定義して、
view側で
を呼ぶと、ちゃんと”本サイトへようこそ”が返されます。
PhoenixとGettext
Phoenixの場合はrailsのやりかとと少し異なります。Phoenixのアプリケーションを英語化や多言語化するとき、デフォルトではGettexを使います。Gettextはrailsのi18nと違って、keyを自分で定義する必要がありません。もしrailsのようlに使いたいなら、linguistというパケッジを入れる必要があります。
Gettextの使い方
gettext()関数を入れる
まず、多言語化したいところにgettext関数を入れる
例えば、テンプレート側で
があります。
このwelcomeを日本語化したい場合、以下のように修正する必要があります。
potファイルを生成する
次は、gettextのテンプレートファイルを自動作成します。以下のコマンドを実行すると、
priv/gettext/default.potというテンプレートファイルが作成されます(potはPortable Object Template略)。
ファイルの中身は以下のような感じです。
poファイルを生成する
次は、テンプレートファイルからPOファイルを生成します。以下のコマンドを実行すると、
初めて日本語のPOファイルを作りたい場合は
を実行する必要があります。
extractとmergeを同時に実行することもできます
上のコマンドを実行すると、/priv/gettext/ja/LC_MESSAGES/default.poなどのファイルが生成されます。
ファイルの中身は以下のような感じです。
poファイルを手動で修正
/priv/gettext/ja/LC_MESSAGES/default.poファイルを以下のように日本語の翻訳を追加、他の言語の場合は/priv/gettext/xxx/LC_MESSAGES/default.poを修正
plugを追加する
多国言語の翻訳ファイルを追加した後、localeの設定が必要です。ここではplugを利用してlocaleの設定を行います。
サポートする言語をconfig/config.exsに追加します。
web/controllers/locale.exというファイルを追加します。ファイルの中身は以下のようになります。
サーバーを起動して、localhost:4000?locale=jaにアクセスすると、日本語が表示され、localhost:4000?locale=enにアクセスすると、英語が表示されます。