Psittacus iratus linguas docet ๐ฆ
The angry parrot teaches languages ๐ฆ
Psittacus is a lightweight, open-source tool, meant to facilitate language-learning and teaching, and with a vision to empower teachers and learners of any written+spoken language around the world.
Psittacus is based on the gamification of the sentence-mining approach, having an interface vaguely inspired by that of Duolingo and other competing interactive language learning-tools.
Psittacus aims at democratizing the process of language-learning and teaching, making it easy for teachers to prepare and collaborate on their own lessons, and share them in a standardized and easily accessible format.
- Language lovers in general. ๐
- Teachers of any language that need to share quick homeworks/lessons with their students. ๐
- Speakers of endangered languages that wish to preserve and spread their native tongue. ๐ฑ ๐ผ
- Conlangers that want the world to learn their constructed language. ๐ค
- And many more...
- Simple interface for lang-teachers to prepare lessons.
- Possibility to edit and extend existing lessons.
- Lessons are stored in an easily shareable format.
- Lessons can be taken fully offline, once downloaded/sideloaded.
- Support for audio playback of sentences.
- Support for hover-over-the-word definitions.
- Support for spaced repetition strategies and automatic lesson scheduling.
https://psittacus.eu.pythonanywhere.com/
Download this test lesson-file and try it out on Psittacus (open it with "Take Lesson" on the main-menu of the web-app). Watch the Demo for more help.
Lesson File Format
A 'lesson' comprises: sentence-pairs, word-definitions and audio-data. Each single lesson is made up of multiple 'propositions'. Each proposition expresses an idea in two different languages. The information of a lesson is stored in the widely-known json format, and can be shared as a simple text file.
{
"metadata" : {},
"propositions" : [proposition1, proposition2, proposition3, ...],
"explanation" : {text : "<h1>some in-depth explanation of the lesson...</h1>"}
}
{
"target_language" : "target lang",
"source_language" : "source lang",
"author" : "author-or-authors",
"title" : "lesson_subject_and_or_number",
"last_modified" : 1644144766547
}
(More metadata may get added to lessons in the future).
Contains 'text', which is an html string of styled text, it can include external resources such as links to other pages or linked multimedia content. It can serve both as a theoretical introduction to the lesson for the student, or as a container for more insights related to the practical exercises (propositions) in the lesson.
{
"sentence_one" : "ciao mondo",
"sentence_two" : "hello world",
"word_dict" : {"ciao":"hello", "mondo":"world"},
"reverse_dict" : {"hello":"ciao", "world":"mondo"},
"audio_base64" : "data:audio/mpeg;base64GkXfo5...",
"target_to_native" : true
}
- sentence_one: the sentence in the target language (ie: the language the student wishes to learn).
- sentence_two: the same idea expressed in the student's language.
- audio_base64: the audio of sentence_one (in the target language) recorded by a native or proficient speaker. Encoded as audio-data in base-64.
- target_to_native: true if the user should be asked to translate from the target language to his/her native one, false otherwise.
- word_dict: a dictionary that provides a brief description of each word of the target lang.
- reverse_dict: a dictionary that provides a brief description of each word of the source lang in terms of the target lang.
-
A 'word' here simply means: 'a string of unicode characters surrounded by spaces'.
-
The definition can and should be made up of more words, and may eventually include a brief analysis of the grammar (tense, gender, case markings...) if that helps the student understand the context better. In more 'advanced' lessons, this brief definition may be provided in terms of the target language, for those who favor a full-immersion approach.
Testing
(You have to have yarn or npm installed).
... and open up its directory.
yarn install
yarn run build
Copy and paste the full path of:
/psittacus/dist/index.html
... to your browser's navigation bar.
- Use:
yarn run dev-build
to generate an un-minified developer build (easier to debug).
And maybe consider doing this in jsconfig.json
:
"checkJs" : true
(This option is far too annoying to stay on all the time, and doesn't even catch all of the errors for lack of information).