WordPressをBogoで多言語化する

英語で作ったサイトの日本語版を作るためにBogoというプラグインを導入した。サイトの多言語を実現するプラグインはいくつもあるけど、Bogoが一番単純なつくりになっている。設定項目もほとんどない。ただし、Bogoはカテゴリやタグなどの多言語化ができないので、それでは困る人はPolylangがいいと思う。

Bogoを導入する際にはまったのが、サイトの言語を日本語に設定したままコンテンツを英語で作っていたこと。そこにBogoを導入した結果、コンテンツが日本語扱いされて、英語を英語に翻訳することしかできなくなった。メインを英語にしたいのなら、サイトの言語は最初から英語に設定するように。こんなはまり方をしたのは僕だけだろうな。

さて、Bogoは言語スイッチャーのウィジェットを提供しているので、それを配置すれば言語を切り替えられるようになるが、大げさすぎるのでもう少しさりげないスイッチャーを作りたい。

ウィンドウの右下隅に言語スイッチャーを配置する

ウィンドウのフッタの行の右端にさりげなく言語スイッチャーを表示したい。そのためにまず、footer.php<div class="site-info">のところに[bogo]というショートコードを出力するコードを追加する。

            <div class="site-info">  
                <?php  
                    printf(__("&copy; %d RoundWide Systems"), date("Y"));  
                ?>  
                <?php echo do_shortcode('[bogo]'); ?>  
            </div><!-- .site-info -->  

それからCSSで右端に移動させる。

.site-info {  
    position: relative;  
    width: 100%;  
}  

.site-info .bogo-language-switcher {  
    position: absolute;  
    top: 0;  
    right: 0;  
}  

言語スイッチャーの国旗を消す

言語スイッチャーには各言語の国旗が表示されるけど、いらないので消す。function.phpに以下のフィルタ設定を入れる。

add_filter('bogo_use_flags','bogo_use_flags_false');  
function bogo_use_flags_false() {  
    return false;  
}  

フィルタでいらないものを消す

出力されるショートコード全体を加工できるbogo_language_switcherというフィルターが用意されているので、それを利用すればなんでも加工できる。

English (United States)をEnglishにする

英語としてen_USを選択すると言語スイッチャーにEnglish (United States)と表示される。en_GBと区別する気がないなら(United States)は不要なので、function.phpに以下のフィルタ設定を入れると削除できる。

add_filter( 'bogo_language_switcher', 'replace_bogo_text');  
function replace_bogo_text($output) {  
    return str_replace(' (United States)','',$output);  
}  

選択できる言語だけ表示する

言語スイッチャーには選択できない言語のラベルも表示される。選択できる言語だけを表示するには、<li>English</li>のように言語名にリンクが張られていない<li></li>をすべて削除する。それには上のフィルタのreturnの前に以下の行を挿入すればよい。

    $output = preg_replace('/<li[^>]*>[^<]*<\/li>/', '', $output);  

Bogoの言語スイッチャーのカスタマイズについて検索するといろいろ出てくるけど、プログラムを書ける人なら、このフィルターで加工するのが、できることの範囲が広い上に楽なのでお勧めである。