# This properties file is used to create a PropertyResourceBundle
# It contains Locale specific strings used be the Windows 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.lookInLabel.textAndMnemonic=\uCC3E\uB294 \uC704\uCE58(&I):
FileChooser.saveInLabel.textAndMnemonic=\uC800\uC7A5 \uC704\uCE58:
FileChooser.fileNameLabel.textAndMnemonic=\uD30C\uC77C \uC774\uB984(&N):
FileChooser.folderNameLabel.textAndMnemonic=\uD3F4\uB354 \uC774\uB984(&N):
FileChooser.filesOfTypeLabel.textAndMnemonic=\uD30C\uC77C \uC720\uD615(&T):
FileChooser.upFolderToolTip.textAndMnemonic=\uD55C \uB808\uBCA8 \uC704\uB85C
FileChooser.upFolderAccessibleName=\uC704\uB85C
FileChooser.homeFolderToolTip.textAndMnemonic=\uD648
FileChooser.homeFolderAccessibleName=\uD648
FileChooser.newFolderToolTip.textAndMnemonic=\uC0C8 \uD3F4\uB354 \uC0DD\uC131
FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354
FileChooser.newFolderActionLabel.textAndMnemonic=\uC0C8 \uD3F4\uB354
FileChooser.listViewButtonToolTip.textAndMnemonic=\uBAA9\uB85D
FileChooser.listViewButtonAccessibleName=\uBAA9\uB85D
FileChooser.listViewActionLabel.textAndMnemonic=\uBAA9\uB85D
FileChooser.detailsViewButtonToolTip.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
FileChooser.detailsViewButtonAccessibleName=\uC138\uBD80 \uC815\uBCF4
FileChooser.viewMenuButtonToolTipText = \uBCF4\uAE30 \uBA54\uB274
FileChooser.viewMenuButtonAccessibleName = \uBCF4\uAE30 \uBA54\uB274
FileChooser.detailsViewActionLabel.textAndMnemonic=\uC138\uBD80 \uC815\uBCF4
FileChooser.refreshActionLabel.textAndMnemonic=\uC0C8\uB85C \uACE0\uCE68
FileChooser.viewMenuLabel.textAndMnemonic=\uBCF4\uAE30
FileChooser.fileNameHeader.textAndMnemonic=\uC774\uB984
FileChooser.fileSizeHeader.textAndMnemonic=\uD06C\uAE30
FileChooser.fileTypeHeader.textAndMnemonic=\uC720\uD615
FileChooser.fileDateHeader.textAndMnemonic=\uC218\uC815 \uB0A0\uC9DC
FileChooser.fileAttrHeader.textAndMnemonic=\uC18D\uC131
