# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

OpenIDE-Module-Name=Freeform Ant Projects
OpenIDE-Module-Display-Category=Tools
OpenIDE-Module-Short-Description=Special project type for projects with preexisting Ant scripts.
OpenIDE-Module-Long-Description=\
    Permits the user to write a special project.xml file which describes the \
    basic layout and functionality of an existing Ant-based project. \
    Supports defining mappings of Ant target to IDE actions, the locations of source folders, \
    the layout of the logical view, and so on.

# Actions
# The key name is "CMD_" followed by a constant from
# org.netbeans.spi.project.ActionProvider, org.netbeans.api.java.project.JavaProjectConstants
# or org.netbeans.modules.web.api.webmodule.WebProjectConstants.
# Only project-global actions (not context-sensitive actions like compile.single)
# need to be listed, since this is for the context menu of the project node.
# List should match that in Actions.COMMON_IDE_GLOBAL_ACTIONS + COMMON_NON_IDE_GLOBAL_ACTIONS.
CMD_build=Build
CMD_clean=Clean
CMD_rebuild=Clean and Build
CMD_run=Run
CMD_test=Test
CMD_debug=Debug
CMD_profile=Profile
CMD_javadoc=Generate Javadoc
CMD_redeploy=Redeploy
CMD_deploy=Deploy

# ProjectXmlValidator
# {0} - path to project.xml
LBL_project.xml_errors=Errors in {0}

LBL_Manual_Editing_Warning=Do not use Project Properties customizer when editing this file manually. \n To prevent the customizer from showing, create nbproject/project.properties file and enter \nauxiliary.show.customizer=false \nproperty there. Adding \nauxiliary.show.customizer.message=<message>\n will show your customized message when someone attempts to open the customizer. 

#If the script file is not found
# {0} - path to the script file
LBL_ScriptFileNotFoundError=Script file {0} cannot be found.
