wordpressのupdate_option(‘WPLANG’, ‘en_US’)はfalseを返す
より正確には該当する翻訳ファイルが存在しない言語はWPLANGに設定できない
wordpress3.8のマルチサイト環境で言語に基づいたブログの新規セットアップ部分の開発を行っている。大まかには、
- register画面へ遷移するリンクのカスタマイズ
- ランタイム上でlocaleの変更
- GET引数から言語設定値を取得 → セッションに格納
- 言語情報をsignupメタデータに保存
- アクティベーション処理でWPLANGを更新
という流れになる。本エントリーは、箇条書きの最後の項目内のWPLANGのupdate処理についてである。
wordpress3.8日本語版を利用して開発を行っている。日本語版をインストールすると標準で日本語と英語を管理画面から選択できる状態になる。また、デフォルトの設定は日本語になるので、ユーザー登録画面も日本語になる。
上記箇条書きの方法で言語情報をブログの新規セットアッププロセス内で引き継いで最終的にWPLANGの言語値とすることで英語(en_US)やスペイン語(es_ES)なども標準の言語に設定できるようにしようとしている。
ところが、en_USの場合以下の方法でwp_options(正確にはwp_n_options)テーブルのWPLANGを更新しようとしても更新することはできない。
$r = update_option('WPLANG', 'en_US'); // $rはfalse
上のコードは$rにfalseが返される。
WPLANGには、設定する言語パックがインストールされていないとfalseが返される。具体的には、
wp-content\languages
に設定したい言語パックが無いとfalseが返される。逆に上の階層に言語パックがあればその言語としてブログをセットアップできる。ただし、en_USの言語パックは存在しない。wordpressの言語キーがen_USだからというのがその理由と判断している。
実際に、es_ES(スペイン語)の言語ファイルをインストールして以下のコードで試したらアップデートできた。
$r = update_option('WPLANG', 'es_ES');
$rにはtrueが返された。
en_USの設定方法
en_USを指定する場合には、以下の方法で対応可能になっている。
$r = update_option('WPLANG', '');
空の値を設定すればデータベース上では空としてアップデートされる。また、WPLANGが空の場合には英語(en_US)で表示されるようになる。
en_USの言語パックは存在しないようだが、HTMLの言語キーとして英語が設定されている。wordpress日本語版やその他の言語のwordpressは、en_USを言語キーとして自身の言語ファイルから翻訳データを参照している。
そのため、en_USを中心に考えながら開発を行ったほうがシンプルになると思う。