// <nowiki>
/** Adds links to machine translations of external links near {{language icon}} tags.
* [[User:AnonEMouse]], January 2008. */
hookEvent("load", addTranslators);
function addTranslators()
{
var spans = document.getElementsByTagName("span");
for(var i=0;i<spans.length;++i){
addTranslations(spans[i]);
}
}
function googleTrans(link, language)
{ // Google works with:
var langs = {
"(Arabic)": "ar",
"(Chinese)": "zh-CN",
"(Traditional Chinese)": "zh-TW",
"(Dutch)": "nl",
"(French)": "fr",
"(German)": "de",
"(Greek)": "el",
"(Italian)": "it",
"(Japanese)": "ja",
"(Korean)": "ko",
"(Portuguese)": "pt",
"(Russian)": "ru",
"(Spanish)": "es",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://translate.google.com/translate?u=' + encodeURI(link.href) +
'&langpair=' + langCode + '%7Cen&hl=en&ie=UTF-8';
transLink.innerHTML = 'GoogleTrans';
transLink.target = "_blank";
//alert("returning " + transLink.innerHTML);
return transLink;
}
function babelfish(link, language)
{ // Babelfish (Systran) works with:
var langs = {
"(Chinese)": "zh",
"(Traditional Chinese)": "zt",
"(Dutch)": "nl",
"(French)": "fr",
"(German)": "de",
"(Greek)": "el",
"(Italian)": "it",
"(Japanese)": "ja",
"(Korean)": "ko",
"(Portuguese)": "pt",
"(Russian)": "ru",
"(Spanish)": "es",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://babelfish.altavista.com/babelfish/trurl_pagecontent?lp=' + langCode +
'_en&url=' + encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'Babelfish';
//alert("returning " + transLink.innerHTML);
return transLink;
}
function alphaWorks(link, language)
{ // AlphaWorks (IBM) works with:
var langs = {
"(Chinese)": "cn",
"(Traditional Chinese)": "tw",
"(French)": "fr",
"(German)": "de",
"(Italian)": "it",
"(Japanese)": "jp",
"(Spanish)": "es",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://demowsmt.dfw.ibm.com/demand?mtlang=' + langCode + 'en&translate='
+ encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'AlphaWorks';
//alert("returning " + transLink.innerHTML);
return transLink;
}
function SDL(link, language)
{ // SDL (http://www.freetranslation.com/) works with:
var langs = {
"(Spanish)": "spanish",
"(French)": "french",
"(German)": "german",
"(Italian)": "italian",
"(Dutch)": "dutch",
"(Portuguese)": "portuguese",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://fets5.freetranslation.com/?sequence=core&language=' + langCode
+ '/English&url=' + encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'SDL';
//alert("returning " + transLink.innerHTML);
return transLink;
}
function gramTrans(link, language)
{ // GramTrans works with:
var langs = {
"(Danish)": "dan",
"(Swedish)": "swe",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://gramtrans.com/gt/url/?url=' + encodeURI(link.href) + '&pair='
+ langCode +'2eng&x-form-id=translate_url';
transLink.target = "_blank";
transLink.innerHTML = 'GramTrans';
//alert("returning " + transLink.href + transLink.text);
return transLink;
}
function apertium(link, language)
{// Apertium works with:
var langs = {
"(Catalan)": "ca",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://xixona.dlsi.ua.es/apertium/tradurl.php?marcar=&direccion=' + langCode +
'-en&inurl=' + encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'Apertium';
//alert("returning " + transLink.href + transLink.text);
return transLink;
}
function windowsLive(link, language)
{// Windows Live Translator works with:
var langs = {
"(Arabic)": "ar",
"(Chinese)": "zh-chs",
"(Traditional Chinese)": "zh-cht",
"(Dutch)": "nl",
"(French)": "fr",
"(German)": "de",
"(Italian)": "it",
"(Japanese)": "ja",
"(Korean)": "kp",
"(Portuguese)": "pt",
"(Russian)": "ru",
"(Spanish)": "es",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://www.windowslivetranslator.com/BV.aspx?MKT=en-US&lp=' + langCode +
'_en&a=' + encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'WindowsLive';
//alert("returning " + transLink.href + transLink.text);
return transLink;
}
function gts(link, language)
{// GTS (Global Translations) Translator works with:
var langs = {
"(Arabic)": "43",
"(Chinese)": "42",
"(Dutch)": "37",
"(French)": "35",
"(German)": "22",
"(Hebrew)": "57",
"(Italian)": "36",
"(Japanese)": "61",
"(Korean)": "62",
"(Persian)": "53",
"(Polish)": "38",
"(Portuguese)": "39",
"(Russian)": "40",
"(Spanish)": "34",
"(Turkish)": "63",
"(Ukrainian)": "41",
}
var langCode = langs[language];
// alert(link + language + langCode);
if(langCode == null) return null;
var transLink = document.createElement("a");
transLink.href = 'http://www.gts-translation.com/translatewebsite.asp?language=' + langCode +
'&url=' + encodeURI(link.href);
transLink.target = "_blank";
transLink.innerHTML = 'GTS';
//alert("returning " + transLink.href + transLink.text);
return transLink;
}
function addTranslations(span)
{
var transFuncs = new Array();
transFuncs[0] = googleTrans;
transFuncs[1] = babelfish;
transFuncs[2] = alphaWorks;
transFuncs[3] = SDL;
transFuncs[4] = gramTrans;
transFuncs[5] = apertium;
transFuncs[6] = windowsLive;
transFuncs[7] = gts;
// alert(transFuncs);
var parent = span.parentNode;
var lang = span.innerHTML;
if(lang[0] != '(' || lang[lang.length -1] != ')') return;
//alert(parent + ":" + siblings.length);
// icon inside link text
if(parent.nodeName == "A"){
if(parent.href.indexOf("http") == 0 // it's a real link
&& parent.href.indexOf("http://en.wikipedia.org/") != 0){ // it's an external link
var linkParent = parent.parentNode;
// alert(node.innerHTML);
for(j=0; j<transFuncs.length; ++j){
// alert("transFuncs: " + transFuncs[j]);
var translation = transFuncs[j](parent, lang);
if(translation != null){
//alert("adding " + translation);
translation.innerHTML = ' <small>'+ translation.innerHTML + ';</small>';
linkParent.insertBefore(translation, node.nextSibling);
}
}
}
}
else {
// icon on same line with link
var siblings = parent.childNodes;
for(var i=0; i<siblings.length;++i){
node = siblings[i];
// alert(node.nodeName);
if(node.nodeName == "A"
&& node.href.indexOf("http") == 0 // it's a real link
&& node.href.indexOf("http://en.wikipedia.org/") != 0){ // it's an external link
// alert(node.innerHTML);
for(j=0; j<transFuncs.length; ++j){
// alert("transFuncs: " + transFuncs[j]);
var translation = transFuncs[j](node, lang);
if(translation != null){
//alert("adding " + translation);
translation.innerHTML = ' <small>'+ translation.innerHTML + ';</small>';
parent.insertBefore(translation, node.nextSibling);
++i;
}
}
}
}
}
}
// </nowiki>