Magentoでサイトを構築していると、日本語と英語のニュアンスや言語的な構文の違いに悩まされる事が多々あります。

Magento1でももちろん様々な悩みはありましたが、「Magentoの翻訳機能の仕組み」で取り上げたように、あの手この手駆使することで対処ができていました。

Magento2の時代になり、翻訳の仕組みにも変更が加えられましたが、良くなった面と悪くなった面の両方があるように思います。
今回はMagento2の翻訳の仕組みについて解説したいと思います。

Magentoのロケールファイルとは

Magentoのロケールファイルは、ただのCSVです。
一部変数を差し込める機能がありますが、編集自体は特別なツールは必要なく、テキストエディタがあれば編集できます。

ロケールファイルの配置場所

Magento2では下表の種類のロケールファイルが存在します。

名称場所
Magentoコア vendor/magento/<モジュール名>/i18n/*.csv
サードパーティ製エクステンション
サードパーティ製テーマ
vendor/<ベンダー名>/<モジュール名>/i18n/*.csv
app/<ベンダー名>/<モジュール名>/i18n/*.csv
プロジェクト固有テーマ app/design/frontend/*/*/i18n/*.csv
プロジェクト固有ロケール
サードパーティ製ロケール
app/i18n/*/*/*.csv
vendor/<ベンダー名>/<モジュール名>/*.csv

この他に、インライン翻訳ツールで翻訳したロケールがデータベース内に保存されます。

Magento2では従来よりもロケールファイルのバリエーションが増えているので、文言調整を行う場合には注意が必要です。

ロケールファイルの作り方

ロケールファイルを作るのは簡単です。基本的な構成は、

"Yes","はい"

のようにフィールドを引用符でくくったCSVを文字コードUTF-8で作成します。
また、ファイル名はja_JP.csvのようにつけます。

複数行に渡る文言はできるだけ同じ形が望ましいほか、フィールド内の引用符は引用符を2つ重ねて打ち消す必要があります。
このあたりの挙動はMagento1と同じです。

ロケールファイルの配置

独自にエクステンションやテーマを書いている場合は、その中にi18nというディレクトリを作成し、ロケールファイルを配置します。

ロケールディクショナリを作る場合は、公式DevDocsを参照するとわかりやすいでしょう。

ロケールの継承

ロケールディクショナリを使う場合、翻訳データの継承ができます。
継承を行うことで、ある特定の翻訳データだけを上書きすることができます。

Magentoが使うシステムメッセージをすべて翻訳する作業はとても手間がかかります(8000行以上あります)。
サイトごとの要望に合わせてロケールを継承したディクショナリを作成するほうが手間がかからず管理もしやすいと思います。

ロケールの優先順位

Magento1にも存在しましたが、Magento上のロケールには優先順位があります。

下記の順番でロケールが適用されていくので、文言を調整する際には気をつけたほうが良いでしょう。

  1. Magento公式またはサードパーティ製モジュール固有のロケール
  2. テーマ固有のロケール
  3. ディクショナリロケール(継承元)
  4. ディクショナリロケール(継承先)
  5. データベースにあるロケール 

注意すべきなのは、テーマのロケールよりディクショナリのロケールのほうが優先順位が高いことです。
たとえテーマで翻訳を調整したとしても、ディレクトリであとから上書きされることに注意をしてください。

Magento2で廃止されたもの

Magento1では、テーマ固有のロケールで以下のような書き方が認められていました。

"Mage_Catalog::Item","商品"
"Mage_Cms::Item","アイテム"

このようにモジュール別に翻訳を変える機構は、Magento2では廃止されています。
同じ文言は常に同じ翻訳結果になります。

もし、同じ原文を異なる用途で使用したい場合は、原文側を変更する必要があります。
とくにフロントエンド側のテーマにおいては微妙な箇所がいくつも存在するので、プロジェクト固有のロケールあるいはテーマ固有のロケールをセットで作るほうが良いでしょう。