2019-12-23

Craft CMS でのマルチサイト:多言語サイト用の翻訳辞書の管理 #craftcms

このエントリは Craft CMS Advent Calendar 2019 23日目のエントリです。
昨日は「Craft CMS でのマルチサイト:フィールドの翻訳方法のカスタムについて」でした。

年明け1/16に Craft CMS Meetup Tokyo vol.2 やります!

Craft CMS Meetup Tokyo vol.2 Craft CMS の実際のところ | Meetup
https://www.meetup.com/ja-JP/J...

滅多に揃わないメンバーだと思いますので、ぜひご参加いただければとm(_ _)m


先日エントリのフィールドにおけるそれぞれの翻訳・データの持ち方をみてきた。

多くの CMS でも多言語サイトの場合は翻訳サービスとの連携だったり翻訳の辞書を持つといったこともある。

翻訳辞書を作って多言語対応する

言語ごとに翻訳辞書を作っておき、それを参照して使ってみる。

公式ドキュメントのこちらが参考になる。

静的メッセージの翻訳 | Craft 3 ドキュメント
https://docs.craftcms.com/v3/j...

まずは Craft CMS をインストールしたところと同じところ(templates や vendor と同じ階層)に translations フォルダを作成する。

そこに言語ごとのID(en, ja, ja-jp, de とか)のフォルダを作る。
(ja、ja-JP の 日本語、日本語(日本)って何が違うんだろうな。方言用?)

そのフォルダに site.php を作成する。ここは翻訳する対象によって作るファイルが変わってくる。

site.php に以下のように翻訳を設定する。

<?php

return [
    'bit part' => 'ビットパート',
];

こういうファイルを日本語に置いておくことで「bit part」が「ビットパート」と翻訳される。

確認用に以下のようなテンプレートを置いてみる。 
翻訳を適用するにはフレーズに |t のフィルターを当てる。

<h2>サンプル</h2>
<p>Site Language:{{ currentSite.language }}</p>
<p>{{ 'bit part'|t }}</p>

英語サイトでの表示。

日本語サイトでの表示。

ちゃんと翻訳辞書の内容が当たってるのが確認できる。

マルチサイトの場合のテンプレートは templates/{site_handle}/ におくことで利用ができる。

参考

@tinybeans @BUN はじめ他のブログ記事とかも参考になる。

管理画面で翻訳辞書を管理する

先の例は翻訳辞書をテンプレートで管理することになるので、この辺りは運用体制などによってちょっと不便ということがあるかもしれない。

それを解消してくれるプラグインが Translations admin プラグイン。

Translations admin
https://plugins.craftcms.com/t...

プラグインをインストールする

CLIでプラグインをインストールする。

$ composer require mutation/translate

$ ./craft install/plugin translations-admin

こんな感じでプラグインがインストールされる。

プラグインの設定はこんな感じになっているので、サイトの表示(site)以外も翻訳する場合なども管理できそう。

先の翻訳辞書のデータ(ja/site.php)を一旦削除する。

設置したサンプルページに行くと、翻訳がなかった状態なので、このような感じでデータとして追加される。

ここで翻訳データを登録してみる。

先ほどのサンプルページに行くとこの翻訳が適用されているのがわかる。

このプラグインは便利そうだなー。

Drupal とか管理画面で翻訳を管理できたので、こういう使い方はされていくだろうなー。

参考

翻訳サービスと連携して翻訳する

今回は細かく触れないが、 CMS は別の翻訳システム・翻訳サービスと連携して、それらをCMSで管理したり、連携機能を持っているものがある。

Craft CMS だとパッとみた感じではこの辺がそういうプラグインになりそう。

翻訳するサービスなどもいろいろあるし、コストもかかったりするので選択肢や判断基準としては様々だが、選択肢の一つではありそう。