Hi all, I probably seem like a new face around here (perhaps for lack of a successful YouTube channel) but I work with Robin as a developer on Journaly (and I read most the posts in the feed, at least the ones I can read!). While I've made quite a few lorem ipsum posts in my time on the project I realized the other day that I've never actually published a post on Journaly so I thought sharing some of the less boring details of creating a language learning tool would be a good place to start.
A lot of what goes into building Journaly is pretty standard stuff from the software development perspective, but dealing with multiple languages, particularly in a product aimed at language learners, presents some unique challenges. Internationalization (or "i18n", as lazy programmers like me usually call it) is very important to us since getting a variety of native speakers on the platform is a key to getting folks really high quality feedback. Right now if you want to come here and post you have to be able to read enough English to navigate the UI, but we don't want this to be a limitation forever, people who can't read English or are in the early stages of language learning are a huge important demographic!
One interesting aspect of i18n is the names of languages themselves. I haven't given it much thought before this project, but the names we use to refer to languages in English are often significantly different than the names that native speakers would use to refer to their language. As an example, the language English speakers refer to as "German" is called "Deutsch" by native speakers of that language. Even names of languages have to be translated! Words like "German", where the name for something in a language outside of the language it originated in differs from the name for it in the language it describes or originated in is called a "exonym" or "xenonym". The opposite of this would be an "endonym", which would describe internal names for languages such as " Deutsch" or "日本語".
For a bit of technical nitty gritty on the Journaly internals: right now languages that you can write posts in or add as learning/native languages are represented as rows in a languages table, they carry a "name" field which is the English word for a languages and currently there is no mechanism for translating them as this was one of the first tables the project ever had. However for post topics, we decided to tackle the translation issue and the approach ended up being to create a "Topics" table that represents a language-agnostic topic. This table has a "devName" field that carries the English name for a language, just to help us poor English developers know what's going on, but translated topic names live in a separate table. Translated names are identified by a unique combination of the language agnostic topic they relate to and the language the translation is in. When the code that runs in a browser asks for a topic, it provides a "ui language", that is the language that a user is viewing the site in, and joins to the topic translation table to select a translated name for the topic. In this way we can present localized names of topics to users using the site in a language other than English. Because of the exonym situation this same approach is going to have to be applied to the languages table as well.
Right now we haven't translated the UI to any other languages, but it's up there on the todo list! We haven't fully decided what the first language(s) we're going to attempt to translate the UI to yet, but some we're considering are Spanish, German, and French are strong contenders since these are the number 2, 3, and 5 most common native languages on the platform at the moment after English. Mandarin and Japanese are also in consideration to help flush out bugs related to the UI being in languages with idiographic writing systems.
One parting thought: the word "exonym" itself, while clearly from Greek roots, seems to have been coined in English. Google translate wasn't able to offer me a translation into any other language I tried. So a question to native speakers of languages other than English: is there a word in your language for exonyms, other than using "exonym" as a loanword? If so, would that word be autological (fancy word of the day for a word that describes itself)?
Happy journaling y'all!
Hi, in German it's "Exonym". But the word is used just in linguistic sciences, I guess. (Other languages: see https://en.m.wikipedia.org/wiki/Endonym_and_exonym ) Actually, the exonym/ endonym problem is one of the first things I noticed on Journaly. I guess, native English speakers would never 'stumble' while looking for their target language in the language list. But a native French student learning German would first look for the word "Allemand" and then "Deutsch". "German" would be the third step, I guess. Same with a native Italian looking for "Giapponese" or "日本語" instead of "Japanese".
I wished for a list of languages with just their native names (-> endonym) , cause I feel like it would be more intuitive , because a learner knows the name of the language he is learning. ( I got the idea from Wikipedia, while switching between languages.)
But I never thought about the process behind the screen... I hope you'll find a solution!
Hi Maria! That's a really good point on languages learners probably being able to identify their target language's endonym. I think there's a little value in having your native language's exonym available just in offering some visibility into what's going on in other language spheres (this is something we as maintainers care about, and I could see it being of interest to users too) but that's pretty minor relative to being able to better serve non native English speakers, so we'll probably be switching to using endonyms pretty soon and revisit language name translations down the road. Thanks for the insight!
This is off topic, but I don't know where else to send the feedback. The last few days I have been trying to use Journaly more actively (posting and commenting instead of just lurking) and I have encountered a problem worth mentioning. You have probably already thought about it, but I wanted to point out that it might be more important than you think. Anyway, with only one post and two comments under my belt I already feel a bit confused about how to make sure that I wont miss any replies directed to me. The post where I made my first comment is already old enough to not be readily visible if I look at my feed. What if this particular user is temporarily absent and return with a follow up question on the recommendations I made? Some kind of notification system would be very useful, and in the long run even necessary. I realize that you are still working on some of the core functions, and their underlying structure, but I guess I just wanted to say that being notified about replies and comments kind of is a core function. Well, to be honest I haven't received any comments so far, so I don't know if you already have something in place. If that is the case the existence of this function should probably be more obvious. If not, one simple solution would be to add two new variables to the "My Feed" page. If I could display only the posts where I have been active (including both my own posts and any post where I have commented) and sort them on the time of the most recent comment instead of the time of the post, the problem would be solved, more or less.
Hey @JaiZouzou. Yeah, notifications are definitely core functionality. Right now we’re leaning on email for that, when someone comments on your post, or creates a thread (the highlighted parts of a post body), or posts in a thread you’ve participated in, you should get an email notifying you of that. The current limitations with the email approach is that we don’t have batching (so you get an email per one of those things, which can get a bit overwhelming if you have a lot of comments) and you don’t get notified when someone replies to you on someone else’s post comments (so you wouldn’t get an email for this comment I’m making). The latter of those should be fixed soon, Robin put up a PR for it just yesterday. We’re hoping to get the former fixed by the end of the year.
Ultimately we do want “in-app” style notifications since that’s usable for promotional stuff too, but that’s a bit further down the road.
We do appreciate the feedback though! Understanding pain points and what we can do to make things more obvious is definitely helpful!
Good to hear that you already have a partial solution in place. I'm looking forward to the in-app style notifications, but you probably have a lot of other things that are more pressing. Anyway, its nice to be able to see the site develop from an early stage. Especially since I imagine that Journaly is going to become one of the greatest language practice resources online some day.
This was a really great discussion! Sorry I joined late but thank you both @Maria and @jiaZuozuo for your input on this. We're in the middle of converting all the language names over thanks to the suggestions that came out of this discussion, and me and @Lanny JUST released the email notification batching feature a few minutes ago! 🙌🏼 So now users will receive one single email per day that summarizes all comments and feedback from the last 24 hours, and soon we will include any "thanks" received in that email as well. After that we'll be working hard to build "in-app notifications" and then we can finally create some settings/preferences so that people can choose how they want to be notified.
Thank you everyone for supporting us, it's so amazing to see the platform and community growing!