Shopwareに日本語ロケールを適用する(2023.11暫定版)

この記事では、2023年11月時点のCrowdin上にある翻訳データを使用して、Shopwareのロケールキットに日本語を追加する方法を紹介します。
Shopwareのデフォルトでは英語表示ですが、この記事で紹介する手順を踏むことで、日本語での表示が可能になります。

なお、将来的に公式のロケールキットがアップデートし、日本語が含まれるようになった際にはこの手順は不要となります。

Shopwareの動作する環境を用意する

以降の作業を行うためには、Shopwareが動作する環境が必要です。
以下の手順などを利用して、とにかくまずはShopwareが動く環境を用意します。

私の手元環境はMacなのでDenを用いて環境を構築していますが、同じような構成を作れるのであれば何でも構いません。

ロケールキットをインストールする

Shopwareをインストールするついでに、ロケールキットをインストールしておきます。
通常はインストールの際にオプションとして提示されるため、ついでにチェックをしておけば良いでしょう。

もしインストールされていない場合は、Shopwareの管理画面にある

Extension > Store

にアクセスし、「Shopware Language Pack」をインストールしましょう。

ロケールキットを改造する

ここからが本題です。
2023年11月時点でのロケールキットには日本語が含まれていないので、人力で追加する必要があります。

  • 言語コードの追加
  • JSONファイルの配置
  • データベース更新スクリプトの作成

という3つの手順を踏むことで、日本語をロケールキットに追加できます。

では、

Shopwareインストールディレクトリ/custom/plugins/SwagLanguagePack/src/

へ移動しましょう。

言語コードの追加

まず最初は、言語コードの追加です。ロケールキットのディレクトリにある、

SwagLanguagePack.php

をテキストエディタで開きます。

constで定義されている、

  • SUPPORTED_LANGUAGES
  • BASE_SNIPPET_SET_LOCALES

に対して、日本語の定義を追加します。

JSONファイルの配置

次にロケールの内容を定義しているJSONファイルを追加します。
このJSONファイルはCrowdinからダウンロードできます。
下図の画面の赤枠のボタンを押すと、ロケールファイルがzip形式で入手できます。

Crowdin

ダウンロードしてきたzipファイルを展開すると、複数のディレクトリに分かれる形でJSONファイルが入っていることが確認できます。
それぞれのファイルを下表のルールに従って配置する必要があります。

展開したアーカイブ側 Language Pack側
Platform/Administration/administration.json Resources/app/administration/src/snippet/ja-JP.json
Platform/Core/messages.json Resources/snippet/core/messages.ja-JP.base.json
Platform/Storefront/storefront.json Resources/snippet/storefront/storefront.ja-JP.json
Plugins/モジュール名/Administration/administration.json Resources/app/administration/src/snippet/モジュール名/ja-JP.json
Plugins/モジュール名/Storefront/storefront.json Resources/snippet/モジュール名/storefront.ja-JP.json

Plugins/モジュール名/Core/messages.json は全て使わないので無視してOKです。

データベース更新スクリプトの作成

最後にデータベース更新を行うファイルを作成します。
Shopwareはデータベースに対する更新をエクステンション内に配置したファイルと、データベース上の履歴テーブルを突合することで管理しています。
そのため、更新用のスクリプトを作成しなければ、データベースに対する更新が実行できません。

Migrationファイルの作成

データベース更新を担当するファイルは、次の命名規則で管理されています。

Migration + UNIXタイムスタンプ + 更新処理名

ロケールキットには標準で「Migration/Migration1605167857AddPackLanguage.php」が付属しています。
このファイルをコピーし、数字部分を新しいUNIXタイムスタンプに置き換えたファイルを作成しましょう。

Migration処理の実装

次は作成したファイルを開き、コードを調整します。
PHPStormなどをご利用の場合は、ファイル名とクラス名を自動的に同期させてくれることもありますが、テキストエディタなどの場合はファイル名に使用した文字列をクラス名に使用するようにしましょう。

さて、Migrationクラスの中には、

  • getCreationTimestamp
  • update
  • updateDestructive

という3つの処理が書かれています。「getCreationTimestamp」の戻り値には、クラス名に使用したUNIXタイムスタンプ値が戻り値になるようにしてください。
「updateDestructive」は今回は使用しないのでそのままで構いません。「update」については以下の記述に改変します。

    $migrationHelper = new MigrationHelper($connection);
    $migrationHelper->createPackLanguages();
    $migrationHelper->createSnippetSets();

あとはファイルを保存しておきます。

データベース更新処理の実行

ここまでの作業が全てできたら、コマンドライン環境でShopwareのインストールディレクトリに移動し、以下のコマンドを実行します。

php bin/console database:migrate SwagLanguagePack --all

このコマンドはデータベース更新処理を実行するものです。
下図のような実行結果が得られれば成功です。

Migration結果

結果の確認

最後は日本語が正しく認識されているかを確認します。

Settings > Extension > Language pack

にアクセスし、リストに日本語があるかを確認します。
下図のように日本語が表示されていれば成功です。

言語リスト

あとは管理者アカウントや、セールスチャネルの設定で日本語を指定しましょう。
これでShopwareが日本語の表示で利用できるようになります。