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

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] = "\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 Zip";
PLATFORM_SHORT_NAMES [3] = "\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 Zip";

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

BUNDLE_LONG_NAMES[0] = "Java&nbsp;SE";
BUNDLE_LONG_NAMES[1] = "Java&nbsp;EE";
BUNDLE_LONG_NAMES[2] = "C/C++";
BUNDLE_LONG_NAMES[3] = "PHP";
BUNDLE_LONG_NAMES[5] = "\u0412\u0441\u0435";

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

var LEGAL_INFO_HEADER = "\u0412\u0430\u0436\u043d\u0430\u044f \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f:";

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.";
