2014年12月23日

[WP] テンプレートをいじらずに、qTranslateから後継プラグインに切り替える方法

WordPressの他言語化プラグインと言えば長らく「qTranslate」が定番でしたが、更新が止まってしまっていて使えない状態です。

この事態を受けて、いろんな人が「qTranslate」の亜種・クローン(「qTranslate」からのFork)をプラグインとして公開しています。

qTranslate Plus
zTranslate
など。

私が見た限りでは、
「qTranslate Plus」は本当にqTranslateとおんなじです。
「zTranslate」は、投稿画面がボタン切り替え式になっていて、私はこのほうが良い気がしました(前向きに開発していく気概が感じられてディスコンになりにくそうに思ったというのもあります)。


いずれのクローン(fork)も「qTranslateと完全に互換性があります」的なことを謳っています。
実際プラグインのソースコードを見ると、本当にそっくりです。

けれどもここで、すでにqTranslateを導入済みのWordPressサイトにおいて、
(1)「qTranslate」を無効にして
(2)かわりに「zTranslate」を有効にする
という手順だけで期待している通り動くか?というと、そうはいかない場合があります。

問題になるのは、テンプレートファイルに「qtrans_generateLanguageSelectCode」などのコードを書いている場合です。
こういったメソッド(関数)は「qTranslate」プラグインの(名前空間の)メソッドですから、「zTranslate」には同じ名前では存在していません。

「zTranslate」の場合は「ztrans_generateLanguageSelectCode」という名前、
「qTranslate Plus」の場合は「ppqtrans_generateLanguageSelectCode」という名前で、
それぞれ定義されています。
関数の中身は「qTranslate」のものとそっくり同じで、名前だけが違います。


よって、テンプレートファイルに「qtrans_generateLanguageSelectCode」と書いてある箇所は、新しくインストールしたクローンプラグインに合わせて「ztrans_generateLanguageSelectCode」などと書き換えてやらないといけません。


さらに言うと、テンプレートファイルを直接修正するのではなく、
使用中のテーマのfunctions.phpに下記のようなコードを書けば便利です。

従来のqTranslateの関数を呼び出していたコードで、クローン系のスクリプトにバイパス(スルー)してやることが出来ます。

// qTranslateのクローン(Fork)をなるべく単一コードで動かしたい
if (!function_exists('qtrans_generateLanguageSelectCode')) {
function qtrans_generateLanguageSelectCode($style='',$id='') {
if (function_exists('ppqtrans_generateLanguageSelectCode')) {
ppqtrans_generateLanguageSelectCode($style,$id);
} elseif (function_exists('ztrans_generateLanguageSelectCode')) {
ztrans_generateLanguageSelectCode($style,$id);
} else {
echo 'NotFoundAnyTrans.';
}
}
}
if (!function_exists('qtrans_getLanguage')) {
function qtrans_getLanguage() {
if (function_exists('ppqtrans_getLanguage')) {
return ppqtrans_getLanguage();
} elseif (function_exists('ztrans_getLanguage')) {
return ztrans_getLanguage();
} else {
return 'NotFoundAnyTrans.';
}
}
}
if (!function_exists('qtrans_use')) {
function qtrans_use($lang, $text, $show_available=false) {
if (function_exists('ppqtrans_use')) {
return ppqtrans_use($lang, $text, $show_available);
} elseif (function_exists('ztrans_use')) {
return ztrans_use($lang, $text, $show_available);
} else {
return 'NotFoundAnyTrans.';
}
}
}

私の場合は、このコードをそのまま自作プラグインとしてしまって、WordPressにインストールしています。
「qTranslate Clone Support」とか言う名前をつけて、WordPressサイトを構築するたびに毎回プラグインフォルダにつっこんでおけば、多言語サイトを作る時に迷わなくて済みますね!

(実際には、これ以外のよく使う便利なコードも合わせて、弊社謹製の「Koekatamarin Tools」というプラグインを自社専用に運用したりしています。)


◆ 2019/05/31 追記
「qTranslate Plus」は現在すでに開発・公開が停止されています。
「zTranslate」は2014年12月から「qTranslate-X」という名前に変わりましたが、現在更新が止まっています(まだダウンロードはできますし、PHP7系でも問題なく動作し、大きな脆弱性は見つかっていないようです)。

このエントリーをはてなブックマークに追加
posted by taichistereo at 17:05 | Comment(0) | WordPress
Blog Widget by LinkWithin