Translating Entries into Other Languages with LifeFlow
Just a quick notice that I have been putting some recent effort into cleaning up the support for attaching translations to entries in Lifeflow.
The fundamental concept here is that you can create a variety of languages, and then you link a translation to a post using a specific languages. Breaking that down a bit, it means that each translation has three pieces of data:
- A language
- The original entry
- The translated entry
The translated entry is simply another entry, made the same way as the original entry, and then a Translation is created that contains the above three pieces of information.
My current approach is to not give translations any Tags, and not to include them in any Flows. This means they are accessible only in three ways (excluding RSS feeds, which are discussed in a moment): whenever you see an entry in a list it will announce any existing translations, specific entries will announce their translations, and from the languages page that lists all the available languages, and then each language page lists all the entries in that language.
This isn't to say that you can't give translations any Tags or include them in Flows, because you definitely can. You might, for example, create a Code Flow and a Code-Japanese Flow (you could do the same with your Tags, and Series as well). That would be a clean way to make the originals/translations accessible to only users who want it.
In addition, each Language has its own RSS feed (subscribable on its specific Language page that lists all entries in that language), and there is a Translation feed that contains all translations.
Translations don't appear in the All feed, because that seems like a disservice to most users who will not be interested in the translated entries. Perhaps the solution here is to provide another feed which contains all content including translated entries.
A Few Examples
I have added a couple of translations (very hastily translated into Japanese) for several old entries:
- You can see the first here, and its translation here.
- The second is available here, as well as its translation.
The current SVN of LifeFlow has full vertical support for Unicode. You can have Unicode anywhere in your text and it won't be an issue (as long as your database has been configured for Unicode support!). All the Markdown functionality used for writing normal posts still applies as expected to Unicode encoded text.
For example, I wrote the two translations in Emacs, including all the normal Markdown syntax I use, including some Dynamic Blog Context for LifeFlow specific dynamic data. Then I pasted the entry from Emacs into the body field in the Django Admin, and everything just worked.
At the same time, I didn't want to cause havok in older machines without strong Unicode support, so I named all language names using Ascii characters instead of Unicode (for example I would rather write Japanese in Japanese kanji, but I don't want to unwittingly break older browsers). This means that, on lethain.com, the only place you will see the Unicode encoded languages is on the specific languages pages (as the titles of the translated entries are in their translated language), and the pages for the specific entries (which are in the translated language as well).
However, none of the naming of the Languages is hardcoded to not allow Unicode. Other installations of LifeFlow could go a different direction and name all their languages in the native language itself (and I hope to eventually move that direction as well, which will just be a simple renaming the title of the languages in the Django Admin, but I won't be until Windows XP has disappeared a bit more).
The end point is that translation support is alive and well now, and that the newest templates in SVN do a good job of announcing the existance of translations for entries without inconveniencing users who don't care. Unicode support is full circle as well (although, it hasn't been tested in comments yet, as refusing to support unicode was serving as an unexpectedly effective spam squasher for a while).
Oh, and one last thought: you could use this mechanism to translate entries into other Programming languages as well. It doesn't necessarily have to be into other human languages.