// *++
//
// Copyright (c) 2009 - 2014, 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:
//
//   VfrStrings.vfr
//
// Abstract:
//
//   String definitions for platform driver override manager formset.
//
//
// --*/


/=#

#langdef en-US "English"
#langdef fr-FR "Francais"


#string STR_ENTRY_TITLE                           #language en-US  "Platform Driver Override selection"
                                                  #language fr-FR  "fr-FR: Platform Driver Override selection"
#string STR_TITLE                                 #language en-US  " "
                                                  #language fr-FR  " "
#string STR_TITLE_HELP                            #language en-US  "Select driver connection order as platform policy for specific controller"
                                                  #language fr-FR  "fr-FR: Select driver connection order as platform policy for specific controller"
#string STR_TITLE_ORDER                           #language en-US  "Order Platform Override driver priority"
                                                  #language fr-FR  "fr-FR: Order Platform Override driver priority"
#string STR_TITLE_ORDER_HELP                      #language en-US  "Select the drivers you need to add as previous controller's override driver in the following check box, and go on to order them priority in this entry. '?' means you have not select the driver"
                                                  #language fr-FR  "fr-FR: Select the drivers you need to add as previous controller's override driver in the following check box, and go on to order them priority in this entry. '?' means you have not select the driver"
#string STR_FIRST_REFRESH                         #language en-US  "Please refresh page firstly"
                                                  #language fr-FR  "fr-FR: Please Refresh page firstly"
#string STR_FIRST_REFRESH_HELP                    #language en-US  "When enter the page at first time, refresh is needed to show all the controller device paths"
                                                  #language fr-FR  "fr-FR: When enter the page at first time, refresh is needed to show all the controller device paths"
#string STR_REFRESH                               #language en-US  "Refresh"
                                                  #language fr-FR  "fr-FR: Refresh"
#string STR_REFRESH_HELP                          #language en-US  "Refresh to show all the current controllers device paths"
                                                  #language fr-FR  "fr-FR: Refresh to show all the current controllers device paths"
#string STR_PCI_DEVICE_FILTER_PROMPT              #language en-US  "PCI device filter"
                                                  #language fr-FR  "fr-FR: PCI device filter"
#string STR_PCI_DEVICE_FILTER_HELP                #language en-US  "Only show the PCI device which has EFI driver in its option rom"
                                                  #language fr-FR  "fr-FR: Only show the PCI device which has EFI driver in its option rom"
#string STR_DRIVER_DEFAULT_NAME                   #language en-US  "Driver Default Name"
                                                  #language fr-FR  "fr-FR: Driver Default Name"
#string STR_GOTO_HELP_DRIVER                      #language en-US  "Select the controller device path which you need combine override drivers, '**' means you have saved its info before"
                                                  #language fr-FR  "fr-FR: Select the controller device path which you need combine override drivers"
#string STR_NULL_STRING                           #language en-US  ""
                                                  #language fr-FR  ""
#string STR_GOTO_PREVIOUS                         #language en-US  "Go to Previous Menu"
                                                  #language fr-FR  "fr-FR: Go to Previous Menu"
#string STR_SAVE_AND_EXIT                         #language en-US  "Commit Changes"
                                                  #language fr-FR  "fr-FR: Commit Changes"
#string STR_CLEAR_ALL                             #language en-US  "Clear all mapping record!"
                                                  #language fr-FR  "fr-FR: Clear all mapping record!"
#string STR_CLEAR_ALL_HELP                        #language en-US  "Deletes all environment variable(s) that contain the override mappings info"
                                                  #language fr-FR  "fr-FR: Clear all mapping record!"
