// *++
//
// Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Module Name:
//
//   SetupBrowserStr.uni
//
// Abstract:
//
//   String definitions for Browser.
//
// --*/


/=#

#langdef en-US "English"
#langdef fr-FR "Français"

#string ENTER_STRING                   #language en-US  "<Enter>=Select Entry"
                                       #language fr-FR  "<Enter>=Choisir l'Entrée"
#string ENTER_COMMIT_STRING            #language en-US  "<Enter>=Complete Entry"
                                       #language fr-FR  "<Enter>=Compléter l'Entrée"
#string ENTER_ESCAPE_STRING            #language en-US  "Esc=Exit Entry"
                                       #language fr-FR  "Esc=Sortir l'Entrée"
#string ESCAPE_STRING                  #language en-US  "Esc=Exit"
                                       #language fr-FR  "Esc=Sortir"
#string ADJUST_NUMBER                  #language en-US  "+/- =Adjust Value"
                                       #language fr-FR  "+/- =Ajuster la valeur"
#string PLUS_STRING                    #language en-US  "+ =Move Selection Up"
                                       #language fr-FR  "+ =Relever le choix"
#string MINUS_STRING                   #language en-US  "- =Move Selection Down"
                                       #language fr-FR  "- =Abaisser le choix"
#string MOVE_HIGHLIGHT                 #language en-US  "=Move Highlight"
                                       #language fr-FR  "=Essentiel de mouvement"
#string DEC_NUMERIC_INPUT              #language en-US  "0123456789 are valid inputs"
                                       #language fr-FR  "0123456789 sont des données valides"
#string HEX_NUMERIC_INPUT              #language en-US  "0-9 a-f are valid inputs"
                                       #language fr-FR  "0-9 a-f sont des données valides"
#string TOGGLE_CHECK_BOX               #language en-US  "<Spacebar>Toggle Checkbox"
                                       #language fr-FR  "<Spacebar>Bascule la Case de pointage"
#string NV_UPDATE_MESSAGE              #language en-US  "Configuration changed"
                                       #language fr-FR  "Configuration changed"
#string INPUT_ERROR_MESSAGE            #language en-US  "!!"
                                       #language fr-FR  "!!"
#string EMPTY_STRING                   #language en-US  ""
                                       #language fr-FR  ""
#string ARE_YOU_SURE_YES               #language en-US  "Y"
                                       #language fr-FR  "Y"
#string ARE_YOU_SURE_NO                #language en-US  "N"
                                       #language fr-FR  "N"
#string SAVE_CHANGES                   #language en-US  "Changes have not saved. Save Changes and exit?"
                                       #language fr-FR  "Enregistrer les modifications et quitter?"
#string ARE_YOU_SURE                   #language en-US  "Press 'Y' to save and exit, 'N' to discard and exit, 'ESC' to cancel."
                                       #language fr-FR  "Pressez 'Y' pour sauvegarder et quitter, 'N' de se défaire et de sortie"
