翻訳サイトを作成するのに有名なbogoというプラグインがありますが、それを利用しているサイトで油断をすると強制的にサイトのトップが英語サイトになる不具合が発生。
経緯
ことの発端は
「トップページが急に英語になった!重大な事態です!」
っていうクライアントからの連絡から始まった。
担当窓口のディレクターややり取りをみていたコーダー他もトップページにアクセスしたら英語になったと大騒ぎ。
ただこの手の話は実は検討が付いていて、Wordpressではサイトの言語設定という枠があり、bogoを利用している場合これの設定によってトップページが強制的にその言語がデフォルトスケールとなりテンプレートなどで言語切り替えをしている箇所が全てその言語に切り替わってしまう仕様があった。
以前も誤操作によって言語が切り替わってしまっていてこちらでbogoの言語管理設定画面からサイトの言語設定を日本語に戻して対処したことがあったので同様の操作を行って動作確認して解決の連絡をいれた。
再発
少しするとまた変わった!なんぞ?!と大騒ぎしているので再度「左メニュー→言語→言語パック」にて日本語がサイトの言語に設定されているのを確認。
ワンチャンキャッシュプラグインによる静的キャッシュが残ってるのかと思いキャッシュを消したがどうにも合点がいかない。
そこでふと「左メニュー→設定→一般」にも「サイトの言語」という枠があったのでそこを確認してみる事に、
するとなんということでしょう、Englishが選択されてる状態じゃありませんか
??と思いつつ日本語を選択して保存ボタンを押下、再度一般画面が表示されるとサイト言語のセレクトボックスはEngishが選択されているまま。。
軽く調べたらフォーラムでおなじ現象で困ってる人を発見。
検証
bogoプラグインを無効化すると問題なく上記の挙動はおこらなかったこと、
一般画面を表示させたとき一瞬で日本語からEnglishにセレクトボックスが切り替わったことからJavascriptがやらかしてると断定。
するとセレクトボックスのIDを参照しているわかりやすいコードを発見
$( function() {
$( 'body.options-general-php select#WPLANG' ).each( function() {
$( this ).find( 'option[selected="selected"]' ).removeAttr( 'selected' );
var val = bogo.defaultLocale || 'en_US';
val = ( 'en_US' == val ? '' : val );
$( this ).find( 'option[value="' + val + '"]' ).first().attr( 'selected', 'selected' );
} );
} );
・・これいる?w
結論
上記をコメントアウトしてアップしたところセレクトボックスが変わっちゃう問題は解決しました。
なお、bogo最新版の5.3.3でも発生しているので、bogoプラグインのバージョンアップしても同じ挙動が起こると思われます。
Wordpressのダウングレードとかプラグインダウングレードとかしなくて結構です。
でもこれbogoプラグインアップデートしたらまた同じ挙動が再発するんだろうな。。頼むぜbogoさんや。