-
-
Save fbecart/7abfde329e3f536160c0af1016e02b8b to your computer and use it in GitHub Desktop.
/** | |
* This bookmarklet makes it possible to transfer words from Leo Trainer to Anki. | |
* It is configured for fr-de (French to German) translations, but can easily be | |
* adapted to other languages. | |
* | |
* Prerequisites: | |
* - a Leo account (http://www.leo.org/) with a few words saved in the trainer | |
* - an Anki account (https://ankiweb.net/account/register) | |
* | |
* 1. Crunch the following code and add it to your bookmarks | |
* (see http://ted.mielczarek.org/code/mozilla/bookmarklet.html) | |
* 2. Run the bookmarklet | |
* (you might have to run it twice, as the first run will lead you to the correct Leo page) | |
* 3. Import the downloaded file in Anki using \t as field separator and allowing HTML in fields | |
**/ | |
// This is where you can adapt the script for other languages. | |
// `fromLang` is the language you know already, whereas `toLang` is the language you're learning. | |
const fromLang = 'fr'; | |
const toLang = 'de'; | |
function extractVocabulary() { | |
const output = []; | |
const matches = document.body.querySelectorAll('.tb-bg-alt-lightgray > tbody > tr'); | |
for (let index = 0; index < matches.length; index++) { | |
const item = matches[index]; | |
output.push([ | |
item.querySelector(`td[lang=${fromLang}]`).innerHTML, | |
item.querySelector(`td[lang=${toLang}]`).innerHTML, | |
]); | |
} | |
return output; | |
} | |
function downloadTsvFile(filename, content) { | |
const tsv = content.reduce((acc, cur) => acc + cur.join('\t') + '\n', ''); | |
const a = document.createElement('a'); | |
a.setAttribute('href', 'data:text/tab-separated-values;charset=utf-8,' + encodeURIComponent(tsv)); | |
a.setAttribute('download', filename); | |
document.body.appendChild(a); | |
a.click(); | |
} | |
const manageFolderUrl = 'https://dict.leo.org/trainer/manageFolder.php' + | |
`?lp=${fromLang}${toLang}&lang=${toLang}`; | |
if (location != manageFolderUrl) { | |
location = manageFolderUrl; | |
} else { | |
downloadTsvFile('vokabeln.csv', extractVocabulary()); | |
} |
Hi @eriwst, I updated the code to make it easier to customize the languages. Is that working for you?
Hi @fbecart,
I'm hoping to use this process to download my Leo dictionary and add it to Anki (English to German). However, nothing seems to happen when using the follow script as a bookmarklet. Does anything need to be updated? All your help is much appreciated!
`/**
- Source: Bookmarklet to export Leo Trainer words to an Anki deck.
- This bookmarklet makes it possible to transfer words from Leo Trainer to Anki.
- It only works for en-de translations. Contact me for other languages.
- Prerequisites:
-
- a Leo account (http://www.leo.org/) with a few words saved in the trainer
-
- an Anki account (https://ankiweb.net/account/register)
-
- Crunch the following code and add it to your bookmarks http://ted.mielczarek.org/code/mozilla/bookmarklet.html
-
- Run the bookmarklet on this page https://dict.leo.org/trainer/manageFolder.php?lp=ende&lang=en
-
- Import the downloaded file in Anki using \t as field separator and allowing HTML in fields
**/
- Import the downloaded file in Anki using \t as field separator and allowing HTML in fields
function extractVocabulary() {
var output = []
var matches = document.body.querySelectorAll('.tb-bg-alt-lightgray > tbody > tr')
for (var index = 0; index < matches.length; index++) {
let item = matches[index]
output.push([item.querySelector('td[lang=en]').innerHTML, item.querySelector('td[lang=de]').innerHTML])
}
return output
}
function downloadTsvFile(filename, content) {
var tsv = content.reduce(function (acc, cur) {
return acc + cur.join('\t') + '\n'
}, '')
var a = document.createElement('a')
a.setAttribute('href', 'data:text/tab-separated-values;charset=utf-8,' + encodeURIComponent(tsv))
a.setAttribute('download', filename)
document.body.appendChild(a)
a.click()
}
var manageFolderUrl = 'https://dict.leo.org/trainer/manageFolder.php?lp=ende&lang=de'
if (location != manageFolderUrl) location = manageFolderUrl
else downloadTsvFile('vokabeln.csv', extractVocabulary())`
@paulwiniecki I just tested the bookmarklet, and it seems to be still working.
The code snippet you posted is hard to read because of incorrect markdown formatting. I can see however that you have made more modifications than needed, and this is likely the cause of your troubles.
I suggest you restart from the code I shared at the very top. You only need to change line 19, so that it looks like:
const fromLang = 'en';
@fbecart thank you so much for your prompt response. I was able to get it to work following your instructions.
Dear Florent,
I would also like to export the English-German vocabulary from the LEO Trainer. May you please provide a working solution?
Kind regards
Eric