# 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=Cancelar
FileChooser.saveButton.textAndMnemonic=Salvar
FileChooser.openButton.textAndMnemonic=OK
FileChooser.saveDialogTitle.textAndMnemonic=Salvar
FileChooser.openDialogTitle.textAndMnemonic=Abrir
FileChooser.updateButton.textAndMnemonic=Atualizar
FileChooser.helpButton.textAndMnemonic=Ajuda
FileChooser.pathLabel.textAndMnemonic=Informar &caminho ou nome da pasta:
FileChooser.filterLabel.textAndMnemonic=Filt&ro
FileChooser.foldersLabel.textAndMnemonic=Pa&stas
FileChooser.filesLabel.textAndMnemonic=Arqu&ivos
FileChooser.enterFileNameLabel.textAndMnemonic=I&nforme o nome do arquivo:
FileChooser.enterFolderNameLabel.textAndMnemonic=Informar nome da pasta:

FileChooser.cancelButtonToolTip.textAndMnemonic=Abortar caixa de di\u00E1logo do seletor de arquivos.
FileChooser.saveButtonToolTip.textAndMnemonic=Salvar arquivo selecionado.
FileChooser.openButtonToolTip.textAndMnemonic=Abrir arquivo selecionado.
FileChooser.updateButtonToolTip.textAndMnemonic=Atualizar lista de diret\u00F3rios.
FileChooser.helpButtonToolTip.textAndMnemonic=Ajuda do FileChooser.
