WordPressで管理画面の表示言語を変えるプラグインを作ってみた

WordPressで表示する言語を指定するのは、wp-config.phpの WPLANG ですが、英語や中国語のサイトを作成する際、この設定はどのようにしていますか?

ja にして、テーマのlangは直書きにしてしまう or 管理画面は指定言語もしくは英語で我慢する、いずれかのパターンが多いと思いますが、他言語のサイトであっても、私のように外国語は苦手なので、管理画面は日本語にしたいと思う方も沢山いるはず・・・ですよね?ね?

一応、Admin Languageというプラグインがあって、ユーザー毎に管理画面の表示言語を指定でき便利そうなのですが、WP Multibyte Patch と競合したり、日本語リソースファイルを認識しなかったり、マルチサイト用の言語リソースを誤認識したりと、出来が今ひとつだったりします。

そんなこんなで、一般設定で管理画面の表示言語を指定できるようにするプラグインを作ってみました。

CODE 1をphpファイルとして、plugin ディレクトリに置いて、プラグインの有効化すれば、一般設定に管理画面言語という項目が追加されるので、言語コードを入力してもらえれば、管理画面画面のみ表示言語を切り替えられます。

※ テーマのfunctions.phpへの記述では、残念なことにfunctions.phpの読み込みが、言語リソース読み込みのタイミングより遅いため機能しません。
※ 本当は、プルダウンでの選択の方が便利なのですが、存在する言語リソースの調査が大変だったため(要は面倒だったので)、入力式にしてあります。

CODE 1

<?php
/*
Plugin Name: Admin language Custom
Description: 管理画面をWPLANGで指定した以外の言語で表示できるようにします。
Author: Hitoshi Omagari
Version: 1.0
*/

// 管理画面に言語入力項目を追加する
function add_admin_language_field() {
	add_settings_field( 'admin_language', '管理画面言語', 'admin_language_field', 'general', 'default', array( 'label_for' => 'admin_language' ) );
}
add_action( 'admin_init', 'add_admin_language_field' );


// 言語入力フォームの表示
function admin_language_field( $args ) {
	$admin_language = get_option( 'admin_language' );
?>
	<input type="text" name="admin_language" id="admin_language" size="10" value="<?php echo esc_html( $admin_language ); ?>" />
<?php
}


// 言語入力項目を許可項目として追加する
function add_admin_language_option( $whitelist_options ) {
	$whitelist_options['general'][] = 'admin_language';
	return $whitelist_options;
}
add_filter( 'whitelist_options', 'add_admin_language_option' );


// 管理画面の場合は、言語設定を管理画面で設定した項目にする
function admin_language( $locale ) {
	if ( is_admin() && $admin_language = get_option( 'admin_language' ) ) {
		$locale = $admin_language;
	}
	return $locale;
}
add_filter( 'locale', 'admin_language' );

WP Total Hacks の次バージョンにでもこの機能実装してくれないかなー。 [壁]д=) ジー

[2011.06.03 追記]
やっぱり入力はプルダウンの方が間違いないし、入力の手間もなくて便利なんで何らか手はないかなーと思っていたところ、Contact Form 7 の wpcf7_l10n 関数に言語コードががっつり書かれているのを発見!これをパk‥使わせていただこう(GPLバンザイ)かと思って調整していたところ、よくよく考えてみたら、マルチサイトでの表示言語設定部分をそのまま使えば、インストールされている言語のみ表示できるということに(ようやく)気がつきました。

で、プルダウン版は下記 CODE 2になります。

CODE 2

<?php
/*
Plugin Name: Admin language Custom
Description: 管理画面とブログを別の言語で表示できるようにします。
Author: Hitoshi Omagari
Version: 1.1
*/

// 管理画面に言語入力項目を追加する
function add_admin_language_field() {
	add_settings_field( 'admin_language', '管理画面言語', 'admin_language_field', 'general', 'default', array( 'label_for' => 'admin_language' ) );
}
add_action( 'admin_init', 'add_admin_language_field' );


// 言語入力フォームの表示
function admin_language_field( $args ) {
	if ( ! is_multisite() ) {
		require_once( ABSPATH . '/wp-admin/includes/ms.php' );
	}
	$admin_language = get_option( 'admin_language' );
	$languages = get_available_languages();
?>

<select name="admin_language">
	<?php mu_dropdown_languages( $languages, $admin_language ); ?>

</select>
<?php
}


// 言語入力項目を許可項目として追加する
function add_admin_language_option( $whitelist_options ) {
	$whitelist_options['general'][] = 'admin_language';
	return $whitelist_options;
}
add_filter( 'whitelist_options', 'add_admin_language_option' );


// 管理画面の場合は、言語設定を管理画面で設定した項目にする
function admin_language( $locale ) {
	if ( is_admin() ) {
		$admin_language = get_option( 'admin_language' );
		if ( $admin_language !== false ) {
			$locale = $admin_language;
		}
	}
	return $locale;
}
add_filter( 'locale', 'admin_language' );

WP Total Hacks での実装に一歩近づいた気がする。 [壁]д=) ジー

あ、あと、自分のコード記法がContact Form 7 と似ていて、ちょっぴりうれしかった。むふり。

「WordPressで管理画面の表示言語を変えるプラグインを作ってみた」への3件のフィードバック

  1. Toruさん、情報ありがとうございます。

    自分で作ったりコード追っちゃうので、どうしても既存のプラグインとか疎くなるんですよね。見てみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です