-
-
Notifications
You must be signed in to change notification settings - Fork 207
Description
Currently we use the engine translation features which allow us to translate lessons and practices partially: Every string is individually translated by calling the tr() function (This is also used to detect and extract strings to translate).
It works very well when you make a game because usually you only translate late in the production process when the content is relatively final. You ship a translation only when it's 100% complete.
For an app like this, we need to ideally be able to tweak the content freely. But a single letter or punctuation change invalidates a translation and, if we ship a release for the English version, it may prevent shipping e.g. the Chinese translations in the following release. This is in part because this is a free and open source project and translations are community made, aside from French/Spanish/small update patches to Japanese.
Suggested change of system
We could still use the tr() function from the engine to extract and maintain the translation strings.
However, this proposal is to build copies of the course in the target language at build time for a given version when translations are complete. Concretely, we would build probably lesson resource files like lesson.fr.tres, lesson.es.tres, etc.
Then, when we're about to build the next release, If the translations for a language are now incomplete, we keep the previous build files for that language.
Once we have done that, we can then address all the content paper cuts that people report or change the content without risking invalidating languages that have a full translation of the course.
There are many content improvements I have been holding on doing to avoid losing all the hard work contributed by the benevolent community contributors
Pre-requisites
Before implementing this feature, I would like to clean up whatever we can from the lesson resources and do a data migration. Because once we have all the languages, the data migrations will be slightly more involved.