「MediaWiki:Common.js」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | /* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | ||
| − | /* Google | + | /* Google 翻訳ウィジェット(デバッグログ付き) */ |
$( function () { | $( function () { | ||
| + | console.log( '[GT-Debug] Common.js 読み込み開始' ); | ||
| + | |||
if ( $( '#p-googletranslator' ).length ) { | if ( $( '#p-googletranslator' ).length ) { | ||
| + | console.log( '[GT-Debug] すでにサイドバー要素が存在するため中断' ); | ||
return; | return; | ||
} | } | ||
| 13行目: | 16行目: | ||
var $notice = $( '<div class="mw-translate-notice">⚠️ このページは、日本語の原文から機械翻訳(Google 翻訳)されたものです。</div>' ); | var $notice = $( '<div class="mw-translate-notice">⚠️ このページは、日本語の原文から機械翻訳(Google 翻訳)されたものです。</div>' ); | ||
$( '#mw-content-text' ).prepend( $notice ); | $( '#mw-content-text' ).prepend( $notice ); | ||
| + | console.log( '[GT-Debug] 通知バナー要素を DOM に追加' ); | ||
} | } | ||
| 31行目: | 35行目: | ||
$( '#mw-panel' ).append( boxHtml ); | $( '#mw-panel' ).append( boxHtml ); | ||
} | } | ||
| + | console.log( '[GT-Debug] サイドバー枠を配置' ); | ||
| − | // 3. | + | // 3. プルダウンの自動発火ロジック |
function triggerAutoTranslation() { | function triggerAutoTranslation() { | ||
| − | + | console.log( '[GT-Debug] triggerAutoTranslation 開始' ); | |
| + | console.log( '[GT-Debug] 現在の Cookie (googtrans):', document.cookie ); | ||
| + | console.log( '[GT-Debug] sessionStorage (gt_auto_applied):', sessionStorage.getItem( 'gt_auto_applied' ) ); | ||
| + | |||
if ( sessionStorage.getItem( 'gt_auto_applied' ) || document.cookie.indexOf( 'googtrans=' ) !== -1 ) { | if ( sessionStorage.getItem( 'gt_auto_applied' ) || document.cookie.indexOf( 'googtrans=' ) !== -1 ) { | ||
| + | console.log( '[GT-Debug] 既存のCookieまたはセッション適用フラグがあるため自動適用をスキップ' ); | ||
return; | return; | ||
} | } | ||
var userLang = ( navigator.language || navigator.userLanguage || '' ).toLowerCase(); | var userLang = ( navigator.language || navigator.userLanguage || '' ).toLowerCase(); | ||
| + | console.log( '[GT-Debug] 検知されたブラウザ言語 (navigator.language):', userLang ); | ||
| + | |||
var targetLang = ''; | var targetLang = ''; | ||
| − | |||
if ( userLang.indexOf( 'zh' ) === 0 ) { | if ( userLang.indexOf( 'zh' ) === 0 ) { | ||
targetLang = 'zh-CN'; | targetLang = 'zh-CN'; | ||
| 50行目: | 60行目: | ||
} | } | ||
} | } | ||
| + | console.log( '[GT-Debug] 判定されたターゲット言語:', targetLang ); | ||
if ( !targetLang ) { | if ( !targetLang ) { | ||
| − | return; | + | console.log( '[GT-Debug] 日本語環境、または非対応言語のため終了' ); |
| + | return; | ||
} | } | ||
| − | |||
var checkCount = 0; | var checkCount = 0; | ||
var timer = setInterval( function () { | var timer = setInterval( function () { | ||
| 62行目: | 73行目: | ||
if ( select ) { | if ( select ) { | ||
clearInterval( timer ); | clearInterval( timer ); | ||
| + | console.log( '[GT-Debug] .goog-te-combo を検出しました (試行回数: ' + checkCount + ')' ); | ||
| + | console.log( '[GT-Debug] 変更前の select.value:', select.value ); | ||
| + | |||
sessionStorage.setItem( 'gt_auto_applied', 'true' ); | sessionStorage.setItem( 'gt_auto_applied', 'true' ); | ||
select.value = targetLang; | select.value = targetLang; | ||
| − | select.dispatchEvent( | + | |
| + | // change イベントを発火 | ||
| + | var evt = document.createEvent( 'HTMLEvents' ); | ||
| + | evt.initEvent( 'change', true, true ); | ||
| + | select.dispatchEvent( evt ); | ||
| + | |||
| + | console.log( '[GT-Debug] change イベントを発火しました。変更後の select.value:', select.value ); | ||
} | } | ||
| + | |||
if ( checkCount > 50 ) { | if ( checkCount > 50 ) { | ||
clearInterval( timer ); | clearInterval( timer ); | ||
| + | console.warn( '[GT-Debug] 5秒経過しても .goog-te-combo が見つかりませんでした' ); | ||
} | } | ||
}, 100 ); | }, 100 ); | ||
} | } | ||
| − | // 4. Google | + | // 4. Google 翻訳の初期化コールバック |
window.googleTranslateElementInit = function () { | window.googleTranslateElementInit = function () { | ||
| + | console.log( '[GT-Debug] googleTranslateElementInit コールバック呼び出し' ); | ||
new google.translate.TranslateElement({ | new google.translate.TranslateElement({ | ||
pageLanguage: 'ja', | pageLanguage: 'ja', | ||
| 83行目: | 106行目: | ||
}; | }; | ||
| + | console.log( '[GT-Debug] Google 翻訳スクリプトのロード要求を送信' ); | ||
mw.loader.load( '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit' ); | mw.loader.load( '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit' ); | ||
} ); | } ); | ||
2026年10月23日 (金) 09:15時点における版
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* Google 翻訳ウィジェット(デバッグログ付き) */
$( function () {
console.log( '[GT-Debug] Common.js 読み込み開始' );
if ( $( '#p-googletranslator' ).length ) {
console.log( '[GT-Debug] すでにサイドバー要素が存在するため中断' );
return;
}
var supportedLangs = ['ja', 'ko', 'en', 'nl', 'fr', 'de', 'zh-CN', 'ru'];
// 1. 記事本文の上に通知バナーを配置
if ( $( '#mw-content-text' ).length && !$( '.mw-translate-notice' ).length ) {
var $notice = $( '<div class="mw-translate-notice">⚠️ このページは、日本語の原文から機械翻訳(Google 翻訳)されたものです。</div>' );
$( '#mw-content-text' ).prepend( $notice );
console.log( '[GT-Debug] 通知バナー要素を DOM に追加' );
}
// 2. サイドバー用ブロックのHTML生成
var boxHtml =
'<nav id="p-googletranslator" class="mw-portlet mw-portlet-googletranslator vector-menu vector-menu-portal portal" role="navigation">' +
' <h3 class="vector-menu-heading"><span>翻訳 / Translate</span></h3>' +
' <div class="vector-menu-content body">' +
' <ul class="vector-menu-content-list" style="padding-top: 8px;">' +
' <li style="list-style: none;"><div id="google_translate_element"></div></li>' +
' </ul>' +
' </div>' +
'</nav>';
if ( $( '#p-tb' ).length ) {
$( '#p-tb' ).after( boxHtml );
} else {
$( '#mw-panel' ).append( boxHtml );
}
console.log( '[GT-Debug] サイドバー枠を配置' );
// 3. プルダウンの自動発火ロジック
function triggerAutoTranslation() {
console.log( '[GT-Debug] triggerAutoTranslation 開始' );
console.log( '[GT-Debug] 現在の Cookie (googtrans):', document.cookie );
console.log( '[GT-Debug] sessionStorage (gt_auto_applied):', sessionStorage.getItem( 'gt_auto_applied' ) );
if ( sessionStorage.getItem( 'gt_auto_applied' ) || document.cookie.indexOf( 'googtrans=' ) !== -1 ) {
console.log( '[GT-Debug] 既存のCookieまたはセッション適用フラグがあるため自動適用をスキップ' );
return;
}
var userLang = ( navigator.language || navigator.userLanguage || '' ).toLowerCase();
console.log( '[GT-Debug] 検知されたブラウザ言語 (navigator.language):', userLang );
var targetLang = '';
if ( userLang.indexOf( 'zh' ) === 0 ) {
targetLang = 'zh-CN';
} else {
var shortLang = userLang.split( '-' )[0];
if ( shortLang !== 'ja' && supportedLangs.indexOf( shortLang ) !== -1 ) {
targetLang = shortLang;
}
}
console.log( '[GT-Debug] 判定されたターゲット言語:', targetLang );
if ( !targetLang ) {
console.log( '[GT-Debug] 日本語環境、または非対応言語のため終了' );
return;
}
var checkCount = 0;
var timer = setInterval( function () {
checkCount++;
var select = document.querySelector( '.goog-te-combo' );
if ( select ) {
clearInterval( timer );
console.log( '[GT-Debug] .goog-te-combo を検出しました (試行回数: ' + checkCount + ')' );
console.log( '[GT-Debug] 変更前の select.value:', select.value );
sessionStorage.setItem( 'gt_auto_applied', 'true' );
select.value = targetLang;
// change イベントを発火
var evt = document.createEvent( 'HTMLEvents' );
evt.initEvent( 'change', true, true );
select.dispatchEvent( evt );
console.log( '[GT-Debug] change イベントを発火しました。変更後の select.value:', select.value );
}
if ( checkCount > 50 ) {
clearInterval( timer );
console.warn( '[GT-Debug] 5秒経過しても .goog-te-combo が見つかりませんでした' );
}
}, 100 );
}
// 4. Google 翻訳の初期化コールバック
window.googleTranslateElementInit = function () {
console.log( '[GT-Debug] googleTranslateElementInit コールバック呼び出し' );
new google.translate.TranslateElement({
pageLanguage: 'ja',
includedLanguages: supportedLangs.join( ',' ),
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
triggerAutoTranslation();
};
console.log( '[GT-Debug] Google 翻訳スクリプトのロード要求を送信' );
mw.loader.load( '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit' );
} );