/* 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 Armenian!";
										// 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.<br /><br />We would be happy to make Apache OpenOffice available in Armenian, 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.";
