# 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-Display-Category=Java
OpenIDE-Module-Long-Description=\
    Module-info dependency graph
OpenIDE-Module-Name=Module-Info Graph
GraphTopComponent.zoomIn.text=
GraphTopComponent.zoomOut.text=
OpenIDE-Module-Short-Description=Module-info visualizer
GraphTopComponent.lblFind.text=Find:
GraphTopComponent.lblPath.text=Path:
GraphTopComponent.maxPathSpinner.toolTipText=Highlight artifacts on shorter paths, disable paths longer then limit
GraphTopComponent.lblPath.toolTipText=Highlight artifacts on shorter paths, disable paths longer then limit
GraphTopComponent.jdkLabel.text=JDK Scope:
LBL_UnnamedModule=<<unnamed>>
GraphTopComponent.transitiveCheckBox.text=
GraphTopComponent.transitiveCheckBox.toolTipText=Show Readability
GraphTopComponent.jdkLabel.toolTipText=
