Googleの翻訳APIを使ってWordPressを自動的に多言語化する

WordPressを翻訳するプラグインは、便利なものがいくつかあります。

例えば、

Google Language Translator

こちらの記事に、とてもわかりやすく紹介してありました。

ポイントとしては、GoogleのAPIを使って、自動的に翻訳をするということ。

Google Language Translator – 自動翻訳ツールを利用できるWordPressプラグイン

 

Jetpack

Jetpackにも、Google翻訳の機能があります。

JetpackプラグインのGoogle翻訳ウィジェットを使ってWebサイトを翻訳できるようにする

 

これらに共通していることは、Googleと通信をして、オンデマンドで英語に翻訳をして行くということです。

もちろん、「ぱぱっと翻訳対応したい」ということであれば、かなり理にかなっています。

また、コンテンツやタイトル部分だけでなく、全体を翻訳してくれるので、非常に効率がいいです。

 

一方、「多言語データを入力できる」というプラグインもあります。

 

qTranslate

こちらは、インストールすると、言語フィールドが追加されて、翻訳テキストを追加して行くことができます。

柔軟に翻訳テキストを調整できるので、Googleの翻訳だと、ネイティブにとってはちょっと・・という場合も、専門の翻訳家に依頼したデータを利用することができるので、本格サイトに向いています。

WordPressプラグイン「qTranslate」でブログを多言語化する

ネックとしては、「翻訳データを用意する必要がある」という部分です。

 

Google翻訳の恩恵を受けながら、専門家の調整もできるようにできないか・・

というのが、今回の主旨でした。

 

Googleの翻訳データを取得して、
カスタムフィールドに保存する

まず、動作イメージです。

Googleの翻訳API を使って取得したJSONデータを、WordPressのカスタムフィールドに保存して行っています。

 

GoogleAPIの取得

GoogleのAPIコンソールから、翻訳APIのキーを取得します。

https://cloud.google.com/translate/

利用規約を見ると、safariでは自動翻訳されないので、英語の利用規約を見ることになりました。

ここも翻訳しておいて欲しい・・・。

とはいえ、書かれていることは、最初のページの右にあるものです。

無料トライアルを利用できます的な。

 

APIキーを取得したら、それを使ってWordPressのコンテンツを翻訳していきます。

 


API取得用のURLを作成

function get_translate_url($key){
 
 $_translate = array();
 $_translate['url'] = 'https://www.googleapis.com/language/translate/v2?';
 $_translate['key'] = $key;
 $_translate['source'] = 'ja';
 $_translate['target'] = 'en';
 $base_url = $_translate['url'];
 $base_url .= 'key='.$_translate['key'];
 $base_url .= '&source='.$_translate['source'];
 $base_url .= '&target='.$_translate['target'];
 return $base_url;
}
//結構無駄な処理も書いてあるので、重複しているのが気になる場合は除去を。

 

WordPressのコンテンツを分解して取得

 $_en_content = '';//初期化

 $base_url = get_translate_url($translate_opt['translate_key']); 
 $preg_content = wpautop( $content );
 $preg_content_line = explode( '</p>' , $preg_content ); //とりあえず段落ごとに分解

 foreach($preg_content_line as $line){
 $line_text = html_entity_decode($line);

 $url = $base_url . '&q='.urlencode($line_text); //翻訳URLを生成
 
//APIから返ってきたデータを処理
 $resjson = file_get_contents(strval($url));
 $resjson = mb_convert_encoding($resjson, 'UTF-8', 'auto');
 $resarray = json_decode($resjson);
 $result = $resarray->data->translations[0]->translatedText;
 
 $_en_content .= $result;
 }

これで、$_en_content に翻訳データが格納されるので、

それを、WordPressのカスタムフィールドに戻してあげれば、翻訳を保存することができます。

 

やっていることはシンプルだけれど、効果としては絶大。

あとは、表示側を整えれば、翻訳サイトの出来上がり。

 

全て、1つのプラグインにまとめたので、

インストールして有効化するだけで、翻訳サイトを作れるようにしました。

 

今後の制作では、この翻訳対応も入れられそうです。