Finally done
After nearly 4 years, I am finally done with the translation synchronization problem. The Cross Lingual Wiki Engine project is far from completed, but at least the change tracking mechanism is. Looking in my own archives, I first wrote about this issue in August 2004. The solution I ended up implementing is in fact very close to what I wrote the second time around in 2006, except that I dropped most of the input required by the user.
The implementation is now part of the TikiWiki CVS and will be included in the 1.10 release (or however it’s going to be called) in a few weeks from now. As it’s licenced under LGPL, feel free to rip the implementation apart and include it in your own projects. If you do so, please tell us on Wiki-Translation. I will be glad to help out.
The architecture actually uses a single table and large SQL queries to do the work. In fact, the implementation is only around 125 lines of SQL and maybe 300 lines of simple PHP to work around the TikiWiki way of handling things. The core implementation took around 6 hours including a proof of concept, then I probably worked an other 10 hours working out the queries and extracting meaningful information.
The tasks accomplished by the SQL is fairly dense. You can also read the article detailing the theory and implementation.
I definitely spent more time writing the documentation than working in the implementation. In fact, writing is short enough. Reviewing is long. Finding problems is hard. Luckily, I had Alain Désilets and Sébastien Paquet to help me in that task. There may still be room for improvements and comments are welcome.
Why didn’t I do it back in 2006? Well, I thought it would have been more complicated, and the problem was mostly theory as I didn’t have an actual test site that would need to handle more than two languages. In fact, the current implementation is the child of many discussions I had along the way. If I had done it before, it wouldn’t have been as good. Couldn’t have been without all those discussions at RoCoCo and WikiSym2007. They brought special use cases and influenced the results to cover much broader situations and do it with simplicity.