MediaWiki:Common.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: メニュー → 設定 (Mac では Opera → 環境設定) に移動し、プライバシーとセキュリティ → 閲覧データを消去 → キャッシュされた画像およびファイル からキャッシュをクリアしてください。
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* Google 翻訳ウィジェット(DOM自動選択発火 + 原文明示バナー完全版) */
$( function () {
if ( $( '#p-googletranslator' ).length ) {
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 );
}
// 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 );
}
// 3. 初回アクセス時にブラウザ言語に合わせてプルダウンを自動選択・発火
function triggerAutoTranslation() {
// すでにセッション中に判定済み、または過去の翻訳Cookieがある場合は手動操作を尊重
if ( sessionStorage.getItem( 'gt_auto_applied' ) || document.cookie.indexOf( 'googtrans=' ) !== -1 ) {
return;
}
var userLang = ( navigator.language || navigator.userLanguage || '' ).toLowerCase();
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;
}
}
if ( !targetLang ) {
return; // 日本語環境なら何もしない
}
// Google翻訳の select 要素(.goog-te-combo)が生成されたら選択を発火
var checkCount = 0;
var timer = setInterval( function () {
checkCount++;
var select = document.querySelector( '.goog-te-combo' );
if ( select ) {
clearInterval( timer );
sessionStorage.setItem( 'gt_auto_applied', 'true' );
select.value = targetLang;
select.dispatchEvent( new Event( 'change' ) );
}
if ( checkCount > 50 ) {
clearInterval( timer );
}
}, 100 );
}
// 4. Google 翻訳の初期化
window.googleTranslateElementInit = function () {
new google.translate.TranslateElement({
pageLanguage: 'ja',
includedLanguages: supportedLangs.join( ',' ),
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
triggerAutoTranslation();
};
mw.loader.load( '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit' );
} );