qTranslateの使い方 私見


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の履歴を残すプラグイン開発中)

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL