# 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=\
    Support for modular Java projects, often Java SE (client-side). \
    A modular Java SE project can compile multiple source modules, build an application from them, run JUnit-based tests, create Javadoc, and run or debug the application.
OpenIDE-Module-Name=Java SE Modular Projects
OpenIDE-Module-Short-Description=Supports plain modular Java projects.

# J2SEModularProjectGenerator
# NOTE TO TRANSLATORS: COMMENT_* keys are used to create the initial project.properties
# for a project. The properties file format only accepts ISO-8859-1 characters in their
# raw form, i.e. Western European scripts. Any other characters (e.g. Asian) will be stored
# in the properties file correctly but be unreadable in text mode: \u1234 syntax is used.
# (The proper characters will be displayed only if the file is opened in the table editor.)
COMMENT_dist.dir=This directory is removed when the project is cleaned:
COMMENT_build.dir=This directory is removed when the project is cleaned:
COMMENT_run.jvmargs=Space-separated list of JVM arguments used when running the project.
COMMENT_run.jvmargs_2=You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
COMMENT_run.jvmargs_3=To set system properties for unit tests define test-sys-prop.name=value:
COMMENT_build.sysclasspath=Only compile against the classpath explicitly listed here:
COMMENT_javac.compilerargs=Space-separated list of extra javac options
COMMENT_debug.transport=Uncomment to specify the preferred debugger connection transport:
COMMENT_dist.archive.excludes=Files in build.classes.dir which should be excluded from distribution jar
COMMENT_jlink.additionalmodules=The jlink additional root modules to resolve
COMMENT_jlink.additionalparam=The jlink additional command line parameters

NAME_src.dir=Source Packages
NAME_test.src.dir=Test Packages

J2SEModularConfigurationProvider.default.label=<default config>

# {0} - project directory
J2SEModularProject.too_new=This version of the IDE is too old to read metadata in {0}.
