== Writing translatable web pages ==
Translatable web pages must be PHP, and must include
{{{
require_once("../inc/translation.inc");
}}}
Literal text is replaced with `tra("text")`. For example,
{{{
page_head("Current version");
}}}
is replaced with
{{{
page_head(tra("Current version"));
}}}
For BOINC projects, the directory [source:trunk/boinc/html/languages/translations/ html/languages/translations] contains a number of 'translation files'. When a person accesses the page, the browser passes a list of languages. The BOINC PHP code finds the first of these languages for which a translation is available, or English if none. As the page is generated, each call to `tr()` replaces the token with the corresponding translated text.
In developing web pages, keep in mind that word order differs between languages, so you should avoid breaking a sentence up into multiple translation units. For example, use constructs like
{{{
msgid "Already have an original 'Classic' account as of May 14, 2004?"
"%1We've transferred it, just %2activate it%3. "
"%4Otherwise %5create a new account%6."
msgstr ""
}}}
with the corresponding PHP:
{{{
printf(tra("Already have an original 'Classic' account as of May 14, 2004? %1We've transferred it, just %2activate it%3. %4Otherwise %5create a new account%6."),
"
", "", "",
"
", "", "" ); }}} == Project-specific translations == The web site of a BOINC-based project involves both * BOINC pages, such as the forms for creating accounts. These are part of the BOINC source code distribution, and are updated periodically by BOINC. * Project-specific pages (and BOINC pages that are modified by the project). To allow translations of both types of pages, a project can haves its own 'project-specific translation files'. These are stored in a directory [source:trunk/boinc/html/user/project_specific_translations html/user/project_specific_translations]. Project-specific translation files override BOINC translation files.