JavaScriptを有効にしてください

【Elixir】gettext で日本語化をする(多言語対応

 ·  ☕ 2 分で読めます

【Elixir】gettext で日本語化をする(多言語対応

Elixir gettext で日本語化をする方法

環境

  • Elixir 1.14.2
  • Phoenix 1.6.3

インストール

まずはプロジェクト作成を行います。

mix phx.new my_app --no-ecto

パッケージ追加

※Phoenix ではデフォルトでインストールされているようなので不要です。

mix.exsgettext を追加します。

1
2
3
4
5
  defp deps do
    [
      {:gettext, "~> 0.18"} # Add gettext
    ]
  end

パッケージの取得 & コンパイル

パッケージの取得とコンパイルを行います。

mix do deps.get, deps.compile

gettext のタスク

mix help を行うと gettext 関連のタスクが2つあります。

mix gettext.extract       # Extracts messages from source code
mix gettext.merge         # Merge template files into message files
  • mix gettext.extract Elixirのソースコードからメッセージを抽出します。 mix gettext.extract
  • mix gettext.merge 言語ファイルをマージします。 mix gettext.merge

言語ファイル

言語ファイルは priv/gettext の中に存在します。

翻訳対象文字列の抽出

ソースから翻訳対象の文字列を抽出します。

mix gettext.extract

Extracted priv/gettext/default.pot
Extracted priv/gettext/errors.pot

2ファイルが生成されます。

priv/gettext/LC_MESSAGES/
├──default.pot
└──errors.pot

言語ファイルの作成

mix gettext.merge を使用して日本語用言語ファイルを作成します。

mix gettext.merge priv/gettext --locale=ja
Created directory priv/gettext/ja/LC_MESSAGES
Wrote priv/gettext/ja/LC_MESSAGES/default.po (1 new message, 0 removed, 0 unchanged, 0 reworded (fuzzy), 0 marked as obsolete)
Wrote priv/gettext/ja/LC_MESSAGES/errors.po (21 new messages, 0 removed, 0 unchanged, 0 reworded (fuzzy), 0 marked as obsolete)

priv/gettext/ja に言語用ファイルが作成されます。

日本語ファイルを編集する

実際に日本語を設定します。

msgid がメッセージのIDになり、msgstr には翻訳内容を入れます。

#: lib/demo_web/templates/page/index.html.heex:2
#, elixir-autogen, elixir-format
msgid "Welcome to %{name}!"
msgstr "ようこそ %{name}!"

デフォルトの言語を変更する

config.exs に追記してデフォルト言語を日本語設定します。

1
config :gettext, :default_locale, "ja"

ここの文字列が日本語化されて表示されます。

1
<%= gettext "Welcome to %{name}!", name: "Phoenix" %>

これでWelcomeページの日本語化ができました。
en
ja

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer