# 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=Avbryt
FileChooser.saveButton.textAndMnemonic=Spara
FileChooser.openButton.textAndMnemonic=OK
FileChooser.saveDialogTitle.textAndMnemonic=Spara
FileChooser.openDialogTitle.textAndMnemonic=\u00D6ppna
FileChooser.updateButton.textAndMnemonic=Uppdatera
FileChooser.helpButton.textAndMnemonic=Hj\u00E4lp
FileChooser.pathLabel.textAndMnemonic=Ange &s\u00F6kv\u00E4g eller mappnamn:
FileChooser.filterLabel.textAndMnemonic=Filte&r
FileChooser.foldersLabel.textAndMnemonic=Ma&ppar
FileChooser.filesLabel.textAndMnemonic=F&iler
FileChooser.enterFileNameLabel.textAndMnemonic=A&nge filnamn:
FileChooser.enterFolderNameLabel.textAndMnemonic=Ange ett mappnamn:

FileChooser.cancelButtonToolTip.textAndMnemonic=Avbryt dialogrutan Filv\u00E4ljare.
FileChooser.saveButtonToolTip.textAndMnemonic=Spara vald fil.
FileChooser.openButtonToolTip.textAndMnemonic=\u00D6ppna vald fil.
FileChooser.updateButtonToolTip.textAndMnemonic=Uppdatera kataloglistan.
FileChooser.helpButtonToolTip.textAndMnemonic=Hj\u00E4lp - Filv\u00E4ljare.
