///** @file
//
// Copyright (c) 2007 - 2015, 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:
//
//   BootManagerStrings.uni
// 
// Abstract:
// 
//   String definitions for Boot Manager formset.
// 
// Revision History:
// 
// --*/

/=#
#langdef   en-US "English"
#langdef   fr-FR "Français"

#string STR_BM_BANNER                  #language en-US  "Boot Manager"
                                       #language fr-FR  "Boot Manager"
#string STR_BOOT_MANAGER_HELP          #language en-US  "This selection will take you to the Boot Manager"
                                       #language fr-FR  "This selection will take you to the Boot Manager"
#string STR_HELP_FOOTER                #language en-US  "Use the <↑> and <↓> keys to choose a boot option, the <Enter> key to select a boot option, and the <Esc> key to exit the Boot Manager Menu."
                                       #language fr-FR  "<↑> pour <↓> changer l'option, <ENTRER> choisir une option, <ESC> pour sortir"
#string STR_AND                        #language en-US  " and "
                                       #language fr-FR  " et "
#string STR_BOOT_OPTION_BANNER         #language en-US  "Boot Manager Menu"
                                       #language fr-FR  "le Menu d'Option de Botte"
#string STR_ANY_KEY_CONTINUE           #language en-US  "Press any key to continue..."
                                       #language fr-FR  "Appuie n'importe quelle pour continuer..."
#string STR_LAST_STRING                #language en-US  ""
                                       #language fr-FR  ""

