11let enabled = true ;
2- let targetLanguage = 'es' ;
2+ let targetLanguages = [ 'es' ] ; // Default to Spanish
3+ let lastWord = '' ;
4+ let translationTimeout = null ;
35
4- chrome . storage . sync . get ( [ 'enabled' , 'language ' ] , function ( result ) {
6+ chrome . storage . sync . get ( [ 'enabled' , 'languages ' ] , function ( result ) {
57 enabled = result . enabled !== undefined ? result . enabled : true ;
6- targetLanguage = result . language || 'es' ;
8+ targetLanguages = result . languages || [ 'es' ] ;
79} ) ;
810
911chrome . storage . onChanged . addListener ( function ( changes , namespace ) {
1012 if ( changes . enabled ) {
1113 enabled = changes . enabled . newValue ;
1214 }
13- if ( changes . language ) {
14- targetLanguage = changes . language . newValue ;
15+ if ( changes . languages ) {
16+ targetLanguages = changes . languages . newValue ;
1517 }
1618} ) ;
1719
18- function translateWord ( word ) {
19- return new Promise ( ( resolve , reject ) => {
20- chrome . runtime . sendMessage ( { action : 'translate' , word, targetLanguage} , response => {
21- if ( response . error ) {
22- reject ( new Error ( response . error ) ) ;
23- } else {
24- resolve ( response . translation ) ;
25- }
26- } ) ;
27- } ) ;
20+ function translateWord ( word , languages ) {
21+ return Promise . all ( languages . map ( lang =>
22+ new Promise ( ( resolve , reject ) => {
23+ chrome . runtime . sendMessage ( { action : 'translate' , word, targetLanguage : lang } , response => {
24+ if ( response . error ) {
25+ reject ( new Error ( response . error ) ) ;
26+ } else {
27+ resolve ( response . translation ) ;
28+ }
29+ } ) ;
30+ } )
31+ ) ) ;
32+ }
33+
34+ function updateWordDisplay ( wordElement , originalWord ) {
35+ if ( originalWord !== lastWord ) {
36+ lastWord = originalWord ;
37+ clearTimeout ( translationTimeout ) ;
38+
39+ translationTimeout = setTimeout ( ( ) => {
40+ translateWord ( originalWord , targetLanguages ) . then ( translations => {
41+ const allWords = [ originalWord , ...translations ] ;
42+ const displayText = allWords . join ( ' - ' ) ;
43+
44+ // Adjust font size if the text is too long
45+ if ( displayText . length > 30 ) {
46+ wordElement . style . fontSize = '52px' ;
47+ } else {
48+ wordElement . style . fontSize = '72px' ;
49+ }
50+
51+ wordElement . textContent = displayText ;
52+ } ) . catch ( error => console . error ( 'Translation error:' , error ) ) ;
53+ } , 500 ) ; // Wait for 500ms before translating
54+ }
2855}
2956
3057const observer = new MutationObserver ( mutations => {
@@ -34,10 +61,8 @@ const observer = new MutationObserver(mutations => {
3461 if ( mutation . type === 'childList' ) {
3562 const wordElement = document . querySelector ( '#rs-word span' ) ;
3663 if ( wordElement ) {
37- const originalWord = wordElement . textContent ;
38- translateWord ( originalWord ) . then ( translatedWord => {
39- wordElement . textContent = translatedWord ;
40- } ) . catch ( error => console . error ( 'Translation error:' , error ) ) ;
64+ const originalWord = wordElement . textContent . split ( ' - ' ) [ 0 ] ; // Get only the first word
65+ updateWordDisplay ( wordElement , originalWord ) ;
4166 }
4267 }
4368 } ) ;
0 commit comments