注意!! この投稿は4年と3ヶ月くらい前に公開したものです。
そのため正常に動作しないかもしれないので、ご注意ください。

WordPress 4.0で追加された言語選択機能の仕組みの説明の紹介

WordPress 4.0で追加された言語選択機能の簡単な説明がMake WordPress CoreのWordPress › Language chooser in 4.0にあったので抄訳でご紹介。


英語版のWordPressのインストール時、最初に言語選択の画面が表示されるようになりました(日本語版では表示されません)。

WordPress_Setup_Configuration_File

以降はWordPress › Language chooser in 4.0の抄訳です。

最初の画面で言語を選択すると、WordPressはオンザフライで言語パックをダウンロードし、インストールします。そして残りのインストールプロセスは選択した言語で行われます。

サマリー

これを可能にするため、ヘルパー関数をいくつか導入し、既存の関数を変更しました。

translations_api()plugins_api() / themes_api() をベースをしたもので、WordPress Translation APIから翻訳を取得します。最初の引き数 $type はコア、テーマ、プラグインのいずれかでなくてはなりません。$args は追加の引き数として使われます。例えば、 $args['version'] はすべてのタイプで指定する必要があります。 themeplugin のタイプでは slug もセットします。

wp_get_available_translations() 関数はtranslations_api() のラッパーで、インストールしているバージョンのコアの翻訳を返します。 API 結果 は3時間キャッシュされます。

言語が選択され、「続ける」ボタンがクリックされるとWordPressはその言語パックをバックグラウンドでダウンロードします。wp_download_language_pack()Automatic_Upgrader_SkinLanguage_Pack_Upgraderの助けを借りてこの作業を実施します。

翻訳はオンザフライでインストールされるので既存のload_default_textdomain() 関数を拡張する必要がありました。デフォルトの翻訳をスイッチできるようにするためのオプションの $locale パラメータをサポートするようになりました ([29630])。

WPLANGオプションがシングルサイトでもセットされるようになり、アップグレード時にWPLANG定数の値をもとに追加されます(この定数は非推奨(廃止予定)になりました – 参照[29630])。get_locale() はグローバルの$wp_local_package 変数を含むようになり(ローカライズ版パッケージで使われます)、空のWPLANGオプションen_US同等なので、既存で空のWPLANGオプションはWPLANG定数をオーバーライドできます。

同一言語の別種版(例えば、en, en_GB, en_CAen_AU)をサポートしていないなどの多くの問題のあった mu_dropdown_languages()wp_dropdown_languages() に置き換えられました。新しいドロップダウンは translation APIによって追加されます。

非同期の翻訳アップデート

WordPress 3.7ではLanguage_Pack_Upgrader::async_upgrade()を導入しました。非同期翻訳アップデートはテーマやプラグインのインストール後もしくはアップデート後に実行されます。非同期アップデートの目的ななんでしょう? テーマやプラグインをインストールもしくはアップデートした時、そのテーマやプラグインの翻訳もアップデートされると期待するでしょう。しかし、古くなった翻訳はすべてここでアップデートされます(プラグインやテーマがすでに最新であっても)。それはファイルシステムの接続があるということ(それはユーザーがFTP情報を入力したからかもしれません)を最大限活用するためでした。

WordPress 4.0ではこの非同期アップデートはバージョンコントロールされたインストールでは実行されなくなります。とはいえ、 async_update_translationフィルター( auto_update_translation フィルターとまったく同じ)を使ってこれを無効にすることもできます( [29694]を参照)。

1
2
3
// 非同期で自動のバックグラウンドでの翻訳のアップデートを無効にする
add_filter( 'async_update_translation', '__return_false' );
add_filter( 'auto_update_translation', '__return_false' );

その他

  • ローカライズ版のパッケージでは言語選択はスキップします(参照 [29705])。
  • BC(訳注???)ではWPLANG定数で指定された言語を選択可能です(インストールされません)( [29691]を参照)。
  • シングルサイトでもサイト言語のオプションが一般設定に含まれるようになりました。
  • wp-config-sample.php からWPLANGセクションが取り除かれました
  • インストール時、アクセス情報の入力なしでファイルシステムにアクセスできなければ言語選択はスキップされます(参照 [29673])。
  • 4.1での予定は#29395をチェックしてみてください。