-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweblatereplace.user.js
More file actions
146 lines (137 loc) · 4.32 KB
/
Copy pathweblatereplace.user.js
File metadata and controls
146 lines (137 loc) · 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// ==UserScript==
// @name Weblate Replace
// @author ranhai613
// @description This is a script that replaces certain parts of deepl translation in Weblate.
// @include /^https?://weblate\.hyperq\.be/translate/.*$/
// @version 2.1
// ==/UserScript==
(() => {
let pattdict = {
'......': '……',
'...': '……',
'!': '!',
'?': '?',
'よそ者': 'よぉそ者',
'多元宇宙': 'マルチバース',
'ナメクジ': 'スラッグ',
}
let firstpers = {
'わ': {
'kanji': '私',
'hira': 'わたし',
'plural': '私たち',
},
'ぼ': {
'kanji': '僕',
'hira': 'ぼく',
'plural': '僕たち',
},
'お': {
'kanji': '俺',
'hira': 'おれ',
'plural': '俺たち',
},
'う': {
'kanji': 'ウチ',
'hira': 'ウチ',
'plural': 'ウチら',
},
}
let secondpers = {
'あ': {
'kanji': 'あなた',
'hira': '貴方',
'plural': 'あなた達',
},
'き': {
'kanji': '君',
'hira': 'きみ',
'plural': '君たち',
},
'お': {
'kanji': 'お前',
'hira': 'おまえ',
'plural': 'お前たち',
},
'ん': {
'kanji': 'あんた',
'hira': 'あんた',
'plural': 'あんたら',
},
}
let personarry = [firstpers, secondpers];
let onclick = false
let textarea = document.getElementsByClassName('translation-editor')[0];
textarea.addEventListener('input', () => {
textarea.value = PersonReplace(textarea.value);
if (!onclick) return;
textarea.value = Convert(textarea.value);
onclick = false;
});
let parent = document.getElementById('machinery-translations');
let observer = new MutationObserver((mutations) => {
mutations.forEach(() => {
let copybtns = parent.getElementsByClassName('js-copy-machinery');
let copybtn = copybtns[copybtns.length - 1];
copybtn.addEventListener('click', () => {
onclick = true;
});
});
});
let config = {
childList: true
}
observer.observe(parent, config);
function Convert(text) {
let textarry = text.split(/["「」]+/);
for (let i = 0; i < textarry.length; i++) {
if (i % 2 == 1) textarry[i] = `「${textarry[i]}」`;
}
let newtext = textarry.join('');
for (let key in pattdict) {
newtext = newtext.replaceAll(key, pattdict[key]);
}
return newtext;
}
let searchtxt = '(';
personarry.forEach((dict) => {
searchtxt += '[';
for (key in dict) {
searchtxt += key;
}
searchtxt += ']';
});
searchtxt += '「)';
let searchpatt = new RegExp(searchtxt);
let kanjiarry = new Array(2), pluralarry = new Array(2);
personarry.forEach((dict, i) => {
let patttxt = '';
for(let key in dict){
patttxt += `|(${dict[key]['kanji']})|(${dict[key]['hira']})`;
}
patttxt = patttxt.substring(1);
kanjiarry[i] = new RegExp(patttxt, 'g');
let pluraltxt = `(${patttxt})(達|(たち)|ら)`;
pluralarry[i] = new RegExp(pluraltxt, 'g');
});
function PersonReplace(text) {
let textarry = text.split(searchpatt);
if (textarry.length < 2) return text;
let newtext = textarry[0];
for (let i = 1; i < textarry.length; i++) {
if (i % 2 == 1) {
let targetarry = textarry[i + 1].split('」');
personarry.forEach((dict, j) => {
for (let key in dict) {
if (textarry[i][j] == key) {
targetarry[0] = targetarry[0].replaceAll(pluralarry[j], dict[key]['plural']);
targetarry[0] = targetarry[0].replaceAll(kanjiarry[j], dict[key]['kanji']);
}
}
});
newtext += '「' + targetarry.join('」');
}
}
return newtext;
}
})();