forked from mayeaux/generate-subtitles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-translated-files.js
139 lines (106 loc) · 3.65 KB
/
create-translated-files.js
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
const translateText = require('./libreTranslateWrapper');
const fs = require('fs-extra');
const projectConstants = require('./constants');
const { languagesToTranscribe, translationLanguages } = projectConstants;
const convert = require("cyrillic-to-latin");
let l = console.log;
if(global.debug === 'false'){
l = function(){}
}
// l('translationLanguages')
// l(translationLanguages);
//
// l('languagesToTranscribe')
// l(languagesToTranscribe);
function getCodeFromLanguageName(languageName){
return translationLanguages.find(function(filteredLanguage){
return languageName === filteredLanguage.name;
}).code
}
// l(getCodeFromLanguageName('English'))
// TODO: add the 'webvtt' thing and don't need these
function cleanUpSubtitles(language, text){
// l('clean up subtitles');
// l(language);
if(language === 'Spanish'){
// l('Spanish');
// l(language);
return text.replace(/-- título/g, '-->');
} else if(language === 'French'){
return text.replace(/-- Cancer/g, '-->');
} else if(language === 'German'){
return text.replace(/WEBVAT/g, 'WEBVTT');
} else if(language === 'Japanese'){
return text.replace(/ウェブサイト/g, 'WEBVTT');
} else {
// Russian works out of the box
return text
}
// can't get Chinese to work (seems a bit complicated)
}
/** for translation **/
async function createTranslatedFiles({
directoryAndFileName,
language,
websocketConnection
}){
const loopThrough = ['.srt', '.vtt', 'txt'];
// TODO: translate the rest
const srtData = await fs.readFile(`${directoryAndFileName}.vtt`, 'utf-8');
l('srtData');
l(srtData);
// copy original as copied
await fs.copy(`${directoryAndFileName}.vtt`, `${directoryAndFileName}_${language}.vtt`)
for(const languageToConvertTo of languagesToTranscribe){
l('languageToConvertTo');
l(languageToConvertTo);
l('language');
l(language);
try {
// no need to translate just copy the file
if(languageToConvertTo !== language){
websocketConnection.send(JSON.stringify({
languageUpdate: `Translating into ${languageToConvertTo}..`,
message: 'languageUpdate'
}), function () {});
// hit LibreTranslate backend
l(`hitting libretranslate: ${language} -> ${languageToConvertTo}`);
// TODO: to convert to thing
let translatedText = await translateText({
sourceLanguage: getCodeFromLanguageName(language), // before these were like 'EN', will full language work?
targetLanguage: getCodeFromLanguageName(languageToConvertTo),
text: srtData,
})
// l('translatedText');
// l(translatedText);
translatedText = cleanUpSubtitles(languageToConvertTo, translatedText);
translatedText = 'WEBVTT' + translatedText.slice(6);
// l('translatedText');
// l(translatedText);
await fs.writeFile(`${directoryAndFileName}_${languageToConvertTo}.vtt`, translatedText, 'utf-8');
}
} catch (err){
l(err);
l('error in translation');
return err
}
}
}
// const uploadDirectoryName = 'ef56767d5cba0ae421a9f6f570443205';
// const transcribedFileName = 'ef56767d5cba0ae421a9f6f570443205';
//
// const languageToConvertFrom = 'en';
// const languagesToConvertTo = ['es', 'fr'];
// async function main(){
// const completed = await createTranslatedSrts({
// uploadDirectoryName: uploadDirectoryName,
// transcribedFileName: transcribedFileName,
// languageToConvertFrom: languageToConvertFrom,
// languagesToConvertTo: languagesToConvertTo
// });
//
// l('completed');
// l(completed);
// }
// main();
module.exports = createTranslatedFiles;