Skip to content

Latest commit

Β 

History

History
402 lines (329 loc) Β· 46.7 KB

README.md

File metadata and controls

402 lines (329 loc) Β· 46.7 KB



LibreLingo
a community-owned language-learning platform


This project is using Percy.io for visual regression testing. GitHub release (latest by date) Build status Matrix

Disclaimer

All the credit for this project goes to DΓ‘niel KΓ‘ntor for its creation and design.
The owner of this repository doesn't want any kind of merits, as them goes only to the creator and project's contributors.

This project is simply a fork born from his original idea, created to continue to allow members to contribute, since communication with the original owner was difficult and often without replies and therefore hindered.

We deeply appreciate his work and vision, and this fork aims to ensure the project continues to grow and evolve with the community's involvement.

If there are any broken links in the docs or in the repo, please open an issue so we could work to fix it!

Why LibreLingo Community?

LibreLingo is the original project of DΓ‘niel KΓ‘ntor.
Unfortunately, LibreLingo's software stopped working because of Svelte problems that haven't been fixed for two years. In the meantime DΓ‘niel also decided to use another framework.

So the project was paused until 2025, when @giorginogreg forked it, fixed the Svelte Issues (and other bugs), and revived it for the community.

The LibreLingo Community was born. This also means that this course only works with LibreLingo Community at the moment, as LibreLingo is still broken.

(Thanks to @kate for having helped writing this!)

Developing

Once you've created a project and installed dependencies with npm install (or pnpm install or yarn), start a development server:

npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open

Downloading static assets

In order to make the app works correctly, you should have installed git lfs in your computer, to download all the assets needed.

Once installed git-lfs, run these commands:

git lfs install

git lfs pull

About

LibreLingo's mission is to create a modern language-learning platform that is owned by the community of its users. All software is licensed under AGPLv3, which guarantees the freedom to run, study, share, and modify the software. Course authors are encouraged to release their courses with free licenses.

Here there is an article of why the original author has built LibreLingo.

Table of Contents
  1. About
  2. Using LibreLingo
  3. Developing LibreLingo
  4. Milestones
  5. Roadmap
  6. Contribution
  7. License
  8. See also
  9. Donate

Using LibreLingo

Web app

LibreLingo offers an official web app, which is very lightweight and written in Javascript using Svelte framework and pouchDB by the way, to try out LibreLingo courses interactively right in your browser, no installation required!

Features

  • 🏹 practice using interactive exercises
  • 🀹 spaced repetition
  • πŸ“Š save and monitor progress
  • πŸ”„ synchronise progress across multiple devices
  • πŸ“± works on various devices such as phones, tablets and desktop computers
  • πŸ§‘β€πŸ€β€πŸ§‘ owned by you, the community
  • πŸ•ŠοΈ most courses are free, as in freedom and also as in beer

Screenshots

librelingo-yaml-loader

librelingo-yaml-loader is a Python 🐍 package that lets you load LibreLingo courses to create software based on LibreLingo. To see an extensive tutorial, check out this article.

Setup

librelingo-yaml-loader can be installed using pip:

pip install librelingo-yaml-loader

Loading courses in a Python program

You can use librelingo-yaml-loader to load YAML-based LibreLingo courses in your Python program.

from librelingo_yaml_loader import yaml_loader

course = yaml_loader.load_course("./path/to/my/course") 

load_course returns a Course() object.

librelingo-json-export

librelingo-json-export is a Python 🐍 package that contains modules that let's you export LibreLingo courses into JSON files that will be read by the web app. This might be useful if you want to deploy YAML-based LibreLingo courses as a web app.

Setup

librelingo-json-export can be installed using pip:

pip install librelingo-json-export

Exporting courses to JSON

librelingo-json-export has a command line program that can export YAML-based LibreLingo courses into the JSON format used by the web app.

Usage:
  cli.py [OPTIONS] INPUT_PATH OUTPUT_PATH
    Convert a YAML course into a JSON course.
Options:
  --dry-run / --no-dry-run --help
    Show this message and exit.

Developing LibreLingo

Want to contribute to LibreLingo? Or create your own fork? Perhaps you want to use it in your creative project?

To get started with running the development environment on your computer and understanding the software architecture, head to our development documentation.

Milestones reached

  • 🏁 Demo course content in Spanish for English speakers
  • 🏁 Some basic building blocks of course content implemented
  • 🏁 Developers can use course editor
  • 🏁 Basic theme/branding
  • 🏁 Course progress can be properly synchronised across devices
  • 🏁 Course editor can be accessed by all course contributors
  • 🏁 At least the basics of the Spanish course are ready
  • 🏁 Most of the course building blocks are implemented
  • 🏁 All of the basic building blocks of courses are implemented
  • 🏁 Spaced repetition implemented

Roadmap

All the in-progress / future work is updated in the "Projects" Github section.

Starting Dev environment

for starting the frontend container, you should create an empty folder in the root, called node_modules. Then you can start running docker-compose up

Generating docs

Docker

For building all the docs that you see in https://librelingo.app/docs you can run the command docker compose exec -it app pdm run mkdocs build.

This command will read the src/mkdocs.yml file, will read the docs_dir path (in which all the .MD resides), and will generate the build outcome into the site_dir parameter. In this folder all the .html will be released.

For the sake of comfort, this path is mapped into the docker-compose.yml file, so files will be released into the mapped folders in your local system.

You could also start the serve command, so that you could edit live docs and see directly the outcome.

docker compose exec -it app pdm run mkdocs serve -a 0.0.0.0:8000

Then navigate at http://localhost:8000, and you should be able to see docs.

Note: in the docker-compose.yml file, you will find the volumes mounted with the :Z flag. This is for preventing environments with SElinux to cause issues in the containers.

Contribution

Become a contributor

are you a developer?

You can help LibreLingo by testing it and submitting feature requests or bug reports: here. Go through the dev docs here.

Still got questions? Our Matrix/FreeNode IRC channel is #LibreLingo, join the dev community there and feel free to ask anything.

  • Matrix: #LibreLingo on matrix.org
  • IRC: connect to irc.freenode.net with your favourite client and join #LibreLingo

are you a linguaphile?

Learning new language is an awesome experience right? If you wanna let others experience that too, make a course on LibreLingo! Get started here.

We are working on the process of creating courses, to make it more streamlined, if you have an idea to make it better, do share with us, create an issue. Note: You are always encouraged to release the courses under a free license.

are you a wordsmith?

Translate the LibreLingo UI(LLUI) to make it more accessible, you can start here.

Attributions

Mascot

The mascot is designed by @almostdesigner.

Creative Commons License
Mascot images are released under Creative Commons Attribution-ShareAlike 4.0 International License.

Contributors

All Contributors

Thanks goes to these wonderful people (emoji key):

Daniel Kantor
Daniel Kantor

πŸ’»
Klemen SkerbiΕ‘
Klemen SkerbiΕ‘

πŸ€”
Mirek Mazel
Mirek Mazel

πŸ€”
Chris Babcock
Chris Babcock

πŸ€”
Liaizon Wakest
Liaizon Wakest

πŸ€”
Trolli Schmittlauch
Trolli Schmittlauch

πŸ€”
JΓ©rΓ΄me Deuchnord
JΓ©rΓ΄me Deuchnord

πŸ€”
Felix Ableitner
Felix Ableitner

πŸ›
Navan Chauhan
Navan Chauhan

πŸš‡ πŸ’» 🎨 πŸ“–
Roshan Jossy
Roshan Jossy

πŸ€” πŸ’» πŸ“–
ledgelight
ledgelight

πŸ€”
Francis Tyers
Francis Tyers

πŸ€” πŸ“–
titanix
titanix

πŸ€”
Michael Moroni
Michael Moroni

🌍
pssandhu
pssandhu

🎨
Stefan Lobbenmeier
Stefan Lobbenmeier

πŸ›
kylepollina
kylepollina

πŸ’»
slesingerm
slesingerm

πŸ€” πŸ› πŸ‘€
iasonasma
iasonasma

πŸ’» ⚠️
Caroline Delesalle
Caroline Delesalle

🎨
borbota
borbota

πŸ›
decentral1se
decentral1se

πŸ“– πŸ€”
James Adams
James Adams

πŸ›
Arnold Schrijver
Arnold Schrijver

πŸ€”
Dale Visser
Dale Visser

πŸ›
oscarfrancois
oscarfrancois

πŸ“–
dhelmr
dhelmr

πŸ’»
Matt
Matt

πŸ‘€ πŸ› 🚧 πŸ’» πŸ“–
Jean-AndrΓ© Santoni
Jean-AndrΓ© Santoni

πŸ€” πŸ“– 🎨
Lucas Campos Teixeira e Nascimento
Lucas Campos Teixeira e Nascimento

πŸ“– πŸ€” πŸ›
Pooja Desur
Pooja Desur

πŸ“–
Wesley Mutwiri
Wesley Mutwiri

πŸ’»
Simon B.
Simon B.

πŸ€”
Karthik Shetty
Karthik Shetty

🚧
Joshua Ide
Joshua Ide

πŸ’»
Jobe Dylbas
Jobe Dylbas

πŸ’»
DÑvid KristiÑn Luterančík
DÑvid KristiÑn Luterančík

πŸ€” πŸ’»
Sai Sandeep Mutyala
Sai Sandeep Mutyala

πŸ’»
Artur Bauer
Artur Bauer

πŸ’»
Etza
Etza

πŸ’»
Kyle Mumma
Kyle Mumma

πŸ’» πŸ€”
zinovik
zinovik

πŸ’»
Himank Pathak
Himank Pathak

πŸ’» πŸ›
x4th
x4th

πŸ’»
Christian Dimas
Christian Dimas

πŸ’»
Marco Ciampa
Marco Ciampa

πŸ›
Joshua | DC7IA
Joshua | DC7IA

πŸ›
Reyzadren
Reyzadren

πŸ€”
Andreas
Andreas

πŸ“–
Marco H
Marco H

πŸ–‹
Dan OReilly
Dan OReilly

πŸ€”
Douglas Ferlini
Douglas Ferlini

πŸ’»
Michael Nock
Michael Nock

πŸ’» πŸ€”
davidak
davidak

πŸ€”
adnan360
adnan360

πŸ–‹ πŸ€” πŸ“–
Lamdarer
Lamdarer

πŸ“–
Luther
Luther

πŸ€”
Nart Tlisha
Nart Tlisha

πŸ›
Binyamin Aron Green
Binyamin Aron Green

πŸ“–
StΓ©phane Guillou
StΓ©phane Guillou

πŸ€”
Mohammad-Ali A'RΓ‚BI
Mohammad-Ali A'RΓ‚BI

πŸ–‹
RGBradley
RGBradley

πŸ–‹ πŸ€”
Cameron Radmore
Cameron Radmore

πŸ–‹ πŸ’»
Zeb Burke-Conte
Zeb Burke-Conte

πŸ“– πŸ’» πŸ›
Florian CUNY
Florian CUNY

πŸ€”
uberstar100
uberstar100

πŸ€”
Gabe D
Gabe D

πŸ› πŸ’»
Ekaterina Mozheiko
Ekaterina Mozheiko

πŸ’»
Gerardo Alcantara
Gerardo Alcantara

πŸ’»
JP Damas
JP Damas

πŸ’»
frostedkitsune
frostedkitsune

πŸ€” πŸ“–
sinhalaquiz
sinhalaquiz

πŸ› πŸ’»
Peter Cruckshank
Peter Cruckshank

πŸ’»
Gabor Szabo
Gabor Szabo

πŸ› πŸ’» πŸ€” πŸ“–
dimkard
dimkard

πŸ’»
Dushyant Bhardwaj
Dushyant Bhardwaj

πŸ’»
Piotr Idzik
Piotr Idzik

πŸ’»
Amine Louzar
Amine Louzar

πŸ’»
Najmieh Sadat Safarabadi
Najmieh Sadat Safarabadi

πŸ’»
Ben
Ben

πŸ–‹
CutThroat
CutThroat

πŸ’»
Rodrigo Pova
Rodrigo Pova

πŸ’»
Yulia
Yulia

πŸ’»
Sandra
Sandra

🎨 πŸ’»
Daniel Gallagher
Daniel Gallagher

πŸ’»
Frey0-0
Frey0-0

πŸ’»
rsk2
rsk2

πŸ’»
Joel NiemelΓ€
Joel NiemelΓ€

πŸ“–
Jeremy Kenny
Jeremy Kenny

πŸ’»
Abbi-Hackbardt
Abbi-Hackbardt

πŸ’»
Daniel Moreno
Daniel Moreno

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!

Contributors who don't have a GitHub account.

Since All Contributors relies on GitHub accounts to show user info, it's not possible to use it to credit people who don't have a GitHub account. This place is intended as a list of people who contributed without registering for a GitHub account.

License

LibreLingo is licensed under the AGPL-3.0 license. In addition, course content and other creative content might be licensed under different licenses, such as CC. This image shows a summary of the licensing of our dependencies:

FOSSA Status

See also

  • omnilingo, listening-based language learning

Donate

Help us to keep going

Others

  • Audio generation (wip) python3 /LibreLingo/app/librelingo_audios/cli.py /LibreLingo/courses/test-1/ /LibreLingo/librelingo-web/static/voice spanish-from-english

docker volume rm example_node_modules rm -rf local/path/to/node_modules mkdir local/path/to/node_modules