# 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.

LBL_extra_javadoc_files=Extra Javadoc Files
LBL_important_files=Important Files
LBL_libraries=Libraries
LBL_module_manifest=Module Manifest
LBL_arch_desc=Architecture Description
LBL_api_changes=API Changes
LBL_javadoc_overview=Javadoc Overview
LBL_build.xml=Build Script
LBL_project.xml=Project Metadata
LBL_project.properties=Project Properties
LBL_private.properties=Per-user Project Properties
LBL_suite.properties=Suite Locator
LBL_suite-private.properties=Per-user Suite Locator
LBL_platform.properties=NetBeans Platform Config
LBL_platform-private.properties=Per-user NetBeans Platform Config
CTL_AddModuleDependency=Add Module Dependency...
CTL_AddModuleDependencyTitle=Add Module Dependency
CTL_Open=Open
# ModuleLogicalView - PlatformNode
FMT_BrokenPlatform=Broken platform ''{0}''
TXT_BrokenPlatform=Broken platform
# ModuleLogicalView - ShowJavadocAction
TXT_NoJavadoc=Javadoc for {0} not found.
CTL_ShowJavadoc=Show Javadoc
# ModuleLogicalView - Dependency Title
CTL_ImplementationDependency=Implementation Dependency
CTL_NeededToCompile=Needed to <strong>compile</strong>
CTL_MajorReleaseVersion=Major release version: <strong>{0}</strong>
CTL_SpecificationVersion=Specification version: <strong>{0}</strong>


# UIUtil
CTL_NewLibraryWrapperProject=New Library Wrapper Module Project
MSG_MoveFromSuiteToSuite=Module "{0}" is already part of the module suite "{1}" [{2}]. Do you wish to remove the module from that suite and add it to "{3}" instead?
MSG_SuiteAlreadyContainsProject=Suite "{0}" already contains selected project "{1}".
MSG_TryingToAddNBORGModule=The project "{0}" is part of a netbeans.org source tree. As such it cannot be added as a suite component.
MSG_TryingToAddNonNBModule=The project "{0}" is not a NetBeans module project. You can only add NetBeans modules to a module suite.
MSG_AddModuelToTargetPlatform=Add module "{0}" to the target platform?
MSG_AddModuelToTargetPlatformWithItsCluster=Add module "{0}" with its cluster "{1}" to the target platform?
MSG_AddModuelToTargetPlatformTitle=Confirm adding module

# SuiteLogicalView
CTL_AddModule=Add Existing...
CTL_AddNewLibrary=Add New Library...
CTL_AddNewModule=Add New...
CTL_Modules=Modules
CTL_NewModuleProject=New Module Project
CTL_OpenProject=Open Project
CTL_RemoveModule=Remove
CTL_RemovingModuleTitle=Removing "{0}"
MSG_OpeningProjects=Opening Selected Projects...
MSG_RemovingModuleMessage=<html>\
    The module <b>{0}</b> is set as a dependency in the following modules.<br>{1}<br>\
    By removing this module from the suite the dependencies on this module\<br>\
    will be removed as well.
MSG_SuiteAlreadyContainsCNB=The suite already contains a project with code name base "{0}".
HINT_suite_project_root_node=Module suite project in {0}
LBL_jnlp_master=JNLP Descriptor

Templates/Licenses/license-cddl-netbeans-sun.txt=NetBeans CDDL/GPL

TestDataDirsNodeFactory.unit_test_data=Unit Test Data
TestDataDirsNodeFactory.qa-functional_test_data=Functional Test Data
LBL_WrappedLibraryFmt=%s (Wrapped Library)

LibrariesNode.update_deps=Updating Dependencies
