Plugin Directory

Changeset 3691577


Ignore:
Timestamp:
09/11/2026 02:35:30 PM (6 weeks ago)
Author:
hippogo50
Message:

Version 0.9.4: fix minor bugs related to language handling

Location:
transer-translate/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • transer-translate/trunk/readme.txt

    r3687158 r3691577  
    55Tested up to: 7.0
    66Requires PHP: 7.4
    7 Stable tag: 0.9.3
     7Stable tag: 0.9.4
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    116116== Changelog ==
    117117
     118= 0.9.4 =
     119* Minor bug fixes.
     120* 軽微な不具合を修正しました。
     121
    118122= 0.9.3 =
    119123* Fixed an issue where visiting a URL with a language prefix that wasn't one of your contracted languages (e.g. `/fr/` when only English is contracted) could show a "page not found" error instead of the original page.
    … …  
    161165== Upgrade Notice ==
    162166
     167= 0.9.4 =
     168Minor bug fixes. / 軽微な不具合を修正しました。
     169
    163170= 0.9.3 =
    164171Fixes a "page not found" error that could occur with certain language-prefixed URLs. / 特定の言語プレフィックス付きURLで、ページが見つからないエラーになる不具合を修正しました。
  • transer-translate/trunk/transer-translate.php

    r3687158 r3691577  
    44 * Plugin URI:        https://www.transer.io/
    55 * Description:       Translates the whole page server-side and adds multilingual SEO tags and a language switcher automatically. Translations can be corrected directly on the translated page.
    6  * Version:           0.9.3
     6 * Version:           0.9.4
    77 * Requires at least: 5.8
    88 * Requires PHP:      7.4
    … …  
    1818}
    1919
    20 define('TRANSER_TRANSLATE_VERSION', '0.9.0');
     20define('TRANSER_TRANSLATE_VERSION', '0.9.3');
    2121define('TRANSER_TRANSLATE_OPTION_KEY', 'transer_translate_settings');
    2222define('TRANSER_TRANSLATE_COOKIE_NAME', 'transer_lang');
    2323
    2424/**
    25  * 管理画面の表示言語を、WordPressの言語設定に合わせる。
     25 * 【重要】管理画面の表示言語は、WordPressが自動的に、Text Domain・
     26 * Domain Pathヘッダー(このファイル冒頭)だけを見て処理する想定だが、
     27 * WordPress 6.7以降の「just-in-time」翻訳読み込みの仕組みには、
     28 * プラグイン自身のlanguages/フォルダに同梱した.moファイルが、
     29 * 正しく読み込まれない既知の不具合が、複数、報告されている
     30 * (WordPress.org公式サポートフォーラムでも、同種の報告が多数あり、
     31 * 実際にDescriptionの翻訳が反映されない不具合として確認された)。
    2632 *
    2733 * languages/ に同梱しているのは ja・zh_CN・zh_TW・ko の4言語。
    2834 * それ以外のロケールでは翻訳ファイルが見つからないため、
    2935 * ソース中の英語(msgid)がそのまま表示される。
     36 *
     37 * 対策として、WordPressの自動読み込みが効かなかった場合に備え、
     38 * load_textdomain() を使って、同梱の.moファイルを直接、明示的に
     39 * 読み込むフォールバックを用意する(自動読み込みが正しく機能した
     40 * 場合は、この処理は何もしない)。
    3041 */
    31 add_action('init', function () {
    32     load_plugin_textdomain(
    33         'transer-translate',
    34         false,
    35         dirname(plugin_basename(__FILE__)) . '/languages'
    36     );
    37 });
     42add_action('plugins_loaded', function () {
     43    if (is_textdomain_loaded('transer-translate')) {
     44        return; // 既に読み込み済み(自動読み込みが正しく機能した)なら、何もしない
     45    }
     46    $locale = determine_locale();
     47    $mofile = plugin_dir_path(__FILE__) . 'languages/transer-translate-' . $locale . '.mo';
     48    if (file_exists($mofile)) {
     49        load_textdomain('transer-translate', $mofile);
     50    }
     51}, 1);
    3852
    3953function transer_translate_get_option($key, $default = '') {
    … …  
    720734    $contract_langs = transer_translate_get_option('contract_langs', array());
    721735
    722     // 【重要】strip_lang_prefix()と同じ考え方。「全言語翻訳オプション」が
    723     // 有効な場合、契約言語一覧だけでなく、対応する全言語コードも、
    724     // 翻訳を許可する対象に含める(実際に依頼された対応)。
    725     $all_langs_enabled = transer_translate_get_option('all_langs_enabled', false);
     736    // 【重要・仕様変更】以前は transer_translate_get_option('all_langs_enabled', false)
     737    // で、WordPress側に保存された(=設定画面で「変更を保存」を押した時点の)値を
     738    // 見ていたが、これだと、transer.io側(TransDataデータベースのdictionary.alllang)
     739    // で全言語オプションを切り替えても、この設定画面で「変更を保存」を押すまで、
     740    // 反映されないという課題があった(実際に指摘・確認された)。
     741    //
     742    // 実際に翻訳して良いかどうかの最終判定は、常にtranslate.service側
     743    // (app.py)が、その場でTransDataデータベースを直接参照して行っており
     744    // (WordPress側の自己申告は一切信用しない設計)、courseの安全性・
     745    // 課金の正確性は、この設定の値に関わらず、常に確保されている。
     746    // そのため、ここでは常にtrueとして扱い、「保存を忘れる」という
     747    // 運用上のリスク自体を無くす(実際に依頼された対応)。
     748    $all_langs_enabled = true;
    726749    if ($all_langs_enabled) {
    727750        $all_lang_codes = transer_translate_get_option('all_lang_codes', array());
    … …  
    939962        return;
    940963    }
    941    
    942    
    943     if (transer_translate_should_process()) {
    944         return;
    945     }
     964
     965    /*
     966     * 【重要・不具合修正】以前は、transer_translate_should_process()が
     967     * trueを返す(=翻訳される)場合はここで早期returnし、翻訳される
     968     * ページ側(buffer_callback内)でだけlangbox.jsを注入する、という
     969     * 住み分けにしていた。
     970     *
     971     * しかし、should_process()はWordPress側に保存された、契約言語・
     972     * 全言語オプションの設定を見て判定するため、ダッシュボード側
     973     * (transer.io、実際にはTransDataデータベース)で設定を変更した
     974     * 直後は、WordPress側の設定を「保存」し直すまで、値が古いまま
     975     * 残ってしまう。この結果、「実際には翻訳されない設定に変わって
     976     * いるのに、should_process()は"翻訳される"と誤って判定し続け、
     977     * ここでの早期returnにより、原文ページに言語ボックス自体が
     978     * 一切表示されなくなる」という不具合が、実際に確認された。
     979     *
     980     * langbox.js自体は、既にサーバーから都度リアルタイムに取得する
     981     * elarray・worldlangplus(全言語翻訳オプションの実際の状態)を
     982     * 見て、表示内容を正しく判断できる(実際に確認・修正済み)ため、
     983     * PHP側でのこの早期return(=<script>タグ自体を出すか出さないかの
     984     * 事前判定)は不要である。常に無条件でlangbox.jsを注入し、
     985     * 「表示するかどうか・どの言語を表示するか」の実際の判断は、
     986     * langbox.js自身に委ねる。
     987     *
     988     * 【重複注入について】翻訳されるページでは、buffer_callback内でも
     989     * 同じlangbox.jsが注入されるため、1ページに<script>タグが2回
     990     * 含まれることがあるが、langbox.js側に重複初期化防止のガードを
     991     * 追加済みのため、実害はない(軽微な追加リクエストが1回増えるのみ)。
     992     */
    946993
    947994    $api_key = transer_translate_get_option('api_key', '');
Note: See TracChangeset for help on using the changeset viewer.