Користувач:Bunyk/translator.js
Перейти до навігації
Перейти до пошуку
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
- Opera: натисніть Ctrl-F5
// Додає до редактора кнопку що перекладає типові шматки тексту.
jQuery(function ($) {
if(mw.config.get('wgAction') != 'edit') return;
if(!$('#wpTextbox1').wikiEditor) return;
var improve = function() {
apply_change(fix_booksources, 'оформлення ISBN');
apply_change(fix_external_wikilinks, 'заміна зовнішніх вікіпосилань внутрішніми');
apply_change(fix_np, 'заміна неперекладених посилань шаблоном');
apply_change(fix_ref_names, 'атрибути в лапки');
apply_change(fix_filmography, 'оформлення фільмографії');
apply_change(function(m) {return m.replace(/<nowiki\/>/g, '')}, 'прибирання зайвих тегів nowiki');
apply_change(simplify_wikilink, 'оформлення');
apply_change(translate_dict, "переклад");
};
var translation_dict = [
[/==\s*History\s*==/g, '== Історія =='],
[/==\s*Technology\s*==/g, '== Технологія =='],
[/==\s*See also\s*==/g, '== Див. також =='],
[/==\s*External links\s*==/g, '== Посилання =='],
[/==\s*References\s*==/g, '== Зноски =='],
[/==\s*Awards\s*==/g, '== Нагороди =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
// [/==\s*History\s*==/g, '== Історія =='],
];
var translate_dict = function(wikimarkup) {
var text = wikimarkup;
for (i = 0; i<translation_dict.length; i++) {
var e = translation_dict[i];
text = text.replace(e[0], e[1]);
}
return text;
};
var simplify_wikilink = function(wikimarkup) {
return wikimarkup.replace(/\[\[([^|\]]+)\|\1\]\]/g, '[[$1]]');
};
var fix_filmography = function(wikimarkup) {
return wikimarkup.replace(
/{{ВФильмеВерх}}/g, '{{УФільміВерх}}'
).replace(
/{{ВФильмеНиз}}/g, '{{УФільміНиз}}'
).replace(
/{{ВСериале/g, '{{УСеріалі'
).replace(
/{{ВФильме/g, '{{УФільмі'
).replace(
/{{ВтФильме/g, '{{УтФільмі'
).replace(
/{{ВкФильме/g, '{{УкФільмі'
);
};
var fix_booksources = function(wikimarkup) {
// [.../Special:BookSources/1740480503 ISBN 1..]- > ISBN 1..
return wikimarkup.replace(
/Служебная:\s*Источники[_ ]книг/g,
'Special:BookSources'
).replace(
/\[\[International Standard Book Number\|ISBN\]\]/g, '[[ISBN]]'
).replace(
/\[\S+Special:\s*BookSources\/[\dX]+\s+(ISBN\s+[^\]]+)\]/g, '$1'
).replace(
/\[\[\S*Special:\s*BookSources\/[\dX]+\|(ISBN\s+[^\]]+)\]\]/g, '$1'
).replace(
/\[\[ISBN\]\] \[\[\S+BookSources\/[\dX]+\|(\d+)\]\]/g, 'ISBN $1'
);
};
var fix_external_wikilinks = function(wikimarkup) {
// Замінити [//en.wikipedia.org/wiki/Knight_High_School Старшу лицарську школу]
// на [[:en:Knight High School|Старшу лицарську школу]]
var substitution = function(match, p1, p2, p3, p4) {
return '[[:' + p2 + ':' + decodeURIComponent(p3).replace(/_/g, ' ') + '|' + p4 + ']]';
};
return wikimarkup.replace(
/\[([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/wiki\/(\S+)\s+([^\]]+)\]/g,
substitution
).replace(
/\[([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/w\/index\.php\?title=([^& ]+)[^ ]*\s+([^\]]+)\]/g,
substitution
).replace(
/<ref>.*?([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/w\/index\.php\?title=([^& ]+).*?\|title=([^|]+).*?<\/ref>/g,
substitution
);
};
var fix_np = function(wikimarkup) {
// Замінити [[:en:Article|asfd]] на {{нп|Article|asfd|en|Article}}
return wikimarkup.replace(
/\[\[:?w:(\w{2}):/g,
'[[:$1:'
).replace(
/\[\[([^\]\|]+)\|([^\]\|]+)\]\]\s*<sup>\s*\(?\s*\[\[:(\w+):([^\|]+)\|[^\]]+\]\]\)?\s*<\/sup>/g,
'{{нп|$1|$2|$3|$4}}'
).replace(
/\[\[([^\]\|]+)\]\]\s*<sup>\s*\(?\s*\[\[:(\w+):([^\|]+)\|[^\]]+\]\]\)?\s*<\/sup>/g,
'{{нп|$1||$2|$3}}'
).replace(
/\[\[\s*:\s*(\w{2})\s*:\s*([^\]\|]+)\|?([^\]]+)?\]\]/g,
'{{нп|$2|$3|$1|$2}}'
);
};
var fix_ref_names = function(wikimarkup) {
// атрибути мають бути в лапках
return wikimarkup.replace(
/<ref\s+name\s*=\s*(\w*)\s*>/g,
'<ref name="$1">'
);
};
var apply_change = function(change, comment) {
var old_value = document.editform.wpTextbox1.value;
try {
document.editform.wpTextbox1.value = change(
document.editform.wpTextbox1.value
);
} catch(err) {
alert('Помилка в зміні "' + comment + '":\n' + err.message);
}
if(document.editform.wpTextbox1.value != old_value) { // if changed
// add comment
if(document.editform.wpSummary.value.trim()) {
document.editform.wpSummary.value += ', ';
}
document.editform.wpSummary.value += comment;
}
};
$('#wpTextbox1').wikiEditor('addToToolbar', {
section: 'advanced',
group: 'format',
tools: {
"wikifixer": {
label: 'Перекласти шматки статті',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/8/8c/Farm-Fresh_scripts_text.png',
action: {
type: 'callback',
execute: function(context) {
improve();
$('#wpDiff').trigger('click');
}
}
}
}
});
});