# This properties file is used to create a PropertyResourceBundle
# It contains Locale specific strings used be the Motif Look and Feel.
# Currently, the following components need this for support:
#
#    FileChooser
#
# When this file is read in, the strings are put into the 
# defaults table.  This is an implementation detail of the current
# workings of Swing.  DO NOT DEPEND ON THIS.  
# This may change in future versions of Swing as we improve localization 
# support.
#
# Refer to the note in basic.properties for a description as to what
# the mnemonics correspond to and how to calculate them.
#
# @author Steve Wilson


############ FILE CHOOSER STRINGS #############

FileChooser.acceptAllFileFilter.textAndMnemonic=*
FileChooser.cancelButton.textAndMnemonic=Cancel
FileChooser.saveButton.textAndMnemonic=Save
FileChooser.openButton.textAndMnemonic=OK
FileChooser.saveDialogTitle.textAndMnemonic=Save
FileChooser.openDialogTitle.textAndMnemonic=Open
FileChooser.updateButton.textAndMnemonic=Update
FileChooser.helpButton.textAndMnemonic=Help
FileChooser.pathLabel.textAndMnemonic=Enter &path or folder name:
FileChooser.filterLabel.textAndMnemonic=Filte&r
FileChooser.foldersLabel.textAndMnemonic=Fo&lders
FileChooser.filesLabel.textAndMnemonic=F&iles
FileChooser.enterFileNameLabel.textAndMnemonic=E&nter file name:
FileChooser.enterFolderNameLabel.textAndMnemonic=Enter folder name:

FileChooser.cancelButtonToolTip.textAndMnemonic=Abort file chooser dialog.
FileChooser.saveButtonToolTip.textAndMnemonic=Save selected file.
FileChooser.openButtonToolTip.textAndMnemonic=Open selected file.
FileChooser.updateButtonToolTip.textAndMnemonic=Update directory listing.
FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser help.
