I have been learning German for a few years now and no, I’m not fluent, and yes I haven’t been as consistent as I should have but I get better every day… or week. To keep it interesting, some say messy, I’m always trying out new ways to learn the language: apps, grammar books, fill-the-word exercises, short stories, magazines, German TV shows, eavesdropping on my German partner’s phone conversations with her friends, etc.
Short stories have been one of my favorites and probably my most consistent method to practice. However, I think there are a few things that could be better when learning a language with short stories:
◘ You should be able to tap on a word and get a translation. Often you can guess the meaning from its context but if you can't, it's really useful to be able to get it without having to leave the story. ◘ Ability to adjust the level of the short story (beginner, mid, advanced). ◘ The stories should be available everywhere; no need to carry a book around. I probably won't be able to use the book in the office. ◘ Have a mentor available 24x7 that can answer any question about grammar or about the story. ◘ I want to test my understanding at the end of the short story with questions. Bonus points if someone checks my answers for correctness. ◘ Include audio to hear the pronunciation and sounds of the language.
That’s how I decided to create an app for German short stories; and eventually other languages too. It’s calle Webbu and you can use it here webbu.app.
Embarking on this journey is also a new item for my list of ever-growing ways of learning German. Apart from writing the code for the app, one of the most time-consuming parts is writing quality stories and making sure the language is idiomatic and grammatically correct.
My first story had a few issues (see the comments here) but overall the reception was good and a few people subscribed and started using the service regularly. All that feedback has been making the app a lot better.
Now let’s get into the details. Over the last months, I have been streamlining the process that takes a story from my head and puts it on the front page of Webbu. From concept to published.
As the image shows, first I think of a topic for the story. Then, using large language models (LLMs) – like ChatGPT – I generate the initial text, one for each language and each level (beginner or advanced for now). Once the text is ready, a native double-checks that everything reads alright. The next step is to generate all the media and extras: images, sound, practice questions, and translations. Finally, I publish the story and sync the media to the CDN for fast delivery and a good user experience.
Translations and more
Now that we have the stories, let’s focus on providing useful information when the user taps on an unfamiliar word. Ideally, we want to provide the translation for that word. But we can’t just do a lookup in the dictionary because words can have different meanings depending on the context/sentence. Words that have the same spelling but a different meaning are called homonyms.
For example, the word “left” has 2 different meanings in the sentence “I left my phone on the left side of the room”. The word “play” also stands for multiple concepts in “While they are at the play, I’m going to play with my kid”.
To achieve the correct translation, Webbu doesn’t just translate the word. Instead, it translates the entire sentence and finds the meaning of that word within the context of the sentence. Fortunately, LLMs have become good at helping with these translations. Initially, I wanted to minimize my usage of LLMs because it costs money so I would translate a word only after a user taps on it. However, people complained that it was too slow to see translations as they would have to wait for the LLM to process the request. To improve the user experience, now all translations are done before the story is published.
This is how the translation feature looks now:
I know that the translation box could look a bit better. It will. For now, at least the essential information is there.
More than just translations
Additionally, concepts or verbs appear in different forms according to their role in a sentence. Let’s see a few more examples. Now think of Julie, she goes by the pronoun “she/her”. If Julie has done something, we say
“She has taken the dog to the park”
If someone gave something to Julie, we say
“Mario gave her a book”
These different behaviors are called cases. There are many cases and their importance varies in each language. In German, they are VERY important. A brief, and not 100% accurate summary of cases goes as follows:
- Nominative: used for the subject, the person/entity taking the action. Usually, it’s the answer to “Who?”
- Accusative: the entity receiving the action, usually called the direct object. The “what”.
- Dative: appears in sentences where something is being given/done to/for an entity. a.k.a indirect object.
- Genitive: indicates possession.
Example:
You kicked the ball
^ ^
Nominative Accusative
The ball hit you
^ ^
Nominative Accusative
That looks simple but let’s look at those 2 sentences in German sentences to showcase how things change:
Du hast den Ball getreten
--------
^ ^
Nominative Accusative
Der Ball hat dich getroffen
-------- ----
Nominative Accusative
Note how “you” (“du”) is different when it appears as nominative versus when it appears as accusative. “Du” becomes “dich”. And now look at “the ball”; it goes from being “den Ball”, to “der Ball”. This and the fact that German has 3 genders (not just feminine and masculine, but also neutral), makes things very complicated:
Well, hopefully, that convinces you that knowing the case of a word can be useful too. Webbu also shows whether the word is plural, its gender, and the verb tenses.
Future work
I have a lot of things planned out for the future, including being able to do voice-to-voice conversations with the tutor and improving the aesthetics of that translation box 😁. I would love to hear your thoughts, ideas, or feedback. As always, either drop a comment, write me an email, or contact me at @purplehoisin for anything! Cheers.