WordPressが出力するog:localeがen_USになる問題への対処

 暇があればこのブログのソースをのぞいたりしているのですが、よく見るとOGP(Open Graph Protocol)用の属性「og:locale」が「en_US」になっていることに気が付きました。

<meta property="og:locale" content="en_US" />

まあうち程度のブログでは別に大した問題ではないですが気になってしまうと直したくなるのが人間のサガというもの。 このタグは使用しているSEO関連プラグインのどれかで出力されてるんだろうなーと思ってgrepしたらWordbooker(記事の投稿時にFacebookへ投稿するプラグイン)が決めていました。

追記:
Wordbookerの設定をよく見たらOGPタグを出力しない設定がありました。なので以下の方法はなんていうか芋いですww
(Advanced Optionsの[Disable in-line production of OpenGraph Tags])

代わりにOGPタグを出力させるにはいろいろなプラグインがあると思いますが、私はとりあえずHead Cleanerを使っていたのでついでに設定しました。

■wp-content/plugins/wordbooker/wordbooker.php

function wordbooker_get_language() {
	global $q_config;
	$wplang="en_US";
	if (strlen(WPLANG) > 2) {$wplang=WPLANG;}
	if (isset ($q_config["language"])) {
		$x=get_option('qtranslate_locales');
		$wplang=$x[$q_config["language"]];
	}
	if (strlen($wplang)< 5) {$wplang='en_US';}
	if ($wplang=="WPLANG" ) {$wplang="en_US";}
	return $wplang;
}

ちなみにプラグインの設定ページには言語の設定はありません。勝手に決めやがってこのやろう。

で、怒りを抑えつつコードを見てみると$q_configというグローバル変数ありきで実装されています。これはqTlanslateという多言語化プラグインのグローバル変数らしいです。別に多言語化とかするつもりはないので要らないんですが、かといってデフォルトがアメリカ英語だといわれるとPNGのヘッダをShift_JISで読むと「臼NG」になるという欧米のデリカシーのなさを思い出し抵抗したくなったので仕方なくプラグインを導入しました。

導入に際しては以下のページを参考にさせて頂きました。

WordPressプラグイン「qTranslate」でブログを多言語化する | Webクリエイターボックス

そして導入したら日付の表示がバグってしまったのでWordPressで投稿した記事の投稿日が%Y年%m月%d日と表示される問題 | fox3appを参考に設定。

そして、qTranslateの日本語の設定画面で「locale」という項目があるのでここを「ja_JP」にすればWordbookerが正しくog:localeを設定してくれるものの今度は管理画面が英語になってしまう。「ja」にすると日本語に戻る…。

ここでおもむろにwordbooker.phpのコードを見直すと

if (strlen($wplang)< 5) {$wplang='en_US';}

に引っかかってen_USにしてるじゃないですかやだー!

まとめると、qTranslateの設定において

  1. WordPressとしてはlocaleは「ja」でないと管理画面が日本語表示されない。
  2. Wordbookerとしてはlocaleは「ja_JP」でないとog:localeがja_JPにならない。

という具合にハマってしまっています。本来なら上記の2番(wordbooker.php)を直せばいいのですが、プラグインのアップデートが頻繁なのでその都度直すのも面倒くさい。

というわけで1番に対応するためにwp-content/languages/ja.moへja_JP.moという名前のシンボリックを作成することにしました。

wp-content/languages/$ ln -s ja.mo ja_JP.mo

こうするとまた別の問題に波及するかもしれませんが、少なくともWordPressがアップデートされてもリンクは維持されるはずなので今のところの最善手だと思います。

<meta property="og:locale" content="ja_JP" />

無事解決?しかしなんで日本語だけ「ja」なんでしょうねえ。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
QR Code Business Card