# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2013, 2016 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]"
#
# 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.
#
# Contributor(s):
ActionRenderVisualPanel.deleteButton.text=\u5220\u9664(&D)

ActionRenderVisualPanel.addButton.text=\u6dfb\u52a0(&A)
#Do not translate
ActionRenderVisualPanel.warningLabel.text=WARNING
ActionRenderVisualPanel.jLabel2.text=\u64cd\u4f5c\u540d:
ActionRenderVisualPanel.jLabel4.text=\u76ee\u5f55:
ActionRenderVisualPanel.jLabel3.text=\u9009\u62e9\u5c06\u5bf9\u54ea\u4e9b\u64cd\u4f5c\u540d\u751f\u6210\u54ea\u4e9b\u65b9\u6cd5:
LBL_ActionName=\u64cd\u4f5c\u540d:
TXT_ActionRenderVisualPanelName=\u64cd\u4f5c\u548c\u5448\u73b0
TXT_DeleteRowConfirmText=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u64cd\u4f5c\u884c?
TXT_DeleteRowConfirmTitle=\u662f\u5426\u786e\u5b9a?
TXT_NoActionSelectedText=\u5fc5\u987b\u5148\u9009\u62e9\u64cd\u4f5c\u884c, \u7136\u540e\u624d\u80fd\u5220\u9664\u5b83\u3002
TXT_NoActionSelectedTitle=\u672a\u9009\u62e9\u4efb\u4f55\u884c
WRN_ActionExists=\u5df2\u5b58\u5728\u540c\u540d\u7684\u64cd\u4f5c\u3002
WRN_ActionRenderMethodExists=\u64cd\u4f5c\u53ca\u5176\u5448\u73b0\u65b9\u6cd5\u5df2\u5b58\u5728\u3002
WRN_InvalidActionFormat=\u64cd\u4f5c\u540d\u4e0d\u662f\u5b57\u6bcd\u6570\u5b57\u5b57\u7b26\u4e32\u3002

