ECサイト作成のクライアント案件。
低予算で・・・というご希望で、WordpressのWelcartを利用することに。
Welcartは、WordpressにECサイトを簡単に構築できる便利すぎる有料プラグインです。
プラグイン+専用テーマを利用することで、カスタマイズ可能な通販サイトが作れてしまうなんて便利な世の中ですね。
日本製のプラグインなので、国内のお客様を対象としたECサイトの場合、深く考える必要なく、大抵の通販サイトができてしまう優れもの(もちろん海外発送機能もついてます)。
ウェルカートってなんだ?っていう具体的な内容は割愛して・・・
今回やりたいことは、ウェルカートのプラグインやテーマから吐き出されいてるテキストの表現を変えること。
ウェルカートにてECサイトを構築していると、ボタンの表示テキストや、注釈テキストなど、ウェルカートデフォルトの文言から少し変えたいなんてところがたくさん出てきます。
でも、ウェルカートから吐き出されている文言のほとんどは、テーマファイルやプラグイン構成ファイルには英語で表記されており、それを翻訳ファイル(.mo)で日本語に変換してから表示されています。
このため、このmoファイル内の日本語表現を単純に書き換えるカスタマイズをすれば良いのですが、ウェルカート自体のアップデートがあった際に、カスタマイズした文言がアップデートによって、先祖返りしてしまう可能性があります。
テーマファイルの方は、子テーマを作ってしまえば上書きされることはありませんが、プラグインファイルのmoファイルは、ウェルカートプラグイン自体にアップデートがあった場合、確実に上書きされてしまいます。
翻訳ファイルをカスタマイズする度にバックアップデータとの差分をとって、アップデートがされるたびに上書きしなおす・・・なんてのは、すこしセンスが無いように思えたし、クライアントとは保守契約の予定がないため納品時とボタンの文言等が運用時に勝変わってしまう事態が起こったときに、事前説明を行っていたとしても、担当者が変わったなんてことがあれば永年めんどくさいではないか。
一般的にどうしているのかよくわからないのだけど、わたしが採った解決方法をメモしておくことにします。
かなり急いでメモしたので、全体的におかしな文章&破綻した流れがあると思われます。
完全にイカれた文章でまとまりがありません・・・。
Welcartの翻訳データを変更する際の私的な要件
無論、今回はWordpressのECサイト構築用プラグインであるウェルカートを例にしているが、同じ考え方で、その他のプラグインでも対応できます。
- アップデートの時に上書きされないようにしたい
- アップデートで加わった新たな翻訳については反映したい
- 変更したものを優先的に利用する
- とにかく時間がないから早く解決できる方法(多少のゴリ押しは許して)
これらの条件を満たす方法として、実行したのは、ウェルカートで用意されている翻訳データを利用しつつ、独自の翻訳データも利用して反映させる方法。
つまり、ウェルカートプラグインが読み込む翻訳データ(.moファイル)を2つ用意し、これを読み込ませるようにすることに。
ウェルカートで利用されている翻訳データは、
/wp-content/plugins/usc-e-shop/languages/
にある、
usces-ja.mo
(usces-ja.po)
です。
この.moデータは、同じ階層にある、usces-ja.poファイルをコンパイルしたファイルで、poファイルを編集して、moファイルを書き出すにはPoeditというアプリを利用するのが簡単で一般的かと思う。
このへんはまた追記するとして・・・
オリジナルの翻訳ファイルは、
ウェルカートがアップデートされても影響のない領域、かつ、わかりやすい領域に・・ということで、子テーマの翻訳ファイルと同じ階層に入れることに。
/wp-content/themes/子テーマ名/languages/
に、
usces-ja.mo
(usces-ja.po)
として利用することに。
アップデートに影響を受けないWordpressプラグインの翻訳データ作成手順
具体的な手順のメモをしていきます。
まずは元々の翻訳データ元ファイル(.po)を子テーマのディレクトリにコピー
まずは、ウェルカートプラグインの翻訳データ、poファイルを任意のディレクトリにコピーします。
今回の例では、子テーマフォルダのlanguageフォルダにコピーしました。
コピーするフォルダは、wordpressのプラグインやテーマ等のアップデートでデータが消えてしまわないような場所が好ましいかと思います。
最終的にファイルの場所をfunctions.phpから指定するので、最悪どこだっていいです。
わかりやすく管理しやすくかつアップデートの影響を受けない場所なら。
コピーしたpoファイルをテキストエディタで開いて不要箇所を編集
テキストエディタで、コピーしたpoファイルを開き編集します。
(Poeditは、翻訳の追加や削除はできませんので、コンパイル時と翻訳の文言を編集するときのみに利用します。)
変更後の文言のみをオーバーライドさせるために、変更をする箇所のみ残してpoファイルを保存します。
必要な翻訳だけを自作で
この編集したpoファイルに記述されている翻訳が反映され、そこに無いものが、オリジナルの翻訳(元のデータ)が反映されることになります。
翻訳データがアップデートされることは稀かもしれませんが、アップデートの内容を極力利用しつつ、ここだけは譲れないって文言だけを反映させることができます。
今回の場合は、例としてお問い合わせフォームのsubmitボタンのvalue値に設定されている文字列を変更することにしてみます。
msgid "Admit to send it with this information."
msgstr "上記内容で送信する"
を
msgid "Admit to send it with this information."
msgstr "プライバシーポリシーに同意の上、上記内容を送信する"
に変更します。
開いたpoファイルのヘッダー部分を残して、その他は全て削除し、変更後の翻訳行のみ残して保存します。
今回の例では下記のようなファイルになりました。
ヘッダー部分は、コピー元のデータによって様々かと思いますので、下記とは全く同じではありません。
msgid ""
msgstr ""
"Project-Id-Version: Welcart e-Commerce\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-20 00:00+0900\n"
"PO-Revision-Date: 2019-03-04 16:11+0900\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.5.7\n"
msgid "Admit to send it with this information."
msgstr "プライバシーポリシーに同意の上、上記内容を送信する"
これで下準備はOK。
.moファイルを書き出し
保存した.poファイルをコンパイルして、.moファイルを書き出します。
ここで登場するのが、Poedit。
PoeditをPCにインストールして、保存したファイルを開きます。
開いたら、ファイル→MOにコンパイル
で、同じ階層にmoファイルを書き出します。
これで、翻訳データの準備が完了しました。
functions.phpに翻訳データの読み込み指定を書き加える
あとは、functions.phpに、翻訳データのオーバーライド指定を追記するだけでOKです。
流れとしては、既にプラグインからload_textdomainにて読み込まれている翻訳データをアンロードします。
アンロードした上で、自作の翻訳データを読み込ませ、さらに、オリジナル(元の翻訳データ)を読み込みます。
こうすることで、まずは、自作の翻訳データが適用され、そこに無いものに関しては、オリジナルの翻訳データが利用されることになります。
/***ウェルカート翻訳ファイルをオーバーライド***/
//ウェルカートプラグインのテキストドメインを指定
$welcart_text_domain = 'usces';
//オリジナル(元の)翻訳データ
$welcart_original_mofile = WP_PLUGIN_DIR.'/usc-e-shop/languages/'. $welcart_text_domain.'-ja.mo';
//変更後の自作翻訳データ(任意)※例では利用している子テーマのlanguagesフォルダ
$welcart_override_mofile = get_stylesheet_directory().'/languages/'.$welcart_text_domain.'-ja.mo';
//読み込まれている翻訳データをアンロード
unload_textdomain($welcart_text_domain);
//変更後の自作翻訳データをロードする
load_textdomain($welcart_text_domain, $welcart_override_mofile );
//オリジナル(元の)翻訳データをロードする
load_textdomain($welcart_text_domain, $welcart_original_mofile );
以上を、functions.phpに追記します。
追記箇所はどこでも良いかと思います。
保存して、サーバーにアップロードしたら完了です。
変更した箇所のみが、変わっていることが確認できたらOKです。
以上、メモでした。
もっとスマートな方法があるかもしれませんが、取り急ぎ、現時点ではこれで進行しようとしています。
コメントを残す