# 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-Name=Dialogs API
OpenIDE-Module-Display-Category=Infrastructure
OpenIDE-Module-Short-Description=Handles dialogs and wizards.
OpenIDE-Module-Long-Description=\
        This module handles the dialog and wizard infrastructure \
        used in NetBeans.

# Notify system
NTF_ErrorTitle=Error
NTF_ExceptionTitle=Exception
# {0} - type of exception
# {1} - ~/.netbeans/3.5/system (or whatever)
NTF_ExceptionalException=\
        A {0} exception has occurred.\n\
	Please report this at http://www.netbeans.org/issues.html, including a copy of your messages.log file.\n\
	The messages.log file is located in your {1} folder.
NTF_ExceptionalExceptionTitle=Unexpected Exception
NTF_PlainTitle=Message
NTF_QuestionTitle=Question
NTF_InformationTitle=Information
NTF_WarningTitle=Warning

#
# Dialog system
#
EXC_OptionsAlign=Options Align

#
# names of buttons
#
CTL_OK=OK
CTL_YES=Yes
CTL_NO=No
CTL_CLOSE=Close

CTL_CANCEL=Cancel
ACSD_CANCEL=n/a

CTL_NEXT=Next >
# {0} = next step number, 1 = next step is not known
# {1} = next step name
ACSD_NEXT={0,choice,1#Moves to next step of the wizard.|2#Next step: {0}. {1}}

CTL_PREVIOUS=< &Back
CTL_PREVIOUS_Mnemonic=B
# {0} = previous step number, -1 = previous step is not known
# {1} = previous step name
ACSD_PREVIOUS={0,choice,-1#Moves to previous step of the wizard.|0#Previous step: {0}. {1}}

CTL_FINISH=&Finish
ACSD_FINISH=n/a

# NotifyDescriptor

ACSD_InputPanel=Input line
ACSD_InputField=N/A
ACN_NotifyDescriptor_MessageJTextArea=N/A
ACD_NotifyDescriptor_MessageJTextArea=N/A

# WizardDescriptor

# {0} name of component
# {1} name of panel index
CTL_WizardName={0} wizard ({1})
# {0} step number
# {1} step name
# {2} step description
ACSD_WizardPanel={0,choice,0#{1}: {2}|1#{0}. {1}: {2}}

# {0} current index of panel
# {1} total number of panels
CTL_ArrayIteratorName={0} of {1}
CTL_ContentName=Steps
CTL_HelpName=Help

#RGB of wizard steps panel background
#NOI18N
INT_WizardBackRed=255
#NOI18N
INT_WizardBackGreen=255
#NOI18N
INT_WizardBackBlue=255
#RGB of wizard steps panel foreground
#NOI18N
INT_WizardForegroundRed=0
#NOI18N
INT_WizardForegroundGreen=0
#NOI18N
INT_WizardForegroundBlue=0
#Property - wizard panel image alignment
#NOI18N
STRING_WizardImageAlignment=South


CTL_InstantiateProgress_Title=Please wait.

Lbl_CopyToClipboard=Copy to clipboard
