///** @file
//  
//    String definitions for BdsPlatform formset.
//  
//  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.
//  
//**/

/=#

#langdef   en-US "English"
#langdef   fr-FR "Français"
#langdef   en    "Standard English"
#langdef   fr    "Standard Français"

#string STR_FRONT_PAGE_TITLE           #language en-US  "Front Page"
                                       #language fr-FR  "Front Page"
#string STR_FRONT_PAGE_COMPUTER_MODEL  #language en-US  ""
                                       #language fr-FR  ""
#string STR_FRONT_PAGE_CPU_MODEL       #language en-US  ""
                                       #language fr-FR  ""
#string STR_FRONT_PAGE_CPU_SPEED       #language en-US  ""
                                       #language fr-FR  ""
#string STR_FRONT_PAGE_MEMORY_SIZE     #language en-US  ""
                                       #language fr-FR  ""
#string STR_FRONT_PAGE_BIOS_VERSION    #language en-US  ""
                                       #language fr-FR  ""
#string STR_FRONT_PAGE_BANNER_0_LEFT   #language en-US  "Wonder Computer Model 1000Z  Manufactured by Intel®"
                                       #language fr-FR  "Demander le Modèle d'Ordinateur 1000Z A Fabriqué par Intel®"
#string STR_FRONT_PAGE_BANNER_0_RIGHT  #language en-US  "OK"
                                       #language fr-FR  "Bon"
#string STR_FRONT_PAGE_BANNER_1_LEFT   #language en-US  "2 Pentium® X Xeon processors running at 800Thz"
                                       #language fr-FR  "2 Pentium® X les processeurs de Xeon courants à 800Thz"
#string STR_FRONT_PAGE_BANNER_1_RIGHT  #language en-US  "24 TB System RAM"
                                       #language fr-FR  "24 TB RAM de Système"
#string STR_FRONT_PAGE_BANNER_2_LEFT   #language en-US  "ACME® EFI BIOS Version 13.5 Release 1039.92"
                                       #language fr-FR  "ACME® EFI BIOS Version 13.5 Release 1039.92"
#string STR_FRONT_PAGE_BANNER_3_LEFT   #language en-US  "Serial Number: 1Z123456789MARMAR (Need SMBIOS entries)"
                                       #language fr-FR  "Numéro de série: 1Z123456789MARMAR (Les entrées de SMBIOS de besoin)"
#string STR_CONTINUE_PROMPT            #language en-US  "Continue"
                                       #language fr-FR  "Continuer"
#string STR_CONTINUE_HELP              #language en-US  "This selection will direct the system to continue to booting process"
                                       #language fr-FR  "Cette sélection dirigera le système pour continuer au charger de procédé"
#string STR_LANGUAGE_SELECT            #language en-US  "Select Language"
                                       #language fr-FR  "Choisir la Langue"
#string STR_LANGUAGE_SELECT_HELP       #language en-US  "This is the option one adjusts to change the language for the current system"
                                       #language fr-FR  "Ceci est l'option que celui ajuste changer la langue pour le système actuel"
#string STR_BOOT_MANAGER               #language en-US  "Boot Manager"
                                       #language fr-FR  "Charger le Directeur"
#string STR_BOOT_MANAGER_HELP          #language en-US  "This selection will take you to the Boot Manager"
                                       #language fr-FR  "Cette sélection vous prendra au Directeur de Botte"
#string STR_BOOT_MAINT_MANAGER         #language en-US  "Boot Maintenance Manager"
                                       #language fr-FR  "Directeur d'Entretien"
#string STR_BOOT_MAINT_MANAGER_HELP    #language en-US  "This selection will take you to the Boot Maintenance Manager"
                                       #language fr-FR  "Cette sélection vous prendra au Directeur d'Entretien"
#string STR_DEVICE_MANAGER             #language en-US  "Device Manager"
                                       #language fr-FR  "Directeur d'appareil"
#string STR_DEVICE_MANAGER_HELP        #language en-US  "This selection will take you to the Device Manager"
                                       #language fr-FR  "Cette sélection vous prendra au Directeur d'Appareil"
#string STR_TIME_OUT_PROMPT            #language en-US  "Boot process will continue in %d seconds"
                                       #language fr-FR  "Le procédé de botte continuera dans %d secondes"
#string STR_MISSING_STRING             #language en-US  "Missing String"
                                       #language fr-FR  "Missing String"
