// *++
//
// Copyright (c) 2007 - 2018, 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:
//
//   InventoryStrings.uni
//
// Abstract:
//
//   String definitions for Inventory file.
//
// Revision History:
//
// --*/


/=#

#langdef en-US "English"
#langdef fr-FR "Francais"


#string STR_INV_FORM_SET_TITLE         #language en-US  "ABC Information Sample"
                                       #language fr-FR  "Mi motor Español de arreglo"
#string STR_INV_FORM_SET_HELP          #language en-US  "The ABC Network Controller version information, which includes Firmware versions as well as supported characteristics"
                                       #language fr-FR  "The ABC Network Controller version information, which includes Firmware versions as well as supported characteristics"
#string STR_INV_FORM1_TITLE            #language en-US  "ABC Network Controller Version Data"
                                       #language fr-FR  "Mi Primero Arreglo Página"
#string STR_INV_VERSION_TEXT           #language en-US  "Firmware Revision Date: 02/03/2002"
                                       #language fr-FR  "Firmware Revision Date: 02/03/2002"
#string STR_INV_VERSION_HELP           #language en-US  "The date of the revision of the Firmware being used."
                                       #language fr-FR  "The date of the revision of the Firmware being used."
#string STR_INV_VERSION_TEXT2          #language en-US  "Major Version: 6.32.5"
                                       #language fr-FR  "Major Version: 6.32.5"
#string STR_INV_VERSION_TEXT3          #language en-US  "Patch Version: 1.02.53"
                                       #language fr-FR  "Patch Version: 1.02.53"
#string STR_INV_VERSION_TEXT4          #language en-US  "Characteristics:  10/100 Mb/s"
                                       #language fr-FR  "Characteristics:  10/100 Mb/s"
#string STR_INV_VERSION_TEXT5          #language en-US  "                  3.3 V power usage"
                                       #language fr-FR  "                  3.3 V power usage"
#string STR_INV_VERSION_TEXT6          #language en-US  "                  3K Transmit FIFO"
                                       #language fr-FR  "                  3K Transmit FIFO"
#string STR_INV_VERSION_TEXT7          #language en-US  "                  3K Receive FIFO"
                                       #language fr-FR  "                  3K Receive FIFO"
#string STR_INV_VERSION_TEXT8          #language en-US  "                  TCP/UDP checksum offload"
                                       #language fr-FR  "                  TCP/UDP checksum offload"
#string STR_INV_VERSION_TEXT9          #language en-US  "                  128K Flash"
                                       #language fr-FR  "                  128K Flash"
#string STR_INV_VERSION_TEXT10         #language en-US  "                  32-bit PCI"
                                       #language fr-FR  "                  32-bit PCI"
#string STR_INV_VERSION_TEXT11         #language en-US  "                  Intel® 82540EM"
                                       #language fr-FR  "                  Intel® 82540EM"
#string STR_INV_VERSION_TEXT12         #language en-US  "Press ESC to exit."
                                       #language fr-FR  "Press ESC to exit."
#string STR_INV_EMPTY_STRING           #language en-US  ""
                                       #language fr-FR  ""


