/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
 * Other names may be trademarks of their respective owners.
 *
 * The contents of this file are subject to the terms of either the GNU General
 * Public License Version 2 only ("GPL") or the Common Development and Distribution
 * License("CDDL") (collectively, the "License"). You may not use this file except in
 * compliance with the License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
 * License for the specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header Notice in
 * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
 * designates this particular file as subject to the "Classpath" exception as
 * provided by Oracle in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the License Header,
 * with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyrighted [year] [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * The Original Software is NetBeans. The Initial Developer of the Original Software
 * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
 * Rights Reserved.
 * 
 * If you wish your version of this file to be governed by only the CDDL or only the
 * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
 * this software in this distribution under the [CDDL or GPL Version 2] license." If
 * you do not indicate a single choice of license, a recipient has the option to
 * distribute your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above. However, if
 * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
 * the option applies only if the new code is made subject to such option by the
 * copyright holder.
 */



var BUNDLED_SERVERS_GROUP_NAME = "Serveurs&nbsp;inclus";

                                                   

var NETBEANS_DOWNLOAD_BUNDLES_MSG = "Packs de t&eacute;l&eacute;chargement de l'EDI NetBeans";

var NETBEANS_DOWNLOAD_BUNDLES_COMMUNITY_MSG = "Packs de t&eacute;l&eacute;chargement de l'EDI NetBeans dans des langues contribu&eacute;es par la communaut&eacute;";

var NETBEANS_PACKS_MSG 		  = "Technologies&nbsp;support&eacute;es";



var JDK_DOWNLOAD_LINK    = "http://java.sun.com/javase/downloads/index.jsp";

var NBJDK_DOWNLOAD_LINK  = "http://java.sun.com/javase/downloads/netbeans.html";



var JAVA_COM_LINK        = "http://java.com/";



//var JDK_NOTE_ALL      = "Java 6 ou Java 5 est requis pour installer et ex&eacute;cuter les packs NetBeans pour PHP, Ruby et C++. Vous pouvez t&eacute;l&eacute;charger la <a href=\"{0}\">derni&egrave;re version de Java sur java.com</a>.<br><br>Un jDK 6 ou un JDK 5 est requis pour installer et ex&eacute;cuter les packs Java SE, JavaFX, Java et Tout NetBeans. Vous pouvez t&eacute;l&eacute;charger un <a href=\"{1}\">JDK seul</a> ou bien le dernier pack <a href=\"{2}\">JDK + NetBeans &quot;Java SE&quot;</a>.<br><br>";
var JDK_NOTE_ALL      = "Java 6 est requis pour installer et ex\u00e9cuter les packs NetBeans pour PHP et C/C++. Vous pouvez t\u00e9l\u00e9charger la <a href=\"{0}\">derni\u00e8re version de Java sur java.com</a>.<br><br> Un JDK 6 est requis pour installer et ex\u00e9cuter les packs Java SE, Java EE et &quot;Tous&quot;. Vous pouvez t\u00e9l\u00e9charger <a href=\"{1}\">un JDK seul</a> ou bien le dernier pack <a href=\"{2}\">JDK + NetBeans &quot;Java SE&quot;</a>.<br><br>";

//var JDK_NOTE_MACOSX   = "JDK 5.0 is required for installing and running the NetBeans IDE.";

var JDK_NOTE_MACOSX   = "";



var FREE_SIZE_MESSAGE  = "{0}&nbsp;Mo disponibles";

var NOT_AVAILABLE_SIZE = "--";



var NOTE_PREFIX    = "Note: ";

var NOTE_AND_SEP   = "{0} et {1}";

var NOTE_COMMA_SEP = "{0}, {1}";



var SINGLE_NOT_AVAILABLE_ZIP      = "{0} n'est pas disponible dans {1}";

var SINGLE_NOT_AVAILABLE_BUNDLE   = "{0} n'est pas disponible pour {1}";

var MULTIPLE_NOT_AVAILABLE_ZIP    = "{0} ne sont pas disponibles dans {1}";

var MULTIPLE_NOT_AVAILABLE_BUNDLE = "{0} ne sont pas disponibles pour {1}";



var ZIP_FILES_LIST_NAME             = "Fichiers Zip";

var MODULE_CLUSTERS_FILES_LIST_NAME = "Grappes (clusters) de modules";



var NOTE_SOLARIS = "Note: Java ME n'est disponible que pour Windows et Linux.<br>Le pack UML est disponible via le Centre de mises &agrave; jour.";

var NOTE_MACOSX  = "Note: Java ME n'est disponible que pour Windows et Linux.<br>Le pack UML est disponible via le Centre de mises &agrave; jour.";

var NOTE_ZIP     = "Note: GlassFish et Apache Tomcat ne sont disponibles qu'en installeurs sp&eacute;cifiques &agrave; chaque plate-forme. Le pack UML est disponible via le Centre de mises &agrave; jour.";

var NOTE_OTHER   = "Note: Le pack UML est disponible via le Centre de mises &agrave; jour.";

var NOTE_JAVAFX  = "Available only with <a href=\"{0}\">NetBeans&nbsp;6.5.1</a>";

var NOTE_ALL     = "Note: les technologies affich\u00e9es en gris\u00e9 ne sont pas prises en charge sur cette plate-forme.";


var MORE_LANGUAGES    = "Autres langues...";

var COMMUNITY_MESSAGE = "La communaut&eacute; NetBeans a contribu&eacute; les langues qui peuvent &ecirc;tre t&eacute;l&eacute;charg&eacute;es depuis cette page. Pout en savoir plus sur le volume des traductions inclus dans les bits t&eacute;l&eacute;charg&eacute;s visitez la page <a href=\"http://wiki.netbeans.org/TFL10nCommunityStatus\">du statut g&eacute;n&eacute;ral des traductions</a> des communaut&eacute;s. Pour savoir comment t&eacute;l&eacute;charger les dernir&egrave;res contributions, visitez la page des <a href=\"http://wiki.netbeans.org/TFLocalizationDevelopmentUC\">plug-in de localization</a>.";

var COMMUNITY_CONTRIBUTED_SEP    = " -- Community Contributed -- " ;

var SUN_SUPPORTED_SEP            = " -- Oracle Supported -- " ;




var NETBEANS_DOWNLOAD_PAGE_TITLE       = "T\u00e9l\u00e9chargement de l'EDI NetBeans";

var NETBEANS_DOWNLOAD_PAGE_DESCRIPTION = "T\u00e9l\u00e9;chargement de l'EDI NetBeans";





var NETBEANS_DOWNLOAD_HEADER = "T&eacute;l&eacute;charger l'EDI NetBeans {0}";

var DEVELOPMENT_TITLE        = "D&eacute;veloppement";

var ARCHIVE_TITLE            = "Archive";

var PYTHON_TITLE             = "Python&nbsp;EA";

var EMAIL_LABEL              = "Adresse&nbsp;m&eacute;l&nbsp;(optionnelle):&nbsp;";

var SUBSCRIBE_LABEL          = "S'abonner&nbsp;aux&nbsp;newsletters:";

var MONTHLY_LABEL            = "Mensuelle&nbsp;&nbsp;&nbsp;&nbsp;";

var WEEKLY_LABEL             = "Hebdomadaire";

var CONTACT_LABEL            = "NetBeans&nbsp;peut&nbsp;me&nbsp;contacter&nbsp;sur&nbsp;ce&nbsp;m&eacute;l";

var LANGUAGE_LABEL           = "Langue de l'IDE:";

var PLATFORM_LABEL           = "Plate-forme:";

var PLUGIN_MANAGER_LABEL     = "Vous pouvez ajouter ou enlever des composants plus tard en utilisant le Gestionnaire de plug-ins de l'EDI (Outils | Plug-ins)<br>";

var JAVATOOLSBUNDLE_LABEL    = "Vous pouvez aussi t&eacute;l&eacute;charger l'EDI NetBeans avec le <a href=\"http://java.sun.com/javaee/downloads/index.jsp\">Pack d'outils Java EE 5</a>.";

var SOURCE_BINARY_LABEL      = "Le code source de NetBeans et des builds binaires sans environnement d'ex&eacute;cution sont aussi disponibles au <a id=\"zip_link\" href=\"{0}\">format zip</a>.<br>";

var BUILD_WIKI_LABEL         = "Voir aussi les <a href=\"http://wiki.netbeans.org/wiki/view/WorkingWithNetBeansSources\">instructions pour construire l'EDI &agrave; partir des sources.</a>.";

var PLATFORM_DEV_LABEL  = "Vous pouvez commencer le d\u00e9veloppement des applications bas\u00e9es sur la Plateforme Netbeans en utilisant l''EDI Netbeans pour Java SE. Plus d''informations sur la <a href=\"{0}\">Plateforme NetBeans</a>.";

var PLATFORM_INFO_LINK       = "http://platform.netbeans.org/platform-get.html";


var LICENSE_NOTES_LINK      = "http://www.netbeans.org/about/legal/product-licences.html";



var ARCHIVE_BUILDS_LINK      = "http://services.netbeans.org/downloads/dev.php";

var DEVELOPMENT_BUILDS_LINK  = "http://bits.netbeans.org/download/trunk/nightly/latest/";

var PYTHON_LINK             = "http://download.netbeans.org/netbeans/6.5/python/ea/";



// TRANSLATE NOTE: change download*.gif to download*_<locale>.gif

var DOWNLOAD_BUTTON_NORMAL    = "download_fr.gif";

var DOWNLOAD_BUTTON_DISABLED  = "download_d_fr.gif";

var DOWNLOAD_BUTTON_HIGHLIGHT = "download_h_fr.gif";



// DO NOT TRANSLATE

var START_PAGE = "start.html";

var ZIP_PAGE   = "zip.html";
