///** @file
//
// Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
// This program and the accompanying materials                          
// are licensed and made available under the terms and conditions of the BSD License         
// which accompanies this distribution.  The full text of the license may be found at        
// http://opensource.org/licenses/bsd-license.php                                            
//                                                                                           
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
// 
// Module Name:
//
//   FileExplorerString.uni
// 
// Abstract:
// 
//   String definitions for file exporer library.
// 
// Revision History:
// 
// --*/
/=#

#langdef   en-US "English"
#langdef   fr-FR "Français"

#string STR_NULL_STRING                #language en-US  " "
                                       #language fr-FR  " "
#string STR_FILE_EXPLORER_TITLE        #language en-US  "File Explorer"
                                       #language fr-FR  "File Explorer"
#string STR_NEW_FILE                   #language en-US  "***NEW FILE***"
                                       #language fr-FR  "***NEW FILE***"
#string STR_NEW_FILE_HELP              #language en-US  "This menu used to create a new file in current directory, jump to next page to name the new file"
                                       #language fr-FR  "This menu used to create a new file in current directory, jump to next page to name the new file"
#string STR_ADD_NEW_FILE_TITLE         #language en-US  "Create a new file"
                                       #language fr-FR  "Create a new file"
#string STR_ADD_NEW_FOLDER_TITLE       #language en-US  "Create a new folder"
                                       #language fr-FR  "Create a new folder"
#string STR_NEW_FILE_NAME_PROMPT       #language en-US  "File Name"
                                       #language fr-FR  "File Name"
#string STR_NEW_FILE_NAME_HELP         #language en-US  "Please input a name for the new file"
                                       #language fr-FR  "Please input a name for the new file"
#string STR_CREATE_FILE_AND_EXIT       #language en-US  "Create File and Exit"
                                       #language fr-FR  "Create File and Exit"
#string STR_NO_CREATE_FILE_AND_EXIT    #language en-US  "Discard Create and Exit"
                                       #language fr-FR  "Discard Create and Exit"
#string STR_NEW_FOLDER                 #language en-US  "***NEW FOLDER***"
                                       #language fr-FR  "***NEW FOLDER***"
#string STR_NEW_FOLDER_HELP            #language en-US  "This menu used to create a new folder in current directory, jump to next page to name the new folder"
                                       #language fr-FR  "This menu used to create a new folder in current directory, jump to next page to name the new folder"
#string STR_ADD_NEW_FOLDER_TITLE       #language en-US  "Create a new folder"
                                       #language fr-FR  "Create a new folder"
#string STR_NEW_FOLDER_NAME_PROMPT     #language en-US  "Folder Name"
                                       #language fr-FR  "Folder Name"
#string STR_NEW_FOLDER_NAME_HELP       #language en-US  "Please input a name for the new folder"
                                       #language fr-FR  "Please input a name for the new folder"
#string STR_CREATE_FOLDER_AND_EXIT     #language en-US  "Create Folder and Exit"
                                       #language fr-FR  "Create Folder and Exit"
#string STR_NO_CREATE_FOLDER_AND_EXIT  #language en-US  "Discard Create and Exit"
                                       #language fr-FR  "Discard Create and Exit"
