WordPress: 現在のロケールを取得する関数

WordPressで現在のロケールを確認する方法を調べてみました。

get_locale()

現在のロケールを取得するときは、get_locale()関数を使用します。

  • <p>現在のロケール:<?php echo get_locale(); ?></p>
AFFS Simple Code Viewer
Copy

get_locale()関数は、次の優先順位で現在のロケールを決定します。

  1. localeフィルターの結果
    get_locale()関数内で②③④の優先順でロケール名を決定した後、localeフィルターにロケール名が渡され、その結果がリターンされます。

    ロケール名を強制的に統一したいときなどに、このフィルターを使用します。

    • add_filter( 'locale' , 'my_locale' );
    • function my_locale( $locale ){
    • return 'ja'; // 'ja' に強制
    • }
    AFFS Simple Code Viewer
    Copy
  2. 一般設定のサイトの言語で指定されているロケールの名前

    管理画面で設定した値ですね。

    wordpress サイトの言語

    この画面で設定した値は、データベースのoptionテーブルに登録されていて、次のコードで取得できます。

    • $db_locale = get_option( 'WPLANG' );
    AFFS Simple Code Viewer
    Copy
  3. 定数WPLANGの値

    定数WPLANGは、デフォルトでは定義されていません。
    定数を使用する必要があるなら、次のように定義します。

    • if( ! defined( 'WPLANG' ) ) {
    • define( 'WPLANG', 'ja' );
    • }
    AFFS Simple Code Viewer
    Copy

    なお、get_locale()関数はテーマのfunction.phpやプラグインコードが実行される前に、数回呼び出されます。
    全てのget_locale()関数実行結果に影響を与えたいときは、wp-config.phpに記述しましょう。

  4. グローバル変数$wp_local_packageの値

    英語版?のWordPressには、この変数は定義されていません。
    5.9.3-jaなどの他言語版?をインストールすると、/wp-includes/version.php に記述されています。

ほぼ①と②で決定されます。
②③④で値が取得できない場合、'en_US'が規定値となります。

get_user_locale( $user_id = 0 )

WordPressはユーザーごとにロケールを設定できます。

wordpress ユーザーの言語

get_user_locale()関数は、ユーザーIDを引数として受け取り、ユーザー管理画面で指定されているロケールの名前を取得します。
引数が省略された場合、カレントユーザーが適用されます。

次のコードは、ログインしているかどうか確認して、ログインユーザーの情報を表示しています。

  • <?php
  • if( is_user_logged_in() ){
  • $name = wp_get_current_user()->display_name;
  • $locale = get_user_locale();
  • echo "<p>{$name}がログインしています</p>";
  • echo "<p>{$name}のロケール:{$locale}</p>";
  • }
  • ?>
AFFS Simple Code Viewer
Copy

determine_locale()

determine_locale()関数は、URLのクエリで指定されているロケールの名前を取得します。

この関数の結果は、次の優先順位で決定されます。

  1. pre_determine_localeフィルターの結果
    関数の最初のコードでpre_determine_localeフィルターが実行されます。
    初期値はnullです。
    フィルターが文字列を返すと、その値を関数の実行結果として終了です。

    • add_filter( 'pre_determine_locale' , 'my_pre_determine_locale' );
    • function my_pre_determine_locale( $locale ){
    • return 'ja'; // 'ja' に強制
    • }
    AFFS Simple Code Viewer
    Copy
  2. determine_localeフィルターの結果
    関数の最後でdetermine_localeフィルターが実行されます。
    初期値は関数内で求められたロケールです。
    フィルターが文字列を返すと、その値を関数の実行結果として終了です。

    • add_filter( 'determine_locale' , 'my_determine_locale' );
    • function my_determine_locale( $locale ){
    • return 'ja'; // 'ja' に強制
    • }
    AFFS Simple Code Viewer
    Copy
  3. ログイン画面(wp-login.php)表示時に、URLにwp_langクエリが指定されている

    wp_langクエリの値が、関数の結果となります。

    例えば、ログインページを次のようなURLで開くと、英語で表示されます。

    https://ドメイン名/wp-login?wp_lang=en_US

    ※wp_langクエリがない場合、wp_langクッキーが確認されます。

  4. ブラウザがJSONをリクエストしていて、_localeクエリが指定されていて、クエリの値が'user'
    get_user_locale()関数の結果が返ります。
  5. 管理画面のとき
    get_user_locale()関数の結果が返ります。
  6. いずれも当てはまらないとき
    get_locale()関数の結果が返ります。

使う機会は、あまりなさそうです・・・