/* 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			= false;
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 complete translation into Polish!";
									// Maximum 630 characters.
l10n.index_alert_box_text_text			= "This note is in English because we need help to translate this webpage and others into your language. The links on the page will help you download and install Apache OpenOffice with Polish translation. But we still need help with this website. <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.";
