跳转到内容
维基百科,自由的百科全书

参阅Help:绕过浏览器缓存以获取更多帮助。

//Link Translator//由[[User:Liangent]]最初设计//由[[User:Kovl]]修改 v2015-2-6-7-52//由[[user:Panintelize]] 再修改.2016-02-06//源代码取自[[User:Liangent/Gadgets/Toolkit/linktranslator.uncompressed.js]]//v2015-2-6-7-52//此脚本不依赖其他脚本$(function() {mw.loader.load('https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.js'); var LTUI = {    Translate:"翻译",    TranslateLinks:"翻译链接",    LinkTranslator:"链接翻译器",    TLTitle:"自动翻译从其他语言维基百科复制的文本",    SourceLanguageCode:"目标维基的语言代码:",    OriginalLink:"原链接:",    NOLINKINPAGE:"此页没有链接",    Done:"完成",    NoWikiEd:"linktranslator.js与WikiEd不兼容,请于页面右上角暂时禁用WikiEd。",    EditMessage:"由[[User:Panintelize/link-ts.js|链接翻译器]]自动翻译;",        //OPTION    KeepOriginalText:"以原文顯示綠鏈:",    KeepOriginalText2:"以原文顯示藍鍊:",    CommentOriginalLink:"注释原链接:",    UseLangLink:"跨语言链接:",        //STATUS    PARSEFAILED:"解析失败",    ERROR:"错误",    NOLINK:"没有链接",    MULTIPLELINK:"多个连接",    PAGESAME:"页面相同",    PAGEDIFF:"页面不同",    DONTEXIST:"页面不存在"};var LTConf = {    SourceLanguageCode:"en",    KeepOriginalText:"checked", //"checked" OR ""    KeepOriginalText2:"",    CommentOriginalLink:"",    UseLangLink:"checked"};//clear previous button$('#wpLinktranslator').remove();// secure server?if ((mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit') && mw.config.get('wgServer') == '//zh.wikipedia.org') {    $('#wpDiff').after('\n<input id="wpLinktranslator" value="' + LTUI.TranslateLinks + '" title="' + LTUI.TLTitle + '" type="button"/>');    $('#wpLinktranslator').click(LTClick);}//variablesvar jobid = 0;var ldsb = '__LEFT_DOUBLE_SQUARE_BRACKETS__';var EXEConf;//on click "Translate links" #wpLinktranslatorfunction LTClick(event) {    event.preventDefault();    $('#linktranslator').remove();    if ($("#wikEdFrameWrapper").css("visibility") == "visible"){    alert(LTUI.NoWikiEd);    return;}    $('<div id="linktranslator" title="' + LTUI.LinkTranslator + '">' +        '<label for="linktranslator-source-lang">' + LTUI.SourceLanguageCode + '</label> ' +        '<input id="linktranslator-source-lang" value="' + LTConf.SourceLanguageCode + '" type="text" /><br />' +        '<label for="linktranslator-keep-original">' + LTUI.KeepOriginalText + '</label> ' +        '<input type="checkbox" id="linktranslator-keep-original" ' + LTConf.KeepOriginalText + '/><br />' +        '<label for="linktranslator-keep-original2">' + LTUI.KeepOriginalText2 + '</label> ' +        '<input type="checkbox" id="linktranslator-keep-original2" ' + LTConf.KeepOriginalText2 + '/><br />' +        '<label for="linktranslator-comment-link">' + LTUI.CommentOriginalLink + '</label> ' +        '<input type="checkbox" id="linktranslator-comment-link" ' + LTConf.CommentOriginalLink + '/><br />' +        '<label for="linktranslator-lang-link">' + LTUI.UseLangLink + '</label> ' +        '<input type="checkbox" id="linktranslator-lang-link" ' + LTConf.UseLangLink + '/><br />' +        '<input id="linktranslator-translate" value="' + LTUI.Translate + '" type="button" /></div>'            ).dialog({        modal: false,        close: function() {jobid++;},        width: 500    });    $('#linktranslator-translate').click(TClick);}//on click "Translate" #linktranslator-translatefunction TClick(event) {    event.preventDefault();    var thisjobid = jobid; // or in #wpLinktranslator's click event?        EXEConf = {KeepOriginalText:$('#linktranslator-keep-original').prop('checked'),KeepOriginalText2:$('#linktranslator-keep-original2').prop('checked'),CommentOriginalLink:$('#linktranslator-comment-link').prop('checked'),UseLangLink:$('#linktranslator-lang-link').prop('checked')};    LTConf.SourceLanguageCode = $('#linktranslator-source-lang').val();    var api = 'http://' + LTConf.SourceLanguageCode + '.wikipedia.org/w/api.php';    if (document.location.protocol == 'https:') {        api = 'https://' + LTConf.SourceLanguageCode + '.wikipedia.org/w/api.php';    }        var wikitext = $('#wpTextbox1').val();    // how to make a set to avoid duplicated links?    var links = $('#wpTextbox1').val().match(/(\[\[)(?!\:?.?.\:)(?!File:)(.+?)(\|.+?)?(\]\])/g);        if (links === null) {        $('#linktranslator').text(LTUI.NOLINKINPAGE);        return;    } else { // assert links.length != 0 here.        $('#linktranslator').dialog( "option", "position", { my: "top", at: "top"} );        $('#linktranslator').html('<div id="linktranslator-progressbar"></div>');        $('#linktranslator-progressbar').progressbar();    }        var respcount = 0;    // TODO: should be rewritten using jQuery.each        function eachlink(i) {        var linkidx = i;        var link = links[i].slice(2, -2);                var linktarget = link;        // TODO: pipe tricks like [[/subpage/]]?        var linkdisplay = link;        var idx = link.indexOf('|');        if (idx != -1) {            linktarget = link.substring(0, idx);            linkdisplay = link.substring(idx + 1);        }        $('#linktranslator').append('<div id="linktranslator-item-' + i + '"></div>');        $('#linktranslator-item-' + i).text(links[i] + ' -> ')            .append('<span class="linktranslator-item-newlink">...</span>');        // TODO: if newtarget == linkdisplay?        // TODO: cannot identify if missing or [[zh:]] (for main page, also blank text)        $.ajax({            data: {                action: 'parse',                format: 'json',                page: linktarget,                prop: 'langlinks',                redirects: 1            },            dataType: "jsonp",            type: 'POST',            url: api,            success: function(data) {                console.log(data);                if (thisjobid != jobid) {                    return;                }                                var llink;                var newtarget;                var newlinks;                                if(data.parse){                //request successful                    llink = $.grep(data.parse.langlinks, function(e){ return e.lang === 'zh'; });                } else if(data.error.info){                //request completed with error                    if(data.error.info == "The page you specified doesn't exist")                        {$('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.DONTEXIST);}                    else                        {$('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.ERROR + '(' + data.error.info + ')');}                    return;                } else{                //error without info field                    $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.PARSEFAILED);                    return;                }                                if (llink.length === 1) {                    newtarget = llink[0]["*"];                                        if(linktarget === newtarget){                        $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.PAGESAME);                        return;                    }                                        //EXEConf.KeepOriginalText                    if(EXEConf.KeepOriginalText2) {                        newlinks = ldsb + newtarget + '|' + linkdisplay + ']]';                    } else {                        newlinks = ldsb + newtarget + ']]';                    }                } else if (llink.length === 0) {                    if(EXEConf.UseLangLink) {                        newlinks = '{{link-' + LTConf.SourceLanguageCode + '||' + '';                        if(EXEConf.KeepOriginalText) {                            newlinks = '{{tsl|' + LTConf.SourceLanguageCode + '|' + linktarget + '||' + linkdisplay +'}}';                         } else {                            newlinks = '{{tsl|' + LTConf.SourceLanguageCode + '|' + linktarget + '}}';                         }                    } else {                        $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.NOLINK);                        return;                    }                } else {                   $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.MULTIPLELINK);                   return;                }                                            //EXEConf.CommentOriginalLink                var newcomment;                if(EXEConf.CommentOriginalLink) {                    newcomment = '<!-- ' + LTUI.OriginalLink + ldsb + link + ']] -->';                } else {                    newcomment = '';                }                                //mark on dialogue                $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(newlinks.replace(new RegExp(ldsb, 'g'), '[['));                // only replacing the first is ok, we will run this many times                wikitext = wikitext.replace(links[linkidx], newlinks + newcomment);                            },            error: function(jqXHR, textStatus, errorThrown) {                if (thisjobid != jobid) {                    return;                }                $('#linktranslator-item-' + linkidx + ' .linktranslator-item-newlink').text(LTUI.ERROR + '(' + textStatus + ')');            },            complete: function() {                if (thisjobid != jobid) {                    return;                }                respcount++;                $('#linktranslator-progressbar').progressbar('value', respcount * 100 / links.length);                if (respcount >= links.length) {                    $('#wpTextbox1').val(wikitext.replace(new RegExp(ldsb, 'g'), '[['));                    $('#linktranslator').prepend('<div id="linktranlator-done"><strong>' + LTUI.Done + '</strong></div>');                }            }        });//ajax complete    }//trino complete        for (var i = 0; i < links.length; i++) {eachlink(i);}    $('#wpSummary').val(LTUI.EditMessage + $('#wpSummary').val());}//end});