/*
 * 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
 * https://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.
 */

PLATFORM_LONG_NAMES  [0] = "Windows";
PLATFORM_SHORT_NAMES [0] = "Windows";
PLATFORM_LONG_NAMES  [1] = "Linux (x86/x64)";
PLATFORM_SHORT_NAMES [1] = "Linux";
PLATFORM_LONG_NAMES  [2] = "Mac OS X";
PLATFORM_SHORT_NAMES [2] = "Mac OS X";
PLATFORM_LONG_NAMES  [3] = "SO Independente Zip";
PLATFORM_SHORT_NAMES [3] = "SO Independente Zip";

BUNDLE_SHORT_NAMES[0] = "Java&nbsp;SE";
BUNDLE_SHORT_NAMES[1] = "Java&nbsp;EE";
BUNDLE_SHORT_NAMES[2] = "HTML5/JS";
BUNDLE_SHORT_NAMES[3] = "PHP";
BUNDLE_SHORT_NAMES[4] = "C/C++";
BUNDLE_SHORT_NAMES[5] = "";

BUNDLE_LONG_NAMES[0] = "Java&nbsp;SE";
BUNDLE_LONG_NAMES[1] = "Java&nbsp;EE";
BUNDLE_LONG_NAMES[2] = "HTML5/JavaScript";
BUNDLE_LONG_NAMES[3] = "PHP";
BUNDLE_LONG_NAMES[4] = "C/C++";
BUNDLE_LONG_NAMES[5] = "Tudo";

var RELEASE_NOTES_LINK  = "https://netbeans.org/community/releases/80/relnotes_pt_BR.html";
var INSTALL_NOTES_LINK  = "https://netbeans.org/community/releases/80/install_pt_BR.html";

var LEGAL_INFO_HEADER = "Important Legal Information:";

var CDDL_GPLV2_LINK = "https://netbeans.org/cddl-gplv2.html";
var LICENSE_FILES_LINK = "https://netbeans.org/about/legal/product-licences.html";

var LEGAL_INFO_MESSAGE = "NetBeans Community Distributions are available under a Dual License consisting of the <a href=\"{0}\">Common Development and Distribution License (CDDL) v1.0 and GNU General Public License (GPL) v2</a>. Such distributions include additional components under separate licenses identified in the <a href=\"{1}\">License file</a>. See the <a href=\"{2}\">Third Party License file</a> for external components included in NetBeans and their associated licenses.";

var LEGAL_WARNING_MESSAGE = "<b>WARNING:</b> These builds are still under development and could contain defects that lead to data loss. They are meant for evaluation of new features. As always, be sure to back up your changes if you use these builds on your production code.";
