Craft CMS でのマルチサイト:多言語サイトとサイトの言語設定・フィールドの翻訳設定 #craftcms
このエントリは Craft CMS Advent Calendar 2019 21日目のエントリです。
昨日は「Craft CMS でのマルチサイト:マルチサイトでのセクションとフィールドの設定について」でした。
Craft CMS でのマルチサイトでのデータの持ち方について数回みてきた。
多言語サイトはマルチサイトの延長にあると書いたが、サイトでの言語指定とフィールドでの翻訳方法の組み合わせというイメージになる。
ガイド:ローカライズされたサイトの設定 | Craft 3 ドキュメント
https://docs.craftcms.com/v3/j...
Craft CMS での多言語サイトの構築については安倍さんのエントリがわかりやすい。
Craft CMSを使用した多言語サイト制作のはじめの一歩 | Another Sky
https://www.anothersky.pw/2018...
Craft CMS 3では各言語毎にスラッグが定義できる | Another Sky
https://www.anothersky.pw/2018...
多言語用の別言語サイトの作成
まず多言語用のサイトを1つ用意する
これまでみてきた「マルチサイト:製品」「マルチサイト:ニュース」のそれぞれのセクションのエントリはこのようになっている。
「マルチサイト:製品」
「マルチサイト:ニュース」
各言語ごとに翻訳するフィールドの準備
各言語に対して翻訳するフィールドを作成する。
このフィールドを「マルチサイト:製品」に設定してデータの状態を確認してみる。
各サイト・同一言語・別言語でのデータの確認
セクションに登録したエントリが各サイトでどのようなデータ内容になっているかを確認する。
まずはサイト「AAA(日本語)」でエントリを作成してみる。
サイト「English(英語)」で確認しても同じ内容なので、サイト「English(英語)」で編集を加える。
再度、サイト「AAA(日本語)」で確認してみる。
サイト「AAA」とサイト「English」はサイトも言語も別なので翻訳不可のフィールドの値のみが共通となっているのがわかる。
この時点でサイト「BBB(日本語)」を確認してみる。
サイト「BBB」もサイト「English」と言語もサイトも異なるため、「翻訳不可」のフィールドのみが共通のデータとなっている。
この状態でサイト「BBB」で編集を加えてみる。
サイト「English」を確認すると、先ほどと逆で共通データの「翻訳不可」のフィールドの内容のみが反映が確認できる。
この状態でサイト「AAA」の状況を確認してみる。
「翻訳不可」のフィールドは共通のためほかと同様。
「AAA」と「BBB」は言語が同じ(日本語)なので、「各言語に対して翻訳」するフィールドの内容は共通のデータとして管理されているのがわかる。
「各サイトに対して翻訳」のフィールドはそれぞれのサイト独自のデータとなっているのがわかる。
ということで、サイトの言語指定とフィールドの翻訳指定によってデータの扱いは変わってくる。
1つのエントリ内で複数言語を管理するかどうか
「1つのエントリでまとめて管理したい」という要望もあるとは思う。
例えば1つの入力タイプの中にタブでわけてフィールド欄を言語ごとに用意するといったことも、設計や要望としてはあるかもしれない。
フィールドが言語の数分だけ増えることになるので、それであれば、サイトを分けたほうが Craft CMS 的にはいい感じに使えるような気がする。
エントリの編集画面の上部にあるプルダウンでサイトを切り替えることが簡単にできるので対応しているエントリを探す必要がない。
この辺りは運用する人にとっては使いやすいのではないかと思う。
まぁ、とはいっても1つのエントリのなかで並べて確認したい、といった要望もあるんだろうなぁというのもわかる。
グローバルの設定も多言語対応が可能
今回はセクション、エントリ、フィールドを中心にデータの扱われ方を確認した。
フィールドに翻訳設定があったように、 Craft CMS のグローバルもサイト単位となっている。
ここにもフィールド単位での翻訳設定が影響してくるので、多言語サイトの管理はかなりしやすいのではないかと思う。
Craft CMS はサイトの構成・内容に応じて自由に設定ができるので、シンプルなサイトからマルチサイト、多言語サイトと柔軟に作ることができる。
その設計が正解かどうか?というのはすぐ判断できなかったり、ある程度運用してきて見えることもあるとは思う。
それらを考えるとこの柔軟さは拡張性に繋がってくると思うので、出来るだけ細かく分けて管理するようにするのがいいのかな、と考えている。