Changeset 3691577
- Timestamp:
- 09/11/2026 02:35:30 PM (6 weeks ago)
- Location:
- transer-translate/trunk
- Files:
-
- 2 edited
-
readme.txt (modified) (3 diffs)
-
transer-translate.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
transer-translate/trunk/readme.txt
r3687158 r3691577 5 5 Tested up to: 7.0 6 6 Requires PHP: 7.4 7 Stable tag: 0.9. 37 Stable tag: 0.9.4 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 116 116 == Changelog == 117 117 118 = 0.9.4 = 119 * Minor bug fixes. 120 * 軽微な不具合を修正しました。 121 118 122 = 0.9.3 = 119 123 * 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. … … 161 165 == Upgrade Notice == 162 166 167 = 0.9.4 = 168 Minor bug fixes. / 軽微な不具合を修正しました。 169 163 170 = 0.9.3 = 164 171 Fixes a "page not found" error that could occur with certain language-prefixed URLs. / 特定の言語プレフィックス付きURLで、ページが見つからないエラーになる不具合を修正しました。 -
transer-translate/trunk/transer-translate.php
r3687158 r3691577 4 4 * Plugin URI: https://www.transer.io/ 5 5 * 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. 36 * Version: 0.9.4 7 7 * Requires at least: 5.8 8 8 * Requires PHP: 7.4 … … 18 18 } 19 19 20 define('TRANSER_TRANSLATE_VERSION', '0.9. 0');20 define('TRANSER_TRANSLATE_VERSION', '0.9.3'); 21 21 define('TRANSER_TRANSLATE_OPTION_KEY', 'transer_translate_settings'); 22 22 define('TRANSER_TRANSLATE_COOKIE_NAME', 'transer_lang'); 23 23 24 24 /** 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の翻訳が反映されない不具合として確認された)。 26 32 * 27 33 * languages/ に同梱しているのは ja・zh_CN・zh_TW・ko の4言語。 28 34 * それ以外のロケールでは翻訳ファイルが見つからないため、 29 35 * ソース中の英語(msgid)がそのまま表示される。 36 * 37 * 対策として、WordPressの自動読み込みが効かなかった場合に備え、 38 * load_textdomain() を使って、同梱の.moファイルを直接、明示的に 39 * 読み込むフォールバックを用意する(自動読み込みが正しく機能した 40 * 場合は、この処理は何もしない)。 30 41 */ 31 add_action('init', function () { 32 load_plugin_textdomain( 33 'transer-translate', 34 false, 35 dirname(plugin_basename(__FILE__)) . '/languages' 36 ); 37 }); 42 add_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); 38 52 39 53 function transer_translate_get_option($key, $default = '') { … … 720 734 $contract_langs = transer_translate_get_option('contract_langs', array()); 721 735 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; 726 749 if ($all_langs_enabled) { 727 750 $all_lang_codes = transer_translate_get_option('all_lang_codes', array()); … … 939 962 return; 940 963 } 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 */ 946 993 947 994 $api_key = transer_translate_get_option('api_key', '');
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)