= Web and GUI translations =
BOINC has mechanisms for non-English translations of
* Parts of this site (the [http://boinc.berkeley.edu/download.php Download] and [http://boinc.berkeley.edu/poll.php BOINC user survey] pages, and related pages)
* The BOINC Manager
* Parts of the BOINC-supplied portion of project web sites
* The project-specific parts of project web sites
== Instructions for volunteer translators ==
Translations are done by volunteers. If you're interested in helping:
* Email the translation manager. For BOINC this is '''translation at boinc period berkeley period edu'''. Use this address also for SETI@home translations. For other projects, contact the project.
* Obtain (typically via SVN) the 'authoritative' translation file. Usually this is en.po (English).
* Create a translation file for your language. You can do this using a text editor or a specialized tool such as [http://sourceforge.net/projects/poedit/ poedit].
* Send this to the translation manager, who will then install it on the project's web site. Check all relevant pages and fix as needed.
* Subscribe to the [http://ssl.berkeley.edu/mailman/listinfo/boinc_loc boinc_loc at ssl.berkeley.edu] email list, which is for translation-related discussion and announcements.
* Because web sites are dynamic, you will have to periodically update your translation. You can do this efficiently by looking at the SVN diffs of the authoritative translation file.
== Translation files ==
Most translations are based on translation files. Translation files are in PO format, which is described [http://www.gnu.org/software/gettext/manual/html_node/gettext_9.html#SEC9 here]. These have names like 'da.po' (Danish) and 'en.po' (English). It's very simple. For example:
{{{
#!html
en.po (English)
}}}
{{{
msgid "APPS_VERSION"
msgstr "Current version"
msgid "APPS_DESCRIPTION"
msgstr "$PROJECT currently has the following applications. "
"When you participate in $PROJECT, work for one or more "
"of these applications will be assigned to your computer. "
"The current version of the application will be downloaded "
"to your computer. This happens automatically; you don't have to do anything. "
}}}
{{{
#!html
da.po (Danish)
}}}
{{{
msgid "APPS_VERSION"
msgstr "Nuværende version"
msgid "APPS_DESCRIPTION"
msgstr "$PROJECT har i øjeblikket følgende applikationer. "
"Når du deltager i $PROJECT vil arbejde fra en eller flere "
"af disse applikationer blive tildelt din computer. "
"Den nuværende version af applikationen vil blive downloadet "
"til din computer. Dette sker automatisk - du behøver ikke at gøre noget."
}}}
Each translation has a token CHARSET whose value should be the character set used in the translation.
Please use UTF-8 if possible.
You can edit UTF-8 on Windows using [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++].
On Linux, you can use [http://www.vim.org/htmldoc/mbyte.html#UTF-8 vim].
{{{
#!comment Need to change this, all languages *should* use UTF-8 at least for the website side; other charsets cause problems. Existing translations have been converted already.
}}}
Here are links to the translation files for
* [source:trunk/boinc/languages/translations/ this web site]
* [source:trunk/boinc/html/languages/translations/ the BOINC-supplied part of project web sites]
* [source:trunk/boinc/locale/client/ the BOINC Manager]
== Writing translatable web pages ==
Translatable web pages must be PHP, and must include
{{{
require_once("../inc/translation.inc");
}}}
Literal text is replaced with `tr(TOKEN)`, where TOKEN is a short string representing the text. For example,
{{{
page_head("Current version");
}}}
is replaced with
{{{
page_head(tr(APPS_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 "ACTIVATE_OR_CREATE"
msgstr "Already have an original 'Classic' account as of May 14, 2004? "
"
We've transferred it, just %sactivate it%s. "
"%sOtherwise %screate a new account%s."
}}}
with the corresponding PHP:
{{{
printf(tr(ACTIVATE_OR_CREATE),
"", "",
"",
"", ""
);
}}}
== 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.
== BOINC Manager translations ==
Menu names and other text in the BOINC manager are stored in files in [source:trunk/boinc/locale/client/ boinc/locale/client/].