/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
 * 
 * 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.  Sun
 * designates this particular file as subject to the "Classpath" exception as
 * provided by Sun 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";

