///** @file
//  
//    String definitions for Legacy Boot Maintainece Ui.
//  
//  Copyright (c) 2004 - 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.
//  
//**/

/=#

#langdef   en-US "English"
#langdef   fr-FR "Français"

#string STR_LEGACY_BOOT_PROMPT         #language en-US  "Legacy Boot Options Menu"
                                       #language fr-FR  "Legacy Boot Options Menu"
#string STR_LEGACY_BOOT_HELP           #language en-US  "Manager legacy boot options in this driver."
                                       #language fr-FR  "Manager legacy boot options in this driver."
#string STR_FORM_FLOPPY_BOOT_TITLE     #language en-US  "Set Legacy Floppy Driver Order"
                                       #language fr-FR  "Set Legacy Floppy Driver Order"
#string STR_FORM_FLOPPY_BOOT_HELP      #language en-US  "Set Legacy Floppy Driver Order."
                                       #language fr-FR  "Set Legacy Floppy Driver Order."
#string STR_FORM_HARDDISK_BOOT_TITLE   #language en-US  "Set Legacy HARDDISK Driver Order"
                                       #language fr-FR  "Set Legacy HARDDISK Driver Order"
#string STR_FORM_HARDDISK_BOOT_HELP    #language en-US  "Set Legacy HARDDISK Driver Order."
                                       #language fr-FR  "Set Legacy HARDDISK Driver Order."
#string STR_FORM_CDROM_BOOT_TITLE      #language en-US  "Set Legacy CDROM Driver Order"
                                       #language fr-FR  "Set Legacy CDROM Driver Order"
#string STR_FORM_CDROM_BOOT_HELP       #language en-US  "Set Legacy CDROM Driver Order."
                                       #language fr-FR  "Set Legacy CDROM Driver Order."
#string STR_FORM_NET_BOOT_TITLE        #language en-US  "Set Legacy NET Driver Order"
                                       #language fr-FR  "Set Legacy NET Driver Order"
#string STR_FORM_NET_BOOT_HELP         #language en-US  "Set Legacy NET Driver Order."
                                       #language fr-FR  "Set Legacy NET Driver Order."
#string STR_FORM_BEV_BOOT_TITLE        #language en-US  "Set Legacy BEV Driver Order"
                                       #language fr-FR  "Set Legacy BEV Driver Order"
#string STR_FORM_BEV_BOOT_HELP         #language en-US  "Set Legacy BEV Driver Order."
                                       #language fr-FR  "Set Legacy BEV Driver Order."
#string STR_ORDER_CHANGE_PROMPT        #language en-US  "Change Driver Boot Order."
                                       #language fr-FR  "Change Driver Boot Order."
#string STR_DISABLE_LEGACY_DEVICE      #language en-US  "Disabled"
                                       #language fr-FR  "Disabled"
                                       