<?php

if ( ! defined( 'ABSPATH' ) ) {

    exit;

}



/**

 * プラグインの国際化(i18n)初期化クラス

 *

 * WordPress 標準の翻訳ファイル (.mo) を WordPress の設定言語に従って読み込む。

 * 翻訳機構は WordPress 標準: __( 'text', 'ai-auto-poster' ) を使用。

 *

 * テキストドメイン: 'ai-auto-poster' (プラグインスラッグと一致)

 * 翻訳ファイル: /languages/ai-auto-poster-{locale}.mo

 *

 * 言語切替UIは持たない。WordPress の Settings > General > Site Language

 * またはユーザー個別言語設定 (User > Profile > Language) に従う。

 */

class AIAP_I18n {



    /**

     * テキストドメイン

     */

    const TEXT_DOMAIN = 'ai-auto-poster';



    /**

     * 翻訳補完テーブル (.po/.mo に未登録の新規追加文字列の暫定対応)。

     *

     * 通常は /languages/ai-auto-poster-{locale}.mo に翻訳が入っていれば WordPress

     * 標準の __() が翻訳済み文字列を返す。.mo にエントリが無い場合は msgid (英語)

     * がそのまま返ってくるため、日本語UIで英語が残留する。

     *

     * 本テーブルは .mo に未登録の新規文字列を gettext フィルタ経由で補完する。

     * リリース時に .po/.mo を再生成すれば、本テーブルの英語 msgid に対する翻訳が

     * .mo 側に上書きされ、フィルタは無効化される (副作用なし)。

     */

    private static $supplement = array(

        'ja' => array(

            // 手動投稿ライフサイクル (実行開始/キャンセルログ)

            'Manual run start: (task: %s)'                          => '手動実行開始: (タスク: %s)',

            'Manual run cancelled (by tab close or navigation)'     => '手動実行をキャンセルしました (タブ閉じ / ナビゲーション)',

            '(quick post)'                                          => '(クイック投稿)',

        ),

    );



    /**

     * 翻訳ファイルをロードし、補完テーブルを gettext フィルタに登録する。

     */

    public static function load() {

        load_plugin_textdomain(

            self::TEXT_DOMAIN,

            false,

            dirname( plugin_basename( AIAP_PLUGIN_FILE ) ) . '/languages'

        );

        add_filter( 'gettext', array( __CLASS__, 'filter_gettext' ), 10, 3 );

    }



    /**

     * .mo に未登録の文字列を補完テーブルから返す gettext フィルタ。

     *

     * .mo に登録済み (= $translation !== $text) ならそのまま通す。

     * テキストドメインが本プラグインのもの以外も通す (干渉しない)。

     * 補完が必要な場合のみテーブルから返す。

     *

     * @param string $translation 既存翻訳 (なければ $text と同値)

     * @param string $text        英語 msgid

     * @param string $domain      テキストドメイン

     * @return string

     */

    public static function filter_gettext( $translation, $text, $domain ) {

        if ( $domain !== self::TEXT_DOMAIN ) {

            return $translation;

        }

        if ( $translation !== $text ) {

            // 既に .mo で翻訳済み → そのまま返す (.mo 優先)

            return $translation;

        }

        $locale = function_exists( 'determine_locale' ) ? determine_locale() : ( function_exists( 'get_locale' ) ? get_locale() : 'en_US' );

        // 'ja' / 'ja_JP' 等のロケールを 'ja' で正規化

        $lang = substr( (string) $locale, 0, 2 );

        if ( isset( self::$supplement[ $lang ][ $text ] ) ) {

            return self::$supplement[ $lang ][ $text ];

        }

        return $translation;

    }

}

