# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 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
# 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):
#
# Portions Copyrighted 2008 Sun Microsystems, Inc.

OpenIDE-Module-Display-Category=Maven
OpenIDE-Module-Name=\uba54\uc774\ube10 \uc885\uc18d\uc131 \uadf8\ub798\ud504
OpenIDE-Module-Long-Description=Allows to visually show the dependency tree graph for Maven projects.
ACT_Show_Graph=\uc885\uc18d\uc131 \uadf8\ub798\ud504 \ubcf4\uae30
TIP_Artifact=<html><i>GroupId:</i><b> {0}</b><br><i>ArtifactId:</i><b> {1} </b><br><i>Version:</i><b> {2}</b><br><i>Scope:</i><b> {3}</b><br><i>Type:</i><b> {4}</b><br>{5}</html>

TIT_DepGraphTC=\uc885\uc18d\uc131 - {0}
LBL_Loading=Loading and constructing graph:
DependencyGraphTopComponent.lblFind.text=\ucc3e\uae30:
LBL_All=\ubaa8\ub450
TAB_Graph=\uadf8\ub798\ud504
DependencyGraphTopComponent.lblScopes.text=Scopes:
DependencyGraphTopComponent.lblPath.text=\uacbd\ub85c:
DependencyGraphTopComponent.maxPathSpinner.toolTipText=Highlight artifacts on shorter paths, disable paths longer then limit

TIP_VersionConflict=Conflict with {0} version required by {1}
TIP_VersionWarning=Warning, overridden by {0} version required by {1}
TIP_Primary=Primary dependency path
TIP_Secondary=Secondary dependency path
TIP_MultipleConflict=Conflicts with:<table><thead><tr><th>Version</th><th>Artifact</th></tr></thead><tbody>
TIP_MultipleWarning=Warning, older versions requested:<table><thead><tr><th>Version</th><th>Artifact</th></tr></thead><tbody>
TIP_SingleConflict=Conflict with <b>{0}</b> version required by <b>{1}</b>
TIP_SingleWarning=Warning, older version <b>{0}</b> requested by <b>{1}</b>

ACT_ZoomToFit=Zoom To Fit
ACT_FixVersionConflict=Fix Version Conflict...
TIT_FixConflict=Fix Version Conflict
ACT_ExcludeDep=\uc81c\uc678
TIP_ExcludeDep=Adds dependency exclusion of this artifact to relevant direct dependencies

LBL_Scope_All=\ubaa8\ub450
LBL_Scope_Compile=\ucef4\ud30c\uc77c
LBL_Scope_Runtime=\ub7f0\ud0c0\uc784
LBL_Scope_Test=Test
Err_CannotLoad=Cannot display Artifact's dependency tree.
FixVersionConflictPanel.conflictL.text=<html>Artifact <b>{0}</b>, clashing versions <b>{1}</b>.
FixVersionConflictPanel.addSetCheck.text={0} Direct Dependency
FixVersionConflictPanel.versionL.text=\ubc84\uc804:
FixVersionConflictPanel.excludeCheck.text=Exclude Transitive Dependency
FixVersionConflictPanel.fromDirectL.text=From Direct Dependencies:
FixVersionConflictPanel.fixPossibL.text=Fix possibilities:
FixVersionConflictPanel.summaryL.text=Fix Summary:
FixVersionConflictPanel.sumContent.text=<html>{0} {1}</html>
FixVersionConflictPanel.sumPart1.text={0} direct dependency on version <b>{1}</b> of <b>{2}</b>.
FixVersionConflictPanel.sumPart2.text=Exclude transitive dependency on <b>{0}</b> from direct dependency on <b>{1}</b>.
FixVersionConflictPanel.noChanges=\ubcc0\uacbd \uc5c6\uc74c.

LBL_SetDep=Set
LBL_AddDep=\ucd94\uac00(A)

