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

var AUTOMATIC_DOWNLOAD_MESSAGE  = "\u4e0b\u8f7d\u5e94\u8be5\u81ea\u52a8\u5f00\u59cb\u3002<br>\u5982\u679c\u6ca1\u6709\uff0c<a href=\"{0}\" class=\"download_link\">\u8bf7\u70b9\u51fb\u8fd9\u91cc\u4e0b\u8f7d</a>\u3002<br>";

var PRODUCT_NAME      = "NetBeans {0}";
var INSTALLER_MESSAGE = "\u7528\u4e8e {0} \u4e0a\u7684\u5b89\u88c5\u7a0b\u5e8f";
var NOFILE_MESSAGE    = "\u6ca1\u6709\u4efb\u4f55\u6587\u4ef6\u8bf7\u6c42" ;

var NETBEANS_DOWNLOAD_STARTED_PAGE_TITLE       = "NetBeans IDE \u4e0b\u8f7d\u5f00\u59cb";
var NETBEANS_DOWNLOAD_STARTED_PAGE_DESCRIPTION = "NetBeans IDE \u4e0b\u8f7d\u5f00\u59cb";

var NETBEANS_DOWNLOAD_STARTED_HEADER = "NetBeans IDE {0} \u4e0b\u8f7d\u5f00\u59cb";
var RELEASE_NOTES_LABEL = "\u53d1\u884c\u8bf4\u660e";
var INSTALL_NOTES_LABEL = "\u5b89\u88c5\u6307\u5bfc";
var FIND_OUT_MORE_LABEL = "\u4e86\u89e3\u66f4\u591a";
var PLUGINS_LABEL       = "\u63d2\u4ef6";
var PLUGINS_DESCRIPTION = "\u6765\u81ea NetBeans \u793e\u533a\u53ca\u7b2c\u4e09\u65b9\u4f9b\u5e94\u5546\u7684\u8d21\u732e\u3002";
var TUTORIALS_LABEL     = "\u6559\u7a0b";
var TUTORIALS_DESCRIPTION = "\u7531 NetBeans \u793e\u533a\u53ca\u4e13\u5bb6\u64b0\u5199\u6216\u5f55\u5236\u3002";
var TRAINING_LABEL = "\u57f9\u8bad";
var TRAINING_DESCRIPTION = "\u5e2e\u52a9\u60a8\u63d0\u9ad8\u6280\u5de7\u7684\u8bfe\u7a0b\u3002";
var SUPPORT_LABEL        = "\u652f\u6301";
var SUPPORT_DESCRIPTION  = "\u7075\u6d3b\u7684\u652f\u6301\u65b9\u6848\u9009\u62e9\u8ba9\u60a8\u80fd\u591f\u59cb\u7ec8\u4e13\u6ce8\u4e8e\u521b\u65b0\u3002";

// $PRODUCT_NAME $TYPE (Installer for $PLATFORM/Zip)/$Language ($Language_ID) $filename ($SIZE) MD5: $MD5
var INFO_MESSAGE = "{0}{1} {2}/{3} ({4})<br>{5} ({6} MB)<br>MD5: {7}";
var INFO_MESSAGE_OTHER = "{0} ({1} MB)<br>MD5: {2}";

//DO NOT TRANSLATE
var SUBSCRIPTION_PHP_URL = "http://services.netbeans.org/sub.php";

