/* This file is to maintain text information that can be used on the download webpage via JavaScript when
 * including this file.
 *
 * Instead of hard coded text in the green box please use these variables and translate it to your favorite language.
 *
 * Wrong:   "Download Apache OpenOffice"
 * Correct: l10n.index_redirect_text
 */



// Object that contains all following variables.
var l10n = new Object();

// The following variables are used in the "index.html" file:

l10n.index_alert_box_show			= true;
l10n.index_alert_box_background_color		= "#F5A9A9";							// More see "http://html-color-codes.info/"
l10n.index_alert_box_href			= "https://openoffice.apache.org/translate.html";		// Make the whole alert box clickable with a link.
									// Maximum 49 characters.
l10n.index_alert_box_headline_text		= "We need your help to translate Apache OpenOffice into French!";
									// Maximum 630 characters.
l10n.index_alert_box_text_text			= "This note is in English because we have no one to translate it into your language. The links on this page will help you download and install all other available versions of Apache OpenOffice.<br />We would be happy to make Apache OpenOffice available in French, but we need help completing the translation of the user interface.<br /><br /> If you are interested in helping translate, please click this text to review the information. You can send a note to our mailing list \"L10N@openoffice.apache.org\" if you want to volunteer or if you have questions.";
