by shigemk2

当面は技術的なことしか書かない

多言語プラグイン qTranslate について (第14回デザイン勉強会@赤羽)

うぇぶるじょん
WP コーディング webデザイン word bench千葉

wordpress多言語化をやる + qTranslate

wordpress多言語化とは

サイトを日本語だけでなく英語だとか中国語だとかで表示すること

方法は2つある。

1. 翻訳ツールなどを利用して自動的に翻訳してもらう
2. それぞれの言語用にコンテンツを用意して切り替えて表示するようにする
→WPならどっちでもイケるよ

翻訳ツールなどを利用して自動的に翻訳してもらう

e.g. Translate This Blog Translator
勝手に翻訳してくれる
(まあまあ意味は通じるかもしれないけど残念な翻訳になることがある)

それぞれの言語用にコンテンツを用意して切り替えて表示するようにする

いくつか方法がある

1. ブラウザの言語から表示を変えるプログラムを書く wordpressをプラグインに頼らず多言語化する方法
(プログラミングの技術がないとしんどい)

2. マルチサイトを使う wordpressの標準機能、マルチサイトを利用して、各言語用の子サイトを作る
(比較的開発は楽、プラグインに依存しない。ただし、コンテンツをサイトごとに入れていかないといかんので運用は面倒)

3. 多言語化用のプラグインを使う
無料プラグイン qTranslate(この機能そのものは自動翻訳しないよ)
(ただし無料なのでいつ開発が止まるか分からないし文句言えない)
有料プラグイン WPML
(開発がいきなり止まることは考えづらいけど、初期費用はかかる)

qTranslateでの多言語化に挑戦してみよう

ところが、このプラグインはWordPress3.5に未対応(Last Updated:2012-09-23)
→WordPress3.5に対応さす→フォーラムを調べた
http://wordpress.org/support/topic/qtranslate-broken-after-update-wp-to-35-version

1. 対応バージョンを書き換える

qtranslate.php 90行目

define('QT+SUPPORTED_WP_VERSION', '3.4.2'); // 3.5.0に書き換える

2. qtranslate_javascript.phpを入れ替える

http://pastebin.com/DCWLHqPG

3. 初期設定

デフォルト言語を設定
使用言語を設定
URLを設定 (?lang=en vs /en/ vs http://en.yoursite.comサブドメインの設定がしんどい)
widgetに配置
Edit Language
カテゴリを多言語化

(ここまでやると大抵のブログは設定完了でっせ)

サンプルサイト
http://multilingual-test.webourgeon.net/
http://multilingual-test.webourgeon.net/en

4. qTranslateの独自タグ

テンプレートの中で使ったり、カスタムフィールドなどを言語別に
出力させたりするための独自タグ

カスタムフィールドも[:ja]日本語向けの内容と[:en]英語向けの内容という風に使い分ける必要がある

<?php _e("<--:en-->English Here!!<!--:--><!--:ja-->こっちはん日本語<!--:-->:); ?>
<?php
qtrans_getLanguage();
?>
<? if(qtrans_getLanguage() == 'en') : ?>
// ここに英語で出力さしたいコード
<?php else: ?>
// そうじゃなかったらこれが表示される
<?php endif; ?>

カスタムフィールドやwidgetタイトルを出し分けてみようか

[:ja]言語切り替え[:en]Change Language

'e_'を使うといいんだよ。これがないと動かないよ

<?php echo e_(get_post_meta( $post->ID, 'price', true)); ?>

パンくずも表示できる

WP SiteManager(wordpressCMSとして利用する際に必要な機能を網羅した統合パッケージ)を利用する
特にパラメーターを入れなくても多言語化に対応

お問い合わせも多言語化する
ContactForm7 や TrustForm を掛け合せる

ContactForm7(フォーム追加の際に、言語を選ぶことも出来、エラーも自動で多言語化してくれる。ただしこのままだと動かない)

functions.phpに以下を追加(http://nik.chankov.net/2011/10/21/quick-tip-wordpress-how-to-make-contact-form-7-working-with-qtranslate/)

add_filter('wpcf7_form_action_url', 'wpcf7_action_url');

function wpcf7_action_url(){

    if(function_exists('qtrans_convertURL')){

        return qtrans_convertURL($_SERVER["REQUEST_URI"]);

    }

    return $_SERVER["REQUEST_URI"];

}

タイトルやサイトも多言語化してくれるが、管理画面のタイトルは多言語化されない

あとは応用してくれ。