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

# startup manifest
OpenIDE-Module-Name=Startup
OpenIDE-Module-Display-Category=Infrastructure
OpenIDE-Module-Short-Description=Loads and enables modules.
OpenIDE-Module-Long-Description=\
        This module provides the central additional \
        functionality to Bootstrap to locate and enable \
        the right modules.

# VERSIONING (TopLogging, MainWindow)
# {0} - build number
currentVersion=Apache NetBeans Platform Dev (Build {0})

ERR_no_user_directory=netbeans.user is not set.\nPlease check your NetBeans startup script.
# {0} - userdir full path
# {1} - inst full path
ERR_user_dir_is_inside_home=Your user directory ({0}) cannot reside inside your NetBeans installation directory ({1}).

#Splash
# title of the splash window; shown perhaps in window tray of e.g. Gnome
LBL_splash_window_title=Starting Apache NetBeans Platform
# The Title of the About Box
CTL_About_Title=About
CTL_About_Detail=Detail
ACSD_AboutDialog=N/A
ACSN_AboutTabs=N/A
ACSD_AboutTabs=N/A

##########################
#NOI18N
SplashOnByDefault=true
#NOI18N
SPLASH_WIDTH=473
#NOI18N
SPLASH_HEIGHT=300
#NOI18N
SplashShowProgressBar=true
#33546: Be able to set global font size using bundle key
#NOI18N
CTL_globalFontSize=
# x, y, w, h
#NOI18N
SplashRunningTextBounds=10, 235, 450, 12
#NOI18N
SplashProgressBarBounds=0, 249, 473, 3
#16986: Special font size used only for splash screen
#NOI18N
SplashRunningTextFontSize=11
#NOI18N
SplashRunningTextFontType=Dialog
# RGB
#NOI18N
SplashRunningTextColor=0xFFFFFF
#NOI18N
SplashProgressBarColor=0xE00000
#NOI18N
SplashProgressBarEdgeColor=0xC5646F
#NOI18N
SplashProgressBarCornerColor=0xB4A2B5
###################


# error messages
ERR_UIExpected=UI class name expected, using default UI...
ERR_UserDirExpected=Directory expected after --userdir or --cachedir switch
ERR_UINotFound=UI class not found, using default UI...
ERR_FontSizeExpected=Font size expected, using default font size...
ERR_BadFontSize=Bad format of the font size, using default font size...
ERR_BrandingNeedsArgument=Option --branding requires one argument
ERR_LocaleExpected=Locale specification expected after --locale switch


CTL_Netbeanshome_notexists=netbeans.home points to a non-existent directory.
CTL_Netbeanshome1=netbeans.home does not point to a directory.
CTL_Netbeanshome2=netbeans.user points to a non-existent directory.
CTL_Netbeanshome3=netbeans.user does not point to a directory.
# {0} - path to dir that could not be created.
CTL_CannotCreate_text=Cannot create system directory in {0}. A file with the same name already exists.
# {0} - path to dir that could not be created.
CTL_CannotCreateSysDir_text=Cannot create system directory in {0}.
CTL_Cannot_mount_system_fs=Cannot add System filesystem, exiting...

#startup info messages
MSG_IDEInit=Initializing...

# NbURLStreamHandlerFactory
# {0} - URL
EXC_nbres_cannot_connect=Could not connect to URL {0}. No such resource was found.

GTK_FONTSIZE_UNSUPPORTED=--fontsize is not supported on GTK look and feel. \
Adjust your desktop font size instead.

# When showSplash() fails
EXC_GraphicsStartFails1=Error: {0}
EXC_GraphicsStartFails2=See the {0} for details.


# NbProblemDisplayer
# {0} - module display name
# {1} - requested specification version
# {2} - obtained specification version
MSG_problem_other_too_old=The module {0} was requested in version >= {1} but only {2} was found.
# {0} - module display name
MSG_problem_other_disabled=The module {0} would also need to be installed.
LBL_no_impl_version=[no version specified]
# {0} - module display name
# {1} - requested implementation version
# {2} - obtained implementation version
MSG_problem_other_wrong_version=The module {0} was requested in implementation version "{1}" but only "{2}" was found.
# {0} - code name of missing module
MSG_problem_other_needed_not_found=The module named {0} was needed and not found.
# {0} - required token
MSG_problem_require_disabled=None of the modules providing the capability {0} could be installed.
# {0} - required token
MSG_problem_require_not_found=No module providing the capability {0} could be found.
# {0} - class name
MSG_problem_class_not_loaded=The package containing the class {0} was not loaded.
# {0} - package name
MSG_problem_package_not_loaded_or_old=The package {0} was not loaded or was an outdated version.
# {0} - version number, spec format, e.g. 1.5
# {1} - current version number
MSG_problem_java_too_old=The Java platform version {0} or higher was requested but only {1} is running.
# {0} - number of other dependant modules
MSG_also_dep_modules={0,choice,1#Another module|1<{0} further modules} could not be installed due to the above problems.



#
# TopLogging
#

# {0} - class name from MRE
EXC_MissingResourceException_class_name=Missing resource from class: {0}
# {0} - key from MRE
EXC_MissingResourceException_key=Key which was not found: {0}
# {0} - public ID
# {1] - system ID
EXC_sax_parse=Parse error in file {1} (PUBLIC {0})
# {0} - public ID
# {1] - system ID
# {2} - column #
# {3} - line #
EXC_sax_parse_col_line=Parse error in file {1} line {3} column {2} (PUBLIC {0})

# possible values: always, never, missing
#NOI18N
UpdateAllResources=always
