/* 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 complete translation into Scottish (Gaelic)!";
									// Maximum 630 characters.
l10n.index_alert_box_text_text			= "This note is in English because we have no one to translate this webpage and others into your language. The links on the page will help you download and install Apache OpenOffice with Scottish (Gaelic) 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.";

