User:BlackShadowG/SidebarTranslate.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// 隐藏 id 为 'p-lang' 的元素
var plang = $('#p-lang').hide();
$(document).ready( function() {
// 定义排序函数,根据文本内容按降序排序
function sort( a, b ) {
return ( $(b).text() ) < ( $(a).text() ) ? 1 : -1;
}
// 找到 'p-lang' 中的 ul 元素
var plangUL = plang.find('ul');
// 找到类名以 "interlanguage-link" 开头的 li 元素,并将其从 DOM 中移除
var interwikis = plangUL.find('li[class^="interlanguage-link"]').detach();
// 如果存在 interwikis 列表项
if ( interwikis.length > 0 ) {
// 导入外部样式表
importStylesheet('User:BlackShadowG/SidebarTranslate.css');
// 正则表达式,用于匹配语言名称
var langReg = /(.*? – )?(.*)/;
// Google 翻译链接前缀
var gtPre = 'http://translate.google.com/translate?hl=zh-CN&sl=auto&tl=zh-CN&u=';
// 特殊语言映射表
var hardLangs = {
'lumbaart': '伦巴第语',
'tarandíne': '塔伦蒂诺语',
'vèneto': '威尼斯语',
'Беларуская (тарашкевіца)': '白俄罗斯语(传统正写法)',
'буряад': '布里亚特语',
'лакку': '拉克语'
};
// 支持 Google 翻译的语言列表
var googleSupported = [ '南非荷兰语', '阿尔巴尼亚语', '阿拉伯语', '亚美尼亚语', '阿塞拜疆语', '巴斯克语', '白俄罗斯语', '孟加拉语', '保加利亚语',
'加泰罗尼亚语', '中文', '克罗地亚语', '捷克语', '丹麦语', '荷兰语', '英语', '世界语', '爱沙尼亚语', '菲律宾语', '芬兰语',
'法语', '加利西亚语', '格鲁吉亚语', '德语', '希腊语', '海地语', '克里奥尔语', '希伯来语', '印地语', '匈牙利语', '冰岛语',
'印度尼西亚语', '爱尔兰语', '意大利语', '日语', '爪哇语', '卡纳达语', '韩语', '高棉语', '拉丁语', '拉脱维亚语', '立陶宛语',
'马其顿语', '马来语', '马耳他语', '马拉地语', '挪威语', '挪威语(博克马尔语)', '挪威尼诺斯克语', '波斯语', '波兰语',
'葡萄牙语', '罗马尼亚语', '俄语', '塞尔维亚语', '斯洛伐克语', '斯洛文尼亚语', '西班牙语', '斯瓦希里语', '瑞典语', '泰米尔语',
'泰卢固语', '泰语', '土耳其语', '乌克兰语', '乌尔都语', '越南语', '威尔士语', '意第绪语'];
// 遍历每个 interwiki 链接
interwikis.find('a').each( function() {
var $this = $(this); // 当前链接元素
var origLangName = $this.text(); // 原始语言名称
var langMatches = langReg.exec( $this.attr('title') ); // 从标题中提取语言名称
if ( langMatches != null ) {
// 根据提取的名称,确定新的语言名称
var newLangName = (langMatches[2] in hardLangs) ? hardLangs[ langMatches[2] ] : langMatches[2];
if ( $this.attr('hreflang') == 'be-x-old' ) newLangName = '白俄罗斯语(传统正写法)'; // 特殊处理
var hrefs = $this.attr('href'); // 获取链接地址
var origLangPre = (langMatches[1] == undefined) ? '' : langMatches[1]; // 前缀处理
// 更新链接的文本和属性
$this.text( newLangName ).removeAttr('lang style').attr( 'title', origLangPre + origLangName );
// 确定 Google 翻译链接的颜色
var unsup = ( googleSupported.indexOf(langMatches[2]) < 0 ) ? '#FA8540' : '#4085FA';
// 创建新的 Google 翻译链接
$('<a/>', {
'text': 'G',
'class': 'external gTrans',
'target': '_blank',
'href': gtPre + hrefs,
'title': 'Google翻译:' + newLangName + '翻译成英文',
'style': 'color:' + unsup + ';'
}).insertAfter( $this ).before(' '); // 插入到原链接之后
// 如果链接文本长度超过 17 个字符,则进行换行处理
if ( $this.text().length > 17 ) $this.html( $this.html().replace('-','- ').replace(' ', '<br />') );
// 为 Google 翻译链接添加鼠标悬停事件处理
$this.siblings('.gTrans').hover(
function() { $(this).css( {'background-color': unsup, 'color': 'white'} ) },
function() { $(this).css( {'background-color': 'transparent', 'color': unsup} ) }
);
// 为 li 元素添加鼠标悬停事件处理
$this.parent('li').hover(
function() { $(this).find('.gTrans').fadeIn(200).css('margin-left','0') },
function() { $(this).find('.gTrans').fadeOut(100).css('margin-left','5px') }
);
}
});
// 对 interwikis 进行排序,并添加回 ul 中
plangUL.prepend( interwikis.sort(sort) );
}
// 显示 id 为 'p-lang' 的元素
plang.show();
});