We are going to model our I18N/L10N off of MediaWiki's system. Their's is obviously quite complicated, so we're going to simplify it a bit for our needs. == Caching == MediaWiki has lots of caching mechanisms built in, which make the code somewhat more difficult to understand. Before doing any loading, MediaWiki will check the following places to see if we can be lazy: 1. $mLocalisationCache[$code] - just a variable where it may have been stashed 2. serialized/$code.ser - compiled serialized language file 3. Memcached version of file (with expiration checking) Expiration checking consists of by ensuring all dependencies have filemtime that match the ones bundled with the cached copy. Similar checking could be implemented for serialized versions, as it seems that they are not updated until manually recompiled. == Behavior == Things that are localizable: - Weekdays (and abbrev) - Months (and abbrev) - Bookstores - Skin names - Date preferences / Custom date format - Default date format - Default user option overrides -+ Language names - Timezones -+ Character encoding conversion via iconv - UpperLowerCase first (needs casemaps for some) - UpperLowerCase - Uppercase words - Uppercase word breaks - Case folding - Strip punctuation for MySQL search - Get first character -+ Alternate encoding -+ Recoding for edit (and then recode input) -+ RTL -+ Direction mark character depending on RTL -? Arrow depending on RTL - Languages where italics cannot be used -+ Number formatting (commafy, transform digits, transform separators) - Truncate (multibyte) - Grammar conversions for inflected languages - Plural transformations - Formatting expiry times - Segmenting for diffs (Chinese) - Convert to variants of language - Language specific user preference options - Link trails [[foo]]bar -+ Language code (RFC 3066) Neat functionality: - I18N sprintfDate - Roman numeral formatting Items marked with a + likely need to be addressed by HTML Purifier vim: et sw=4 sts=4