qTranslateの使い方 私見

Pocket

qTranslateで、よく不可解な挙動を見せるので(編集時に言語を切り替えたときとか)、もっと安心して使えるようにしたい。その対策を講じて現在構築しているサイトがあるので、そのやり方の紹介。日本語と英語を切り替えられるようにする方法。
>> qTranslate ハウツーとハマりどころ
qTranslateを使う目的は

  • 言語の切り替えが簡単で、選択されている言語がわかる
  • 言語別パーマリンクを階層的に作ってくれる (http://hogehoge/moge と http://hogehoge/en/moge とか)

なので、この2点さえ使えれば、あとはtitleやcontentsの保存している怪しい仕掛けはどうでもいい(でもtitle部の保存については問題なかったのでこのまま使う)。

準備

用意するのは、

この記事の通りに、最新版WordPressでも使えるようにする。

設定の仕方

  • qTranslateを設定する
  • Advanced Custom Fieldsで、content_ja(日本語コンテンツ)とcontent_en(英語コンテンツ)の入力欄を作る。
    qTranslate-acf2
    これを翻訳したい全投稿タイプについて
    qTranslate-acf1
  • 本文をこれらのcustom fieldsに入力する
  • the_contentフィルタで言語を切り替える。デフォルト言語を日本語としている設定で、functions.phpに
// 元のtinymceはいらないので隠す
add_action('admin_head', 'hide_tinymce' );
function hide_tinymce()
{
    $post_type = get_current_post_type();
    $hide_in = array('post', 'page', 'event', 'collaboration', 'funding', 'publication');
    if( in_array($post_type, $hide_in) )
    {
?>
<style type="text/css">
    #postdivrich { display:none; }
</style>
<?php
    }
}
// the_content フィルタ
function the_content_replace($text)
{
    global $post;
    $lang = qtrans_getLanguage();
    $content_ja = get_post_meta($post->ID, 'content_ja', true);
    $content_en = get_post_meta($post->ID, 'content_en', true);
    if($lang == 'en' && $content_en != '')
    {
        $text = $content_en;
    }
    else
        $text = $content_ja;
    return $text;
}
add_filter('the_content', 'the_content_replace','9');
// get post meta by lang
function get_post_meta_lang($post_id, $key = '', $single = false)
{
    $lang = qtrans_getLanguage();
    $key2 = $key.'_'.$lang;
    return get_metadata('post', $post_id, $key2, $single);
}

あとは、qTranslateの翻訳で表示が切り替わる。同様にしてさらに多言語化も可能。
タイトルや本文を表示する場合は、必ず the_contentやthe_title(); get_the_title()などを使う。また、ホームのURLは  bloginfo(‘url’) を使うこと。
また、同様にtitleもfilter hookで変えられるし、post metaも get_post_meta_lang()みたいなのを作ってやればできる。
注意したいのは、contentはpost metaに保存されるので、履歴が残らない。(post metaの履歴を残すプラグイン開発中)

Comments on this post

No comments.

Leave a Reply

Your email address will not be published. Required fields are marked *

Trackbacks and Pingbacks on this post

No trackbacks.

TrackBack URL