Git Product home page Git Product logo

librelingo / librelingo Goto Github PK

View Code? Open in Web Editor NEW
1.9K 25.0 208.0 2.35 GB

🐒 🌎 πŸ“š a community-owned language-learning platform

Home Page: https://librelingo.app

License: GNU Affero General Public License v3.0

JavaScript 14.65% HTML 4.29% Shell 1.69% Python 46.78% Gherkin 5.46% SCSS 0.65% TypeScript 25.84% Makefile 0.26% Go 0.09% Dockerfile 0.29%
language-learning education foreign-language spaced-repetition second-language-acquisition flashcards svelte agplv3 hacktoberfest python

librelingo's Introduction



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 call Mastodon

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.

If you want to know why I built LibreLingo, I recommend reading my article on dev.to.

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

  • 🏁 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

  • Officially releasing Basque course
  • Make it possible to contribute to courses through GitHub
  • Improving course creation UX over Github

Projects

Contribution

Become a contributor

are you a developer?

You can help LibreLingo by testing it and submitting feature requests or bug reports: here. If you want to get in touch, you can use my contact details on my GitHub profile. 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

librelingo's People

Contributors

airon90 avatar allcontributors[bot] avatar arturba avatar dependabot[bot] avatar dhelmr avatar dimkard avatar doamatto avatar dushyantbhardwaj9 avatar eltociear avatar gdomingu avatar gkydev avatar iasonasma avatar imgbot[bot] avatar imgbotapp avatar kantord avatar lamdarer avatar mellishim avatar navanchauhan avatar oscarfrancois avatar panditita avatar qbecb1zen avatar renovate-bot avatar renovate[bot] avatar rgbradley avatar sinhalaquiz avatar szabgab avatar vil02 avatar wesleymutwiri avatar zinovik avatar zmbc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

librelingo's Issues

Consider using Wikidata lexemes

Just a suggestion: consider using Wikidata lexemes which are released under CC0 license, either in creating lessons (just a complex query and you have a list of element ready to be used) or in linking elements of lessons to the corresponding Wikidata item (so that people can learn more and improve items)

federation of social features through ActivityPub

I just found out about this project through a friend posting about it on the fediverse and I also made a post about it right after. I have a specific interest in building a language learning project that would federate its social aspects (like the shared leader board that duolingo has, and maybe sharing some sort of daily streak activity) with the fediverse. I have been talking to people about this for over a year now and have had a number of people message me that they were interested in this idea as well.

ActivityPub link if you are not familiar with it.

Not sure if this is out of scope for this project, but if you were interested in LibreLingo being social at all please think about the fediverse as a base to build upon. And I along with many others on the fediverse are very excited about this project and want to help and contribute regardless.

How to deploy the website?

I cant find any way to deploy this website on my own, eg for debugging. It might also be useful to create seperate instances run by different course creators.

So what exactly are the dependencies, and is there some command I can run in this repo to get the website running on localhost? And hopefully you have some nginx config and letsencrypt to handle tls.

Add on-screen keys for special characters

While going through the "animals" example course, I discovered that when leΓ³n was asked the answer leon (without accent) is still accepted as correct.

Is this intended behaviour or are you normalising the string to heavily before comparison? IMHO learning where to set accents in words is an important part of learning a language.

Apart from that, keep up the nice work.

Implement code coverage

Challenges

  • We need to combine multiple test runner results (Django + Jest + Cypress)
  • codecov.io would make that easy, but it seems like it doesn't work with Semaphore 2.0
  • We want coverage for Cypress tests, but it isn't trivial to set up with Svelte yet (what I found: https://github.com/bahmutov/cypress-and-jest)

Expected behavior

  • We have a single combined coverage percentage for the entire codebase
  • There's a way to see which lines lack coverage
  • Coverage is enforced in the CI

Ideate about tracking

This issue only about designing/debating a solution. For the actual implementation, new issues can be created.

In order to improve the application, some behavior tracking might be useful. This would include things like:

  • acquisition sources
  • time spent on site
  • number of visitors (search engines excluded)
  • activity on the site (events)

The following requirements should be met:

  • For users who are not logged in, cookies should not be used and the tracking should be anonymous
  • Any privacy-protection tool or browser setting that is useful for the users should be supported
  • For logged in users, any data recording that is not necessary should be optional, but cookies can obviously not be avoided in this case
  • The project doesn't have any stable founding right now, and I also want to minimize any costs, so a solution that would cost (a lot) of money will probably be discarded

We might also create a completely separate deployment for a separate version that has all the tracking features removed from the binary code. This might be achievable with a build tool, maybe there's a webpack plugin that let's you mock files/dependencies with a something that doesn't actually do anything. This might be overkill though, since this isn't exactly the most privacy-sensitive app ever made 😸

It might be also nice if some aggregated/anonymized data could be released publicly, so that data analysts could analyze it.

Transitions between challenges within a lesson are a bit broken

  • Sometimes for a split second, the previous and current challenge are visible at the same time, which results in flickering
  • When the lesson is finished, the transition looks weird

This should be a good first issue if you are experienced in implementing animations, especially if you are good with Svelte.

Pictures used for the platform

For the pictures, i'd recommend also using a platform Unsplash:

The internet’s source of freely usable images. Powered by creators everywhere.

The photos are in my understanding free to download/use with no copyright. Check it out.

You could also add a readme with links for the sources of images that you use.

Improve ChallengePanel layout on wide screens

Looking for proposals/pull requests on how to improve the design.

As per @Deuchnord says:

The alert is great, but not really adapted to wide screens. It might be better to move it closer to the form on these devices to make it more visible and thus, more accessible, mightn't it?

see original thread: #66 (comment)

[Suggestion] Consider a non latin alphabet language early

Hi.

This is a great project.
I have one suggestion and maybe you have considered it already.

Consider a language very different to a european one like Chinese early on. Maybe create some small sample course fragments to test code against.

One big difference is that you have the chinese letters, which of course would be the answer to translation questions. However as a beginner you fist learn PinYin which is a translation of chinese symbols to the latin alphabet.

This means, for beginner you probably want to support two correct translations, as you usually learn the chinese letters later and you can only answer using PinYin.

If your objective is more to speak chinese than to write you might not learn the chinese letters at all..

Just a thought.

Feel free to close

ListeningChallenge: voice recording is unnnecessarily repeated

Once the challenge is successfully completed, the voice recording is repeated. This is not as intended, since this is completely unnecessary. It's possibly a bug resulting from how and when the sound is played, maybe related to component life-cycle management

Translating platform

I'd recommend Weblate as a translating platofrm for the community to translate any part of the platform / app, strings, words etc. Many opensource projects, apps etc. use it and Weblate itself is opensource and you can host it yourself if you wanted to. For Opensource projects, the use of Weblate is completely free and hosted by them, you just need to write a form to request their hosting of the translations for the platform on the Hosting page (gratis Plan). Then you can put a translation progress widget to github page so anyone can see the progress of language translations and click it to translate.

Improve "fanfare screen" design

This screen:

Screenshot_2020-02-11 LibreLingo - learn food in Spanish for free

is a little bit too bland to say the least. It would be nice to make it a bit more fun. Design suggestions are welcome (so are pull requests or implementation proposals!)

Check out Bulma's documentation for a gallery of elements we can use right away with almost no effort: https://bulma.io/documentation/

Looking for a mascot

This is not an urgent issue, but I think LibreLingo could do with a nice mascot animal 😸 I was thinking maybe of a turtle or a cat, with some nice personality, but I'm open to any suggestions.

Ideally we would have at least a few different SVG designs with the same mascot, or a mascot that could easily be customized for different purposes or re-created in different scenarios.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.