// *++
//
// Copyright (c) 2004 - 2013, 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:
//
//   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"
