///** @file
//
// Copyright (c) 2007 - 2018, 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  ""

