/*
 * 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://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] = "Solaris (x86/x64)";
PLATFORM_SHORT_NAMES [2] = "Solaris (x86/x64)";
PLATFORM_LONG_NAMES  [3] = "Solaris (sparc)";
PLATFORM_SHORT_NAMES [3] = "Solaris (sparc)";
PLATFORM_LONG_NAMES  [4] = "Mac OS X";
PLATFORM_SHORT_NAMES [4] = "Mac OS X";
PLATFORM_LONG_NAMES  [5] = "\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 [5] = "\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 Zip";
/*
// Commented since NBI installers are not used for now
// Translate these strings as well (if they can be translated) and leave them commented
PLATFORM_LONG_NAMES  [4] = "Mac OS X (intel)";
PLATFORM_SHORT_NAMES [4] = "Mac OS X";

PLATFORM_LONG_NAMES  [5] = "Mac OS X (powerpc)";
PLATFORM_SHORT_NAMES [5] = "Mac OS X";
*/

BUNDLE_SHORT_NAMES[0] = "Java&nbsp;SE";
//BUNDLE_SHORT_NAMES[1] = "JavaFX";
BUNDLE_SHORT_NAMES[1] = "Java&nbsp;EE";
//BUNDLE_SHORT_NAMES[2] = "Ruby";
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] = "JavaFX";
BUNDLE_LONG_NAMES[1] = "Java&nbsp;EE";
//BUNDLE_LONG_NAMES[2] = "Ruby";
BUNDLE_LONG_NAMES[2] = "C/C++";
BUNDLE_LONG_NAMES[3] = "PHP";
BUNDLE_LONG_NAMES[4] = "All";
BUNDLE_LONG_NAMES[5] = "\u0412\u0441\u0435";

var RELEASE_NOTES_LINK  = "https://netbeans.org/community/releases/70/relnotes_ru.html";
var INSTALL_NOTES_LINK  = "https://netbeans.org/community/releases/70/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_3RD_PARTY_LINK = "http://services.netbeans.org/downloads/licence/netbeans-3rd-party.txt";

var LEGAL_INFO_MESSAGE = "\u0421\u0431\u043e\u0440\u043a\u0438 NetBeans \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0438\u0437 <a href=\"{0}\">Common Development and Distribution License (CDDL) v1.0 \u0438 GNU General Public License (GPL) v2</a>. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"{1}\">\u0444\u0430\u0439\u043b third-party</a> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 NetBeans, \u0438 \u0438\u0445 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439.";
