I'm making some changes to MediaWiki's localisation files, to make them easier to write, and to improve loading speed at runtime. I've often complained about the fact that MediaWiki's LanguageXx.php files force every would-be translator to also be a programmer. What I'm doing with this change is to make it so that in 90% of cases, a LanguageXx.php file won't be necessary, its function will be replaced by the simpler MessagesXx.php file.
The format of the MessagesXx.php file will look like this:
<?php $fallback = 'en'; $rtl = false; $timeBeforeDate = true; $timeSeparator = ':'; $timeDateSeparator = ', '; $digitTransformTable = null; $separatorTransformTable = null;
$namespaceNames = array( NS_MEDIA => 'Media', ... );
$quickbarSettings = array( ... );
$skinNames = array( ... );
$mathNames = array( ... );
$dateFormats = array( MW_DATE_DEFAULT => 'No preference', ... );
$bookstoreList = array( ... );
$weekdayNames = array( ... );
$monthNames = array( ... ); $monthNamesGen = array( ... );
$monthAbbreviations = array( ... );
$magicWords = array( # ID CASE SYNONYMS 'redirect' => array( 0, '#REDIRECT' ), ... );
$messages = array( ... ); ?>
Note that there are no globals, no classes, and no language code variable name suffixes. The language code is simply specified by the filename. The $fallback variable specifies a fallback language which should be used if anything in the present localisation file is missing. If $fallback is missing, English will be used.
If the localisation is sufficiently specified by these variables (and any others we think need to be added), then the LanguageXx.php file will not be needed. In cases where the language file needs to be kept, due to special code, all of the customised accessors for the above variables will be deleted, leaving only the special code.
The contents of the MessagesXx.php files will be cached, if a cache is available. The modification time of the file will be checked on every request, so when the file is updated, the cache is immediately invalidated.
I've already done most of the technical work for this change, including converting three languages as a pilot. Most of what remains is the rote work of converting all of the language files. I might consider committing what I've done to a branch, if someone else wants to help out with this.
Also in my working copy at the moment is a scheme to delay the initialisation of most object global variables, but that's a topic for another post.
-- Tim Starling