WordPress のローカル言語を変更する際に知っておくべきこと

Categories WordPress

WordPress 4.0 より WPLANG 定数の使用は推奨されなくなりました。言語の設定は、管理画面の 「設定」 > 「一般」 > 「サイトの言語」から行うようにしてください。(2014/9/5 追記)


管理画面以外を英語表示にするカスタマイズ方法として wp-config.php に以下のような記述を行っている例を見かけます。

if ( defined('WP_ADMIN') )
    define('WPLANG', 'ja');
else
    define('WPLANG', 'en_US');

上記のコード自体に問題があるわけではありませんが、管理画面以外で「日本語翻訳表示を行わせないだけ」のつもりでこのような設定を行うと予期せぬ2つの問題を招くことになります。

WPLANG または get_locale() の返り値を変更すると何が起こるか

1. 翻訳ファイルから読み込まれるオプション値が変更される可能性がある

WordPress 3.4 以降、言語に依存するコア機能の挙動を決めるオプション値が翻訳ファイルの中に保持されるようになりました。例えば、日本語版 WordPress の言語設定を ja から en_US に変更した場合、日本語翻訳ファイルがシステムに読み込まれなくなることで、文字列カウント方式を決めるオプション値は日本語ユーザー向けの characters(文字数ベース)から英語ユーザー向けの words(単語数ベース)に切り替わります。この場合、日本語環境における投稿抜粋や投稿エディターの文字数表示は正しく機能しなくなってしまいます。詳しくは WP Multibyte Patch 1.6.1 を参照してください。なお、バージョン 1.6 以降の WP Multibyte Patch の機能を利用して文字列カウント方式を characters(文字数ベース)に固定することが可能です(後述)。

2. 言語設定を見て挙動を変える本体、テーマ、プラグインの機能に影響を及ぼす

言語設定を ja から en_US にした場合の挙動変化の例:

  • <language>en-US</language> のように出力されるようになる(RSS フィード)
  • WordPress の更新で日本語版が表示されなくなる(管理画面)
  • <html dir="ltr" lang="en-US"> のように出力されるようになる(Twenty Eleven)
  • WP Multibyte Patch の日本語環境向け機能が読み込まれなくなる(メール、検索、抜粋関連の機能など)

日本語環境用の機能を残したまま日本語翻訳だけを行わせない方法

ここまでの説明で言語設定の変更が単なる翻訳表示の変更ではなく機能にも影響を及ぼすものであることがわかったと思います。したがって、やりたいことが「日本語翻訳表示を行わせないだけ」で日本語環境用の機能は残したい場合には、言語設定は ja のままで、日本語翻訳ファイルだけを読み込ませなくする(デフォルトの英語表示にする)のが適切なアプローチとなります。以下にその設定方法を示します。

まず wp-config.php のローカル言語設定が ja となっていることを確認してください。

define('WPLANG', 'ja');

次に WP Multibyte Patch の設定ファイル wpmp-config.php を開き、末尾に用途にあった以下いずれかの一行を追加してください。

// 管理画面では日本語翻訳表示を行い、その他ではデフォルトの英語表示にする場合
add_filter('override_load_textdomain', create_function('', 'return !is_admin();'));
// すべてデフォルトの英語表示にする場合
add_filter('override_load_textdomain', '__return_true');
// 管理画面ではデフォルトの英語表示、その他では日本語翻訳表示を行う場合
add_filter('override_load_textdomain', 'is_admin');

最後に wpmp-config.php で文字列カウント方式を文字数ベースに固定する機能が有効(true)となっていることを確認してください。

$wpmp_conf['patch_force_character_count'] = true;

以上です。

上記の翻訳ファイルを読み込ませないコードは独自プラグインに記述しても構いません。その場合 WP Multibyte Patch 1.6.1 以上では、文字列カウント方式を文字数ベースに固定する機能がデフォルトで有効となっていますので wpmp-config.php の利用は必須ではありません。

まとめ

当ブログでも管理画面以外で日本語翻訳ファイルを読み込ませない設定を行っています。デザインやサイト利用者の層によっては、デフォルトの英語表示の方が適している場合もあるでしょう。また、重い翻訳ファイルを読み込ませないことでシステムの負荷を軽減できるメリットもあります。しかしながら、WordPress コアの開発は今後、より言語設定重視の方向へシフトしていくことが予想されますので、言語・翻訳まわりをカスタマイズする時には注意が必要です。

8 thoughts on “WordPress のローカル言語を変更する際に知っておくべきこと

  1. 翻訳系をしてまして、まさに  lang=”en-US” が 出て焦りまくりました。
    とても判りやすく感謝です

  2. 日本語版 WordPress を使っていますが、管理画面やプラグイン設定の日本語翻訳表示は、私にはとてもわかりにくくて、できれば英語表示に変えたい、と思って検索しているうちにこちらのページにたどり着きました。

    WP Multibyte Patch 1.8 の主な変更点の中に、

    load_textdomain() ではなく load_plugin_textdomain() で翻訳ファイルを読み込むようにした。

    とありますが、英語表示にするために wpmp-config.php に追加するコード、

    add_filter(‘override_load_textdomain’, ‘is_admin’);

    の load_textdomain の部分を単純に load_plugin_textdomain に入れ替えれば良いのでしょうか?

    これで、プラグインを含めて管理画面が全て英語表示になりますか?
    どうぞよろしくお願いします。

    1. そこを入れ替える必要はありません。

      add_filter('override_load_textdomain', 'is_admin');

      のままで希望される挙動になるはずです。

  3. 倉石さん
    お元気ですね あなたの発明した WordPress の plugins.
    は台湾の繁体中文を支持してくれますか.
    もし支持してくれるなら私のその設定にどうすれば良いか.
    その方法を教えてくればとてもありがたいと思います.

    私は 曾 です

  4. 曾さん、こんにちは。繁体中文環境でどのようなことでお困りですか? WP Multibyte Patch の機能で使用したいものがある場合は教えてください。

    1. お返事ありがとうございます
      中国語と日本語の字元数
      が少ないので(Mutibyte Patch)を中文繁体字に運用してもいいですか?
      例えばあなたの作品の wpmp-config-sample-ja.php を wpmp-config-sample-zh_TW.php にコピーできますか?
      あるいはどう直したらこの英文との(Wp Mutibyte Patch) 問題が運用できますか
      ありがとうございます
      さようなら
      曾より

      1. 管理画面のサイトの言語設定が「繁體中文」なのであれば、wp-content ディレクトリの下に wpmp-config.php という名前のテキストファイルを置き、以下のような記述をすれば投稿抜粋の文字数を変更できると思います。

        <?php
        $wpmp_conf['excerpt_mblength'] = 110;

Comments are closed.