# Refer to the note in basic.properties for a description as to what
# the mnemonics correspond to and how to calculate them.



# GTK specific properties

# GTK color chooser properties:
GTKColorChooserPanel.nameText=S\u00e9lectionneur de couleur GTK
# mnemonic as a VK_ constant
GTKColorChooserPanel.mnemonic=71
# Can also define GTKColorChooserPanel.dispalyedMnemonicIndex if you
# want an index other than would normally be underlined by
# GTKColorChooserPanel.mnemonic to be underlined. This is only useful
# if GTKColorChooserPanel.nameText defines the mnemonic character more
# than once and you want a character other than the first underlined.

# Text and mnemonics for the spinner. You can also defined a different
# index for the mnemonic via xxxMnemonicIndex, for example
# GTKColorChooserPanel.hueMnemonicIndex=1 would indicate the second
# character of GTKColorChooserPanel.hueText should be underlined to
# represent the mnemonic.
GTKColorChooserPanel.hueText=Teinte\u00a0:
GTKColorChooserPanel.hueMnemonic=84

GTKColorChooserPanel.redText=Rouge\u00a0:
GTKColorChooserPanel.redMnemonic=82

GTKColorChooserPanel.saturationText=Saturation\u00a0:
GTKColorChooserPanel.saturationMnemonic=83

GTKColorChooserPanel.greenText=Vert\u00a0:
GTKColorChooserPanel.greenMnemonic=69

GTKColorChooserPanel.valueText=Valeur\u00a0:
GTKColorChooserPanel.valueMnemonic=86

GTKColorChooserPanel.blueText=Bleu\u00a0:
GTKColorChooserPanel.blueMnemonic=66

GTKColorChooserPanel.colorNameText=Nom de la couleur\u00a0:
GTKColorChooserPanel.colorNameMnemonic=78



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

FileChooser.acceptAllFileFilterText=Tous les fichiers
FileChooser.newFolderButtonText=Nouveau dossier
FileChooser.newFolderButtonMnemonic=78
FileChooser.newFolderDialogText=Nom de dossier:
FileChooser.newFolderNoDirectoryErrorTitleText=Error
FileChooser.newFolderNoDirectoryErrorText=Error creating directory "{0}": No such file or directory
FileChooser.deleteFileButtonText=Supprimer le fichier
FileChooser.deleteFileButtonMnemonic=76
FileChooser.renameFileButtonText=Renommer le fichier
FileChooser.renameFileButtonMnemonic=82
FileChooser.cancelButtonText=Annuler
FileChooser.cancelButtonMnemonic=70
FileChooser.saveButtonText=Enregistrer
FileChooser.saveButtonMnemonic=79
FileChooser.openButtonText=OK
FileChooser.openButtonMnemonic=79
FileChooser.saveDialogTitleText=Enregistrer
FileChooser.openDialogTitleText=Ouvrir
FileChooser.pathLabelText=S\u00e9lection\u00a0:
FileChooser.filterLabelText=Filtre :
FileChooser.pathLabelMnemonic=83
FileChooser.foldersLabelText=Dossiers
FileChooser.foldersLabelMnemonic=71
FileChooser.filesLabelText=Fichiers
FileChooser.filesLabelMnemonic=70

FileChooser.cancelButtonToolTipText=Abandonner la bo\u00eete de dialogue du s\u00e9lectionneur de fichier.
FileChooser.saveButtonToolTipText=Enregistrer le fichier s\u00e9lectionn\u00e9.
FileChooser.openButtonToolTipText=Ouvrir le fichier s\u00e9lectionn\u00e9.

FileChooser.renameFileDialogText=Renommer le fichier "{0}" en
FileChooser.renameFileErrorTitle=Erreur 
FileChooser.renameFileErrorText=Erreur lors du changement de nom du fichier "{0}" en "{1}"

OptionPane.okButtonMnemonic=79
OptionPane.cancelButtonMnemonic=67
