Mythweb translation guidelines: For everyone: I've written a routine that scans mythweb's files looking for translation strings. Because of this, you must be very careful what interpreted characters you put inside of translation strings. The easiest way to avoid confusion is to use non-interpreting single quotes ('') instead of double quotes (""), and do not put things like newlines (\n), tabs (\t) etc. into any of your translated strings (they're invisible to html, anyway). For translators: To create new translation files, just copy any existing file (probably English.lang since it will have the least amount of information to delete) and fill it in with the appropriate translations. Put the translation on the line after the source string, indented with spaces or tabs. If your translation spans multiple lines, just make sure that you indent with the same characters as the first line. Please look at English.lang for examples. Some of the translation strings are shorthand, and are even "translated" in English.lang into more verbose sentences. Untranslated strings will merely display the source (English) string. Don't forget to add your language to the $Languages array in classes/Translate.php, too. That way, it will attempt to auto-detect the browser's preferred language, and show up in the mythweb settings language choice menu. For theme developers and coders: Mythweb now has two translation functions: t() and tn(). t() is a simple string translation. For input, it takes the string to be translated, along with an optional number of additional parameters that will be inserted into the string's specified variables ($1, $2, etc.). See below for details about variables. tn() is used to deal with plurality in translation, similar to ngettext(). For parameters, it takes a series of strings, followed by an integer and an optional array of parameters (not a list like t()). eg: tn('$1 hour', '$1 hours', $hours, array($hours)); if $hours is 1, tn() would translate and return '$1 hour', but for 2 or more, would return '$1 hours'. Any number of strings can be used (in case there are languages that might need strings for 1, 2 and 3-or-more, etc.). Variables in strings: Some translation strings will contain variables like $1, $2, etc. In the code, certain values will be substituted in for those variables. The variables allow translators to rearrange sentences as they see fit, without having to worry about grammatical differences between languages. Thus, you might see a string like 'You have $1 recordings' translated as 'You have 5 recordings'. Strings with multiple variables can have them rearranged if they would make better sense for your language if they were in a different order. Untranslated strings: As I mentioned above, there is a script (build_translation.pl) included in the languages subdirectory that is designed to keep translations up to date. Running this script will scan all of Mythweb's data and template files, and update the language files (which will result in English being shown to users until a translation is added).